From 81e33718643c814bfc1fcd0fd6fd15c3d9f24d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 3 Mar 2022 18:57:13 +0100 Subject: [PATCH 01/59] Add `IcuUnitTextContentTokenizer` --- .../iterator/ContentIteratorService.kt | 47 ++++++++ .../services/iterator/TextContentIterator.kt | 89 +++++++++++++++ .../IcuUnitTextContentTokenizerTest.kt | 101 ++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/ContentIteratorService.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt create mode 100644 readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuUnitTextContentTokenizerTest.kt diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/ContentIteratorService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/ContentIteratorService.kt new file mode 100644 index 0000000000..64bc281c8c --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/ContentIteratorService.kt @@ -0,0 +1,47 @@ +package org.readium.r2.shared.publication.services.iterator + +import android.icu.text.BreakIterator +import android.os.Build +import androidx.annotation.RequiresApi +import org.readium.r2.shared.UserException +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.util.SuspendingCloseable +import org.readium.r2.shared.util.Try + +typealias ContentIteratorTry = Try + +/** + * Represents an error which might occur while iterating through a publication's content. + */ +sealed class ContentIteratorException private constructor( + override val message: String, + cause: Throwable? = null +) : Exception(message, cause) { + class UnsupportedOption(message: String) : ContentIteratorException(message) +} + +interface Content + +interface ContentIteratorService : Publication.Service { + suspend fun iterator(startLocator: Locator?, options: O? = null): ContentIteratorTry> +} + +/** + * Iterates through a publication's content. + */ +interface ContentIterator : SuspendingCloseable { + + /** + * Retrieves the next piece of content. + * + * @return Null when reaching the end of the publication, or an error in case of failure. + */ + suspend fun next(): ContentIteratorTry + + /** + * Closes any resources allocated for the search query, such as a cursor. + * To be called when the user dismisses the search. + */ + override suspend fun close() {} +} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt new file mode 100644 index 0000000000..3939f99527 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt @@ -0,0 +1,89 @@ +package org.readium.r2.shared.publication.services.iterator + +import android.icu.text.BreakIterator +import android.os.Build +import androidx.annotation.RequiresApi +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.util.Try +import java.util.* + +data class TextContentOptions( + val tokenizer: TextContentTokenizer, +) + +data class TextContent( + val text: String, + val locator: Locator +) : Content + +interface TextContentTokenizer { + suspend fun tokenize(content: String): ContentIteratorTry> +} + +enum class TextContentUnit { + Character, Word, Sentence, Paragraph +} + +@RequiresApi(Build.VERSION_CODES.N) +class IcuUnitTextContentTokenizer( + locale: Locale, + private val unit: TextContentUnit, + private val contextLength: Int = 200, +) : TextContentTokenizer { + private val breakIterator: ContentIteratorTry by lazy { + when (unit) { + TextContentUnit.Character -> + Try.success(BreakIterator.getCharacterInstance(locale)) + TextContentUnit.Word -> + Try.success(BreakIterator.getWordInstance(locale)) + TextContentUnit.Sentence -> + Try.success(BreakIterator.getSentenceInstance(locale)) + TextContentUnit.Paragraph -> + Try.failure(ContentIteratorException.UnsupportedOption("IcuUnitTextContentTokenizer does not handle TextContentUnit.Paragraph")) + } + } + + override suspend fun tokenize(content: String): ContentIteratorTry> = + breakIterator.map { iter -> + iter.setText(content) + var start: Int = iter.first() + var end: Int = iter.next() + val tokens = mutableListOf() + while (end != BreakIterator.DONE) { + val before = content.substring((start - contextLength).coerceAtLeast(0), start) + var highlight = content.substring(start, end) + var after = + content.substring(end, (end + contextLength).coerceAtMost(content.length)) + + start = end + end = iter.next() + + if ( + unit != TextContentUnit.Character && + ( + highlight.isBlank() || + highlight.find { it.isLetterOrDigit() } == null + ) + ) { + continue + } + + if (unit == TextContentUnit.Sentence) { + val origHighlight = highlight + highlight = origHighlight.trimEnd() + val whitespaceSuffix = origHighlight.removePrefix(highlight) + after = whitespaceSuffix + after + } + + tokens.add( + Locator.Text( + highlight = highlight, + before = before, + after = after + ) + ) + } + + tokens + } +} diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuUnitTextContentTokenizerTest.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuUnitTextContentTokenizerTest.kt new file mode 100644 index 0000000000..88aa5aff7b --- /dev/null +++ b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuUnitTextContentTokenizerTest.kt @@ -0,0 +1,101 @@ +package org.readium.r2.shared.publication.services.iterator + +import kotlinx.coroutines.runBlocking +import org.junit.Test +import org.junit.runner.RunWith +import org.readium.r2.shared.publication.Locator +import org.robolectric.RobolectricTestRunner +import java.util.* +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals + +@RunWith(RobolectricTestRunner::class) +class IcuUnitTextContentTokenizerTest { + + @Test + fun tokenizeEmptyContent() = runBlocking { + val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Sentence, contextLength = 5) + assertEquals(emptyList(), tokenizer.tokenize("").getOrThrow()) + } + + @Test + fun tokenizeByCharacters() = runBlocking { + val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Character, contextLength = 2) + val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() + assertContentEquals( + listOf( + Locator.Text(before = "", highlight = "H", after = "e "), + Locator.Text(before = "H", highlight = "e", after = " s"), + Locator.Text(before = "He", highlight = " ", after = "sa"), + Locator.Text(before = "e ", highlight = "s", after = "ai"), + Locator.Text(before = " s", highlight = "a", after = "id"), + Locator.Text(before = "sa", highlight = "i", after = "d:"), + Locator.Text(before = "ai", highlight = "d", after = ": "), + Locator.Text(before = "id", highlight = ":", after = " \n"), + Locator.Text(before = "d:", highlight = " ", after = "\n\""), + Locator.Text(before = ": ", highlight = "\n", after = "\"W"), + Locator.Text(before = " \n", highlight = "\"", after = "Wh"), + Locator.Text(before = "\n\"", highlight = "W", after = "ha"), + Locator.Text(before = "\"W", highlight = "h", after = "at"), + Locator.Text(before = "Wh", highlight = "a", after = "t?"), + Locator.Text(before = "ha", highlight = "t", after = "?\""), + Locator.Text(before = "at", highlight = "?", after = "\""), + Locator.Text(before = "t?", highlight = "\"", after = ""), + ), + result + ) + } + + @Test + fun tokenizeByWords() = runBlocking { + val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Word, contextLength = 2) + val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() + assertContentEquals( + listOf( + Locator.Text(before = "", highlight = "He", after = " s"), + Locator.Text(before = "e ", highlight = "said", after = ": "), + Locator.Text(before = "\n\"", highlight = "What", after = "?\""), + ), + result + ) + } + + @Test + fun tokenizeBySentences() = runBlocking { + val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Sentence, contextLength = 5) + val result = tokenizer.tokenize(""" + Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble + In the end, she went ahead. + """.trimIndent()).getOrThrow() + assertContentEquals( + listOf( + Locator.Text( + before = "", + highlight = "Alice said, looking above: \"and what is the use of a book?\".", + after = " So sh" + ), + Locator.Text( + before = "k?\". ", + highlight = "So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble", + after = "\nIn th" + ), + Locator.Text( + before = "uble\n", + highlight = "In the end, she went ahead.", + after = "" + ) + ), + result + ) + } + + @Test + fun tokenizeByParagraphIsNotSupported() = runBlocking { + val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Paragraph, contextLength = 5) + val result = tokenizer.tokenize(""" + Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble + In the end, she went ahead. + """.trimIndent()) + assertEquals("IcuUnitTextContentTokenizer does not handle TextContentUnit.Paragraph", result.exceptionOrNull()?.message) + } +} From 0100ea03627d64f3b168ce07ab4a98eb50a05836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Fri, 4 Mar 2022 11:01:36 +0100 Subject: [PATCH 02/59] Add the `NaiveUnitTextContentTokenizer` --- .../services/iterator/TextContentIterator.kt | 103 +++++++++++++----- .../iterator/NaiveUnitTextContentTokenizer.kt | 95 ++++++++++++++++ 2 files changed, 170 insertions(+), 28 deletions(-) create mode 100644 readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt index 3939f99527..10a75f8a49 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt @@ -4,6 +4,8 @@ import android.icu.text.BreakIterator import android.os.Build import androidx.annotation.RequiresApi import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.services.search.StringSearchService.Algorithm +import org.readium.r2.shared.publication.services.search.StringSearchService.IcuAlgorithm import org.readium.r2.shared.util.Try import java.util.* @@ -24,6 +26,10 @@ enum class TextContentUnit { Character, Word, Sentence, Paragraph } +/** + * Implementation of a [TextContentTokenizer] using ICU components to perform the actual + * tokenization while taking into account languages specificities. + */ @RequiresApi(Build.VERSION_CODES.N) class IcuUnitTextContentTokenizer( locale: Locale, @@ -50,40 +56,81 @@ class IcuUnitTextContentTokenizer( var end: Int = iter.next() val tokens = mutableListOf() while (end != BreakIterator.DONE) { - val before = content.substring((start - contextLength).coerceAtLeast(0), start) - var highlight = content.substring(start, end) - var after = - content.substring(end, (end + contextLength).coerceAtMost(content.length)) + content.extractText(start = start, end = end, contextLength = contextLength, unit = unit) + ?.let { tokens.add(it) } start = end end = iter.next() + } + + tokens + } +} + +/** + * A naive [TextContentTokenizer] relying on java.text.BreakIterator to split the content. + * Use [IcuUnitTextContentTokenizer] for better results. + */ +class NaiveUnitTextContentTokenizer( + private val unit: TextContentUnit, + private val contextLength: Int = 200, +) : TextContentTokenizer { + private val breakIterator: ContentIteratorTry by lazy { + when (unit) { + TextContentUnit.Character -> + Try.success(java.text.BreakIterator.getCharacterInstance()) + TextContentUnit.Word -> + Try.success(java.text.BreakIterator.getWordInstance()) + TextContentUnit.Sentence -> + Try.success(java.text.BreakIterator.getSentenceInstance()) + TextContentUnit.Paragraph -> + Try.failure(ContentIteratorException.UnsupportedOption("NaiveUnitTextContentTokenizer does not handle TextContentUnit.Paragraph")) + } + } - if ( - unit != TextContentUnit.Character && - ( - highlight.isBlank() || - highlight.find { it.isLetterOrDigit() } == null - ) - ) { - continue - } - - if (unit == TextContentUnit.Sentence) { - val origHighlight = highlight - highlight = origHighlight.trimEnd() - val whitespaceSuffix = origHighlight.removePrefix(highlight) - after = whitespaceSuffix + after - } - - tokens.add( - Locator.Text( - highlight = highlight, - before = before, - after = after - ) - ) + override suspend fun tokenize(content: String): ContentIteratorTry> = + breakIterator.map { iter -> + iter.setText(content) + var start: Int = iter.first() + var end: Int = iter.next() + val tokens = mutableListOf() + while (end != java.text.BreakIterator.DONE) { + content.extractText(start = start, end = end, contextLength = contextLength, unit = unit) + ?.let { tokens.add(it) } + + start = end + end = iter.next() } tokens } } + +private fun String.extractText(start: Int, end: Int, contextLength: Int, unit: TextContentUnit): Locator.Text? { + val before = substring((start - contextLength).coerceAtLeast(0), start) + var highlight = substring(start, end) + var after = substring(end, (end + contextLength).coerceAtMost(length)) + + if ( + unit != TextContentUnit.Character && + ( + highlight.isBlank() || + highlight.find { it.isLetterOrDigit() } == null + ) + ) { + return null + } + + if (unit == TextContentUnit.Sentence) { + val origHighlight = highlight + highlight = origHighlight.trimEnd() + val whitespaceSuffix = origHighlight.removePrefix(highlight) + after = whitespaceSuffix + after + } + + return Locator.Text( + highlight = highlight, + before = before, + after = after + ) +} diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt new file mode 100644 index 0000000000..e965637986 --- /dev/null +++ b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt @@ -0,0 +1,95 @@ +package org.readium.r2.shared.publication.services.iterator + +import kotlinx.coroutines.runBlocking +import org.junit.Test +import org.junit.runner.RunWith +import org.readium.r2.shared.publication.Locator +import org.robolectric.RobolectricTestRunner +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals + +@RunWith(RobolectricTestRunner::class) +class NaiveUnitTextContentTokenizerTest { + + @Test + fun tokenizeEmptyContent() = runBlocking { + val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Sentence, contextLength = 5) + assertEquals(emptyList(), tokenizer.tokenize("").getOrThrow()) + } + + @Test + fun tokenizeByCharacters() = runBlocking { + val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Character, contextLength = 2) + val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() + assertContentEquals( + listOf( + Locator.Text(before = "", highlight = "H", after = "e "), + Locator.Text(before = "H", highlight = "e", after = " s"), + Locator.Text(before = "He", highlight = " ", after = "sa"), + Locator.Text(before = "e ", highlight = "s", after = "ai"), + Locator.Text(before = " s", highlight = "a", after = "id"), + Locator.Text(before = "sa", highlight = "i", after = "d:"), + Locator.Text(before = "ai", highlight = "d", after = ": "), + Locator.Text(before = "id", highlight = ":", after = " \n"), + Locator.Text(before = "d:", highlight = " ", after = "\n\""), + Locator.Text(before = ": ", highlight = "\n", after = "\"W"), + Locator.Text(before = " \n", highlight = "\"", after = "Wh"), + Locator.Text(before = "\n\"", highlight = "W", after = "ha"), + Locator.Text(before = "\"W", highlight = "h", after = "at"), + Locator.Text(before = "Wh", highlight = "a", after = "t?"), + Locator.Text(before = "ha", highlight = "t", after = "?\""), + Locator.Text(before = "at", highlight = "?", after = "\""), + Locator.Text(before = "t?", highlight = "\"", after = ""), + ), + result + ) + } + + @Test + fun tokenizeByWords() = runBlocking { + val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Word, contextLength = 2) + val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() + assertContentEquals( + listOf( + Locator.Text(before = "", highlight = "He", after = " s"), + Locator.Text(before = "e ", highlight = "said", after = ": "), + Locator.Text(before = "\n\"", highlight = "What", after = "?\""), + ), + result + ) + } + + @Test + fun tokenizeBySentences() = runBlocking { + val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Sentence, contextLength = 5) + val result = tokenizer.tokenize(""" + Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble + In the end, she went ahead. + """.trimIndent()).getOrThrow() + assertContentEquals( + listOf( + Locator.Text( + before = "", + highlight = "Alice said, looking above: \"and what is the use of a book?\".", + after = " So sh" + ), + Locator.Text( + before = "k?\". ", + highlight = "So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble\nIn the end, she went ahead.", + after = "" + ), + ), + result + ) + } + + @Test + fun tokenizeByParagraphIsNotSupported() = runBlocking { + val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Paragraph, contextLength = 5) + val result = tokenizer.tokenize(""" + Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble + In the end, she went ahead. + """.trimIndent()) + assertEquals("NaiveUnitTextContentTokenizer does not handle TextContentUnit.Paragraph", result.exceptionOrNull()?.message) + } +} From c1af1720ba8a754057464b99fdfc82af0eb4540b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 7 Mar 2022 12:48:30 +0100 Subject: [PATCH 03/59] Refactoring and implement the default `TextIteratorService` --- .../readium/r2/shared/publication/Metadata.kt | 8 + .../r2/shared/publication/Publication.kt | 3 + .../iterator/ContentIteratorService.kt | 47 ----- .../services/iterator/TextIteratorService.kt | 167 ++++++++++++++++++ .../{TextContentIterator.kt => Tokenizer.kt} | 88 +++++---- ...ntTokenizerTest.kt => IcuTokenizerTest.kt} | 12 +- .../iterator/NaiveUnitTextContentTokenizer.kt | 12 +- .../r2/streamer/parser/epub/EpubParser.kt | 2 + 8 files changed, 232 insertions(+), 107 deletions(-) delete mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/ContentIteratorService.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt rename readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/{TextContentIterator.kt => Tokenizer.kt} (53%) rename readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/{IcuUnitTextContentTokenizerTest.kt => IcuTokenizerTest.kt} (85%) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt index ae38d60a0a..75345c66c9 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt @@ -153,6 +153,14 @@ data class Metadata( val belongsToSeries: List get() = belongsTo["series"] ?: emptyList() + /** + * Returns the [Locale] resolved from the declared BCP 47 language. + */ + @IgnoredOnParcel + val locale: Locale? by lazy { + languages.firstOrNull()?.let { Locale.forLanguageTag(it) } + } + /** * Computes a [ReadingProgression] when the value of [readingProgression] is set to * auto, using the publication language. diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt index 8d7c12aabf..f31e8630e4 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt @@ -29,6 +29,7 @@ import org.readium.r2.shared.fetcher.Resource import org.readium.r2.shared.publication.epub.listOfAudioClips import org.readium.r2.shared.publication.epub.listOfVideoClips import org.readium.r2.shared.publication.services.* +import org.readium.r2.shared.publication.services.iterator.TextIteratorService import org.readium.r2.shared.publication.services.search.SearchService import org.readium.r2.shared.util.Ref import org.readium.r2.shared.util.mediatype.MediaType @@ -379,12 +380,14 @@ class Publication( locator: ServiceFactory? = { DefaultLocatorService(it.manifest.readingOrder, it.publication) }, positions: ServiceFactory? = null, search: ServiceFactory? = null, + textIterator: ServiceFactory? = null, ) : this(mapOf( ContentProtectionService::class.java.simpleName to contentProtection, CoverService::class.java.simpleName to cover, LocatorService::class.java.simpleName to locator, PositionsService::class.java.simpleName to positions, SearchService::class.java.simpleName to search, + TextIteratorService::class.java.simpleName to textIterator, ).filterValues { it != null }.toMutableMap() as MutableMap) /** Builds the actual list of publication services to use in a Publication. */ diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/ContentIteratorService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/ContentIteratorService.kt deleted file mode 100644 index 64bc281c8c..0000000000 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/ContentIteratorService.kt +++ /dev/null @@ -1,47 +0,0 @@ -package org.readium.r2.shared.publication.services.iterator - -import android.icu.text.BreakIterator -import android.os.Build -import androidx.annotation.RequiresApi -import org.readium.r2.shared.UserException -import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.util.SuspendingCloseable -import org.readium.r2.shared.util.Try - -typealias ContentIteratorTry = Try - -/** - * Represents an error which might occur while iterating through a publication's content. - */ -sealed class ContentIteratorException private constructor( - override val message: String, - cause: Throwable? = null -) : Exception(message, cause) { - class UnsupportedOption(message: String) : ContentIteratorException(message) -} - -interface Content - -interface ContentIteratorService : Publication.Service { - suspend fun iterator(startLocator: Locator?, options: O? = null): ContentIteratorTry> -} - -/** - * Iterates through a publication's content. - */ -interface ContentIterator : SuspendingCloseable { - - /** - * Retrieves the next piece of content. - * - * @return Null when reaching the end of the publication, or an error in case of failure. - */ - suspend fun next(): ContentIteratorTry - - /** - * Closes any resources allocated for the search query, such as a cursor. - * To be called when the user dismisses the search. - */ - override suspend fun close() {} -} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt new file mode 100644 index 0000000000..809f2924af --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt @@ -0,0 +1,167 @@ +package org.readium.r2.shared.publication.services.iterator + +import org.readium.r2.shared.Search +import org.readium.r2.shared.fetcher.DefaultResourceContentExtractorFactory +import org.readium.r2.shared.fetcher.Resource +import org.readium.r2.shared.fetcher.ResourceContentExtractor +import org.readium.r2.shared.publication.* +import org.readium.r2.shared.util.* +import java.util.* + +typealias TextIteratorTry = Try + +/** + * Represents an error which might occur while iterating through a publication's content. + */ +sealed class TextIteratorException private constructor( + override val message: String, + cause: Throwable? = null +) : Exception(message, cause) { + object PublicationNotIterable : TextIteratorException("The content of this publication cannot be iterated through") + class PublicationUnavailable(message: String) : TextIteratorException(message) + class UnsupportedOption(message: String) : TextIteratorException(message) + class UnsupportedResource(message: String, val link: Link) : TextIteratorException(message) + class ResourceError(message: String, val link: Link, cause: Resource.Exception) : TextIteratorException(message, cause) +} + +data class Text( + val text: String, + val locator: Locator +) + +enum class TextUnit { + Character, Word, Sentence, Paragraph +} + +interface TextIteratorService : Publication.Service { + suspend fun iterator(unit: TextUnit, start: Locator?, locale: Locale?): TextIteratorTry +} + +/** + * Iterates through a publication's content. + */ +interface TextIterator : SuspendingCloseable { + + /** + * Retrieves the next piece of content. + * + * @return Null when reaching the end of the publication, or an error in case of failure. + */ + suspend fun next(): TextIteratorTry + + /** + * Closes any resources allocated for the search query, such as a cursor. + * To be called when the user dismisses the search. + */ + override suspend fun close() {} +} + +suspend fun Publication.textIterator(unit: TextUnit, start: Locator? = null, locale: Locale? = null): TextIteratorTry = + findService(TextIteratorService::class)?.iterator(unit, start, locale) + ?: Try.failure(TextIteratorException.PublicationNotIterable) + +/** Factory to build a [TextIteratorService] */ +var Publication.ServicesBuilder.textIteratorServiceFactory: ServiceFactory? + get() = get(TextIteratorService::class) + set(value) = set(TextIteratorService::class, value) + +@OptIn(Search::class) +class DefaultTextIteratorService( + private val publication: Ref +) : TextIteratorService { + companion object { + fun createFactory(): (Publication.Service.Context) -> DefaultTextIteratorService = { context -> + DefaultTextIteratorService(publication = context.publication) + } + } + + override suspend fun iterator( + unit: TextUnit, + start: Locator?, + locale: Locale?, + ): TextIteratorTry { + val publication = publication.ref + ?: return Try.failure(TextIteratorException.PublicationUnavailable("The publication is null")) + + return Try.Success(DefaultTextIterator( + publication = publication, + start = start, + contentExtractorFactory = DefaultResourceContentExtractorFactory(), + tokenizer = unitTextContentTokenizer( + unit = unit, + locale = locale ?: publication.metadata.locale, + ), + )) + } +} + +@OptIn(Search::class) +internal class DefaultTextIterator( + private val publication: Publication, + start: Locator?, + private val contentExtractorFactory: ResourceContentExtractor.Factory, + private val tokenizer: Tokenizer, +) : TextIterator { + + private var nextIndex = + start?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } + ?: 0 + + private var tokens = mutableListOf() + + override suspend fun next(): TextIteratorTry { + tokens.removeFirstOrNull() + ?.let { return Try.success(it) } + + return tokenizeNextResource() + .flatMap { endReached -> + if (endReached) { + Try.success(null) + } else { + next() + } + } + } + + private suspend fun tokenizeNextResource(): TextIteratorTry { + if (nextIndex >= publication.readingOrder.count()) { + return Try.success(true) + } + + val link = publication.readingOrder[nextIndex] + + val locator = publication.locatorFromLink(link) + ?: return Try.failure(TextIteratorException.UnsupportedResource( + "Failed to create a Locator from this link", link + )) + + val text = publication.get(link).use { resource -> + val extractor = contentExtractorFactory.createExtractor(resource) + ?: return Try.failure(TextIteratorException.UnsupportedResource( + "Cannot extract the text out of this resource", link + )) + + extractor.extractText(resource) + .mapFailure { + TextIteratorException.ResourceError("Failed to extract the text out of this resource", link, it) + } + } + + return text + .flatMap { tokenizer.tokenize(it) } + .map { tokens -> + this.tokens = tokens + .map { tokenText -> + Text( + text = tokenText.highlight ?: "", + locator = locator.copy(text = tokenText, locations = Locator.Locations()) + ) + } + .toMutableList() + + nextIndex += 1 + false + } + } +} + diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt similarity index 53% rename from readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt rename to readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt index 10a75f8a49..638bd424c5 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt @@ -4,52 +4,44 @@ import android.icu.text.BreakIterator import android.os.Build import androidx.annotation.RequiresApi import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.services.search.StringSearchService.Algorithm -import org.readium.r2.shared.publication.services.search.StringSearchService.IcuAlgorithm import org.readium.r2.shared.util.Try import java.util.* -data class TextContentOptions( - val tokenizer: TextContentTokenizer, -) - -data class TextContent( - val text: String, - val locator: Locator -) : Content - -interface TextContentTokenizer { - suspend fun tokenize(content: String): ContentIteratorTry> +internal interface Tokenizer { + suspend fun tokenize(content: String): TextIteratorTry> } -enum class TextContentUnit { - Character, Word, Sentence, Paragraph -} +internal fun unitTextContentTokenizer(unit: TextUnit, locale: Locale?, contextLength: Int = 200): Tokenizer = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + IcuTokenizer(locale = locale, unit = unit, contextLength = contextLength) + else + NaiveTokenizer(unit = unit, contextLength = contextLength) /** - * Implementation of a [TextContentTokenizer] using ICU components to perform the actual + * Implementation of a [Tokenizer] using ICU components to perform the actual * tokenization while taking into account languages specificities. */ @RequiresApi(Build.VERSION_CODES.N) -class IcuUnitTextContentTokenizer( - locale: Locale, - private val unit: TextContentUnit, - private val contextLength: Int = 200, -) : TextContentTokenizer { - private val breakIterator: ContentIteratorTry by lazy { +internal class IcuTokenizer( + locale: Locale?, + private val unit: TextUnit, + private val contextLength: Int +) : Tokenizer { + private val breakIterator: TextIteratorTry by lazy { + val loc = locale ?: Locale.ROOT when (unit) { - TextContentUnit.Character -> - Try.success(BreakIterator.getCharacterInstance(locale)) - TextContentUnit.Word -> - Try.success(BreakIterator.getWordInstance(locale)) - TextContentUnit.Sentence -> - Try.success(BreakIterator.getSentenceInstance(locale)) - TextContentUnit.Paragraph -> - Try.failure(ContentIteratorException.UnsupportedOption("IcuUnitTextContentTokenizer does not handle TextContentUnit.Paragraph")) + TextUnit.Character -> + Try.success(BreakIterator.getCharacterInstance(loc)) + TextUnit.Word -> + Try.success(BreakIterator.getWordInstance(loc)) + TextUnit.Sentence -> + Try.success(BreakIterator.getSentenceInstance(loc)) + TextUnit.Paragraph -> + Try.failure(TextIteratorException.UnsupportedOption("IcuUnitTextContentTokenizer does not handle TextContentUnit.Paragraph")) } } - override suspend fun tokenize(content: String): ContentIteratorTry> = + override suspend fun tokenize(content: String): TextIteratorTry> = breakIterator.map { iter -> iter.setText(content) var start: Int = iter.first() @@ -68,27 +60,27 @@ class IcuUnitTextContentTokenizer( } /** - * A naive [TextContentTokenizer] relying on java.text.BreakIterator to split the content. - * Use [IcuUnitTextContentTokenizer] for better results. + * A naive [Tokenizer] relying on java.text.BreakIterator to split the content. + * Use [IcuTokenizer] for better results. */ -class NaiveUnitTextContentTokenizer( - private val unit: TextContentUnit, - private val contextLength: Int = 200, -) : TextContentTokenizer { - private val breakIterator: ContentIteratorTry by lazy { +internal class NaiveTokenizer( + private val unit: TextUnit, + private val contextLength: Int +) : Tokenizer { + private val breakIterator: TextIteratorTry by lazy { when (unit) { - TextContentUnit.Character -> + TextUnit.Character -> Try.success(java.text.BreakIterator.getCharacterInstance()) - TextContentUnit.Word -> + TextUnit.Word -> Try.success(java.text.BreakIterator.getWordInstance()) - TextContentUnit.Sentence -> + TextUnit.Sentence -> Try.success(java.text.BreakIterator.getSentenceInstance()) - TextContentUnit.Paragraph -> - Try.failure(ContentIteratorException.UnsupportedOption("NaiveUnitTextContentTokenizer does not handle TextContentUnit.Paragraph")) + TextUnit.Paragraph -> + Try.failure(TextIteratorException.UnsupportedOption("NaiveUnitTextContentTokenizer does not handle TextContentUnit.Paragraph")) } } - override suspend fun tokenize(content: String): ContentIteratorTry> = + override suspend fun tokenize(content: String): TextIteratorTry> = breakIterator.map { iter -> iter.setText(content) var start: Int = iter.first() @@ -106,13 +98,13 @@ class NaiveUnitTextContentTokenizer( } } -private fun String.extractText(start: Int, end: Int, contextLength: Int, unit: TextContentUnit): Locator.Text? { +private fun String.extractText(start: Int, end: Int, contextLength: Int, unit: TextUnit): Locator.Text? { val before = substring((start - contextLength).coerceAtLeast(0), start) var highlight = substring(start, end) var after = substring(end, (end + contextLength).coerceAtMost(length)) if ( - unit != TextContentUnit.Character && + unit != TextUnit.Character && ( highlight.isBlank() || highlight.find { it.isLetterOrDigit() } == null @@ -121,7 +113,7 @@ private fun String.extractText(start: Int, end: Int, contextLength: Int, unit: T return null } - if (unit == TextContentUnit.Sentence) { + if (unit == TextUnit.Sentence) { val origHighlight = highlight highlight = origHighlight.trimEnd() val whitespaceSuffix = origHighlight.removePrefix(highlight) diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuUnitTextContentTokenizerTest.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt similarity index 85% rename from readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuUnitTextContentTokenizerTest.kt rename to readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt index 88aa5aff7b..b215f87b45 100644 --- a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuUnitTextContentTokenizerTest.kt +++ b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt @@ -10,17 +10,17 @@ import kotlin.test.assertContentEquals import kotlin.test.assertEquals @RunWith(RobolectricTestRunner::class) -class IcuUnitTextContentTokenizerTest { +class IcuTokenizerTest { @Test fun tokenizeEmptyContent() = runBlocking { - val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Sentence, contextLength = 5) + val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Sentence, contextLength = 5) assertEquals(emptyList(), tokenizer.tokenize("").getOrThrow()) } @Test fun tokenizeByCharacters() = runBlocking { - val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Character, contextLength = 2) + val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Character, contextLength = 2) val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() assertContentEquals( listOf( @@ -48,7 +48,7 @@ class IcuUnitTextContentTokenizerTest { @Test fun tokenizeByWords() = runBlocking { - val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Word, contextLength = 2) + val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Word, contextLength = 2) val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() assertContentEquals( listOf( @@ -62,7 +62,7 @@ class IcuUnitTextContentTokenizerTest { @Test fun tokenizeBySentences() = runBlocking { - val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Sentence, contextLength = 5) + val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Sentence, contextLength = 5) val result = tokenizer.tokenize(""" Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble In the end, she went ahead. @@ -91,7 +91,7 @@ class IcuUnitTextContentTokenizerTest { @Test fun tokenizeByParagraphIsNotSupported() = runBlocking { - val tokenizer = IcuUnitTextContentTokenizer(locale = Locale.ENGLISH, unit = TextContentUnit.Paragraph, contextLength = 5) + val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Paragraph, contextLength = 5) val result = tokenizer.tokenize(""" Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble In the end, she went ahead. diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt index e965637986..8fbeb0fa0a 100644 --- a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt +++ b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt @@ -9,17 +9,17 @@ import kotlin.test.assertContentEquals import kotlin.test.assertEquals @RunWith(RobolectricTestRunner::class) -class NaiveUnitTextContentTokenizerTest { +class NaiveTokenizerTest { @Test fun tokenizeEmptyContent() = runBlocking { - val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Sentence, contextLength = 5) + val tokenizer = NaiveTokenizer(unit = TextUnit.Sentence, contextLength = 5) assertEquals(emptyList(), tokenizer.tokenize("").getOrThrow()) } @Test fun tokenizeByCharacters() = runBlocking { - val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Character, contextLength = 2) + val tokenizer = NaiveTokenizer(unit = TextUnit.Character, contextLength = 2) val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() assertContentEquals( listOf( @@ -47,7 +47,7 @@ class NaiveUnitTextContentTokenizerTest { @Test fun tokenizeByWords() = runBlocking { - val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Word, contextLength = 2) + val tokenizer = NaiveTokenizer(unit = TextUnit.Word, contextLength = 2) val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() assertContentEquals( listOf( @@ -61,7 +61,7 @@ class NaiveUnitTextContentTokenizerTest { @Test fun tokenizeBySentences() = runBlocking { - val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Sentence, contextLength = 5) + val tokenizer = NaiveTokenizer(unit = TextUnit.Sentence, contextLength = 5) val result = tokenizer.tokenize(""" Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble In the end, she went ahead. @@ -85,7 +85,7 @@ class NaiveUnitTextContentTokenizerTest { @Test fun tokenizeByParagraphIsNotSupported() = runBlocking { - val tokenizer = NaiveUnitTextContentTokenizer(unit = TextContentUnit.Paragraph, contextLength = 5) + val tokenizer = NaiveTokenizer(unit = TextUnit.Paragraph, contextLength = 5) val result = tokenizer.tokenize(""" Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble In the end, she went ahead. diff --git a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt index b16fcf0377..0a5ba3d2af 100644 --- a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt +++ b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt @@ -21,6 +21,7 @@ import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.asset.FileAsset import org.readium.r2.shared.publication.asset.PublicationAsset import org.readium.r2.shared.publication.encryption.Encryption +import org.readium.r2.shared.publication.services.iterator.DefaultTextIteratorService import org.readium.r2.shared.publication.services.search.StringSearchService import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.logging.WarningLogger @@ -120,6 +121,7 @@ class EpubParser( servicesBuilder = Publication.ServicesBuilder( positions = EpubPositionsService.createFactory(reflowablePositionsStrategy), search = StringSearchService.createDefaultFactory(), + textIterator = DefaultTextIteratorService.createFactory(), ) ) } From 3dfb35bcd795b11edbca1763842a583c2050283f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 7 Mar 2022 13:51:30 +0100 Subject: [PATCH 04/59] Don't refresh an already loaded resource when jumping to a locator --- .../r2/navigator/epub/EpubNavigatorFragment.kt | 14 +++++--------- .../r2/navigator/pager/R2EpubPageFragment.kt | 7 +++++++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index c66b4d634b..b8e830e810 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -31,7 +31,6 @@ import org.json.JSONObject import org.readium.r2.navigator.* import org.readium.r2.navigator.databinding.ActivityR2ViewpagerBinding import org.readium.r2.navigator.epub.EpubNavigatorViewModel.RunScriptCommand -import org.readium.r2.navigator.extensions.htmlId import org.readium.r2.navigator.extensions.optRectF import org.readium.r2.navigator.extensions.positionsByResource import org.readium.r2.navigator.extensions.withBaseUrl @@ -46,7 +45,10 @@ import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.SCROLL_REF import org.readium.r2.shared.extensions.addPrefix import org.readium.r2.shared.extensions.tryOrLog -import org.readium.r2.shared.publication.* +import org.readium.r2.shared.publication.Link +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.ReadingProgression import org.readium.r2.shared.publication.epub.EpubLayout import org.readium.r2.shared.publication.presentation.presentation import org.readium.r2.shared.publication.services.isRestricted @@ -293,16 +295,10 @@ class EpubNavigatorFragment private constructor( if (resourcePager.currentItem != index) { resourcePager.currentItem = index } else if (resource is PageResource.EpubReflowable) { - var url = resource.url - locator.locations.htmlId?.let { htmlId -> - url += htmlId.addPrefix("#") - } - currentFragment?.webView?.loadUrl(url) + currentFragment?.loadLocator(locator) } } - resourcePager.adapter = adapter - if (publication.metadata.presentation.layout == EpubLayout.REFLOWABLE) { pendingLocator = locator setCurrent(resourcesSingle) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt index a1f18355da..08901f4ac6 100755 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt @@ -295,6 +295,13 @@ class R2EpubPageFragment : Fragment() { } } + fun loadLocator(locator: Locator) = + viewLifecycleOwner.lifecycleScope.launchWhenCreated { + val webView = requireNotNull(webView) + val epubNavigator = requireNotNull(webView.navigator as? EpubNavigatorFragment) + loadLocator(webView, epubNavigator.readingProgression, locator) + } + private suspend fun loadLocator(webView: R2WebView, readingProgression: ReadingProgression, locator: Locator) { val text = locator.text if (text.highlight != null) { From 1f430dd92080a4efe0513d812dc36a82035bd306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 10 Mar 2022 17:01:55 +0100 Subject: [PATCH 05/59] Add the `TextToSpeechController` and more refactorings --- readium/navigator-tts/build.gradle.kts | 68 ++++++++ .../src/main/AndroidManifest.xml | 10 ++ .../navigator/tts/TextToSpeechController.kt | 147 ++++++++++++++++++ readium/shared/build.gradle.kts | 1 + .../readium/r2/shared/publication/Locator.kt | 11 +- .../services/iterator/TextIteratorService.kt | 8 +- .../services/iterator/Tokenizer.kt | 6 + .../services/iterator/IcuTokenizerTest.kt | 6 + .../iterator/NaiveUnitTextContentTokenizer.kt | 6 + settings.gradle.kts | 1 + test-app/build.gradle.kts | 1 + 11 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 readium/navigator-tts/build.gradle.kts create mode 100644 readium/navigator-tts/src/main/AndroidManifest.xml create mode 100644 readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt diff --git a/readium/navigator-tts/build.gradle.kts b/readium/navigator-tts/build.gradle.kts new file mode 100644 index 0000000000..3f4ae718ed --- /dev/null +++ b/readium/navigator-tts/build.gradle.kts @@ -0,0 +1,68 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +plugins { + id("com.android.library") + id("kotlin-android") + id("kotlin-parcelize") + id("maven-publish") + id("org.jetbrains.dokka") +} + +android { + resourcePrefix = "readium_" + + compileSdk = 31 + + defaultConfig { + minSdk = 21 + targetSdk = 31 + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs = freeCompilerArgs + "-Xopt-in=kotlin.RequiresOptIn" + } + buildTypes { + getByName("release") { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android.txt")) + } + } + buildFeatures { + viewBinding = true + } +} + +afterEvaluate { + publishing { + publications { + create("release") { + from(components.getByName("release")) + groupId = "com.github.readium" + artifactId = "readium-navigator-tts" + artifact(tasks.findByName("sourcesJar")) + artifact(tasks.findByName("javadocsJar")) + } + } + } +} + +dependencies { + implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) + + api(project(":readium:shared")) + api(project(":readium:navigator")) + + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0") + + implementation("com.jakewharton.timber:timber:5.0.1") +} diff --git a/readium/navigator-tts/src/main/AndroidManifest.xml b/readium/navigator-tts/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..267f6c9597 --- /dev/null +++ b/readium/navigator-tts/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt new file mode 100644 index 0000000000..614deea041 --- /dev/null +++ b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt @@ -0,0 +1,147 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.navigator.tts + +import android.app.Activity +import android.graphics.Color +import android.speech.tts.TextToSpeech +import android.speech.tts.UtteranceProgressListener +import kotlinx.coroutines.* +import org.readium.r2.navigator.DecorableNavigator +import org.readium.r2.navigator.Decoration +import org.readium.r2.navigator.ExperimentalDecorator +import org.readium.r2.navigator.Navigator +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.services.iterator.* +import org.readium.r2.shared.util.Try +import org.readium.r2.shared.util.flatMap +import org.readium.r2.shared.util.getOrElse +import timber.log.Timber + +typealias TextToSpeechTry = Try + +sealed class TextToSpeechException private constructor( + override val message: String, + cause: Throwable? = null +) : Exception(message, cause) { + class IteratorError(message: String, override val cause: TextIteratorException) : TextToSpeechException(message, cause) +} + +@OptIn(ExperimentalDecorator::class) +class TextToSpeechController( + val activity: Activity, + val publication: Publication, + val navigator: Navigator, + val listener: Listener, +) { + interface Listener { + fun onError(exception: TextToSpeechException) + } + + private val scope: CoroutineScope = MainScope() + + private var textIterator: TextIterator? = null + + private val ttsListener = TtsListener() + private val tts: TextToSpeech = TextToSpeech(activity, ttsListener).apply { + setOnUtteranceProgressListener(ttsListener) + } + + fun play(start: Locator? = null) = scope.launch { + initializeIterator(start) + playNextUtterance() + } + + private suspend fun initializeIterator(start: Locator? = null) { + // FIXME: locale + publication.textIterator(unit = TextUnit.Sentence, start = start) + .onSuccess { textIterator = it } + .onFailure { listener.onError(TextToSpeechException.IteratorError("Failed to create the text iterator", it)) } + } + + private var count = 0 + private var currentText: Text? = null + + private suspend fun playNextUtterance() { + while (!initialized) { + delay(100) + } + val iter = textIterator ?: return + + val text = iter.next().getOrElse { + listener.onError(TextToSpeechException.IteratorError("Failed to create the text iterator", it)) + return + } + if (text == null) { + textIterator = null + return + } + + currentText = text + navigator.go(text.locator) + (navigator as? DecorableNavigator)?.applyDecorations(listOf( + Decoration(id = "tts", locator = text.locator, style = Decoration.Style.Highlight(tint = Color.RED)) + ), group = "tts") + + tts.speak(text.text, TextToSpeech.QUEUE_FLUSH, null, count++.toString()) + } + + fun pause() { + + } + + fun skipForward() { + } + + fun skipBackward() { + + } + private var initialized = false + + private inner class TtsListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { + override fun onInit(status: Int) { + initialized = true +// val res = tts.isLanguageAvailable(Locale.forLanguageTag("fr-BLA")) +//// if (res == TextToSpeech.LANG_MISSING_DATA) { +// val installIntent = Intent() +// installIntent.action = TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA +// activity.startActivity(installIntent) +//// } else { +//// Timber.e("FRENCH INSTALLED") +//// } + } + + override fun onStart(utteranceId: String?) { + } + + override fun onDone(utteranceId: String?) { + scope.launch { playNextUtterance() } + } + + override fun onError(utteranceId: String?) { + } + + override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { + var locator = currentText?.locator ?: return + locator = locator.copy(text = locator.text.substring(start, end)) + navigator.go(locator) + +// scope.launch { +// (navigator as? DecorableNavigator)?.applyDecorations( +// listOf( +// Decoration( +// id = "tts", +// locator = locator, +// style = Decoration.Style.Underline(tint = Color.RED) +// ) +// ), group = "tts2" +// ) +// } + } + } +} diff --git a/readium/shared/build.gradle.kts b/readium/shared/build.gradle.kts index 5058c61d6d..6e970955a5 100644 --- a/readium/shared/build.gradle.kts +++ b/readium/shared/build.gradle.kts @@ -78,6 +78,7 @@ dependencies { testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.0") testImplementation("org.robolectric:robolectric:4.7.3") + androidTestImplementation("org.jetbrains.kotlin:kotlin-test-junit:1.6.10") androidTestImplementation("androidx.test.ext:junit:1.1.3") androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0") } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Locator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Locator.kt index 8493c7b220..5527165d26 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Locator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Locator.kt @@ -129,6 +129,15 @@ data class Locator( put("after", after) } + fun substring(start: Int, end: Int): Text { + highlight ?: return this + return copy( + before = (before ?: "") + highlight.substring(0, start), + highlight = highlight.substring(start, end), + after = highlight.substring(end) + (after ?: "") + ) + } + companion object { fun fromJSON(json: JSONObject?) = Text( @@ -136,9 +145,7 @@ data class Locator( highlight = json?.optNullableString("highlight"), after = json?.optNullableString("after") ) - } - } /** diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt index 809f2924af..6873244c5e 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt @@ -1,3 +1,9 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + package org.readium.r2.shared.publication.services.iterator import org.readium.r2.shared.Search @@ -21,7 +27,7 @@ sealed class TextIteratorException private constructor( class PublicationUnavailable(message: String) : TextIteratorException(message) class UnsupportedOption(message: String) : TextIteratorException(message) class UnsupportedResource(message: String, val link: Link) : TextIteratorException(message) - class ResourceError(message: String, val link: Link, cause: Resource.Exception) : TextIteratorException(message, cause) + class ResourceError(message: String, val link: Link, override val cause: Resource.Exception) : TextIteratorException(message, cause) } data class Text( diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt index 638bd424c5..cb7f73c647 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt @@ -1,3 +1,9 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + package org.readium.r2.shared.publication.services.iterator import android.icu.text.BreakIterator diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt index b215f87b45..d0d0ce9ea8 100644 --- a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt +++ b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt @@ -1,3 +1,9 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + package org.readium.r2.shared.publication.services.iterator import kotlinx.coroutines.runBlocking diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt index 8fbeb0fa0a..7758b4d6f3 100644 --- a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt +++ b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt @@ -1,3 +1,9 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + package org.readium.r2.shared.publication.services.iterator import kotlinx.coroutines.runBlocking diff --git a/settings.gradle.kts b/settings.gradle.kts index 79e5331c3a..51e3be34ee 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -36,6 +36,7 @@ include(":readium:shared") include(":readium:streamer") include(":readium:navigator") include(":readium:navigator-media2") +include(":readium:navigator-tts") include(":readium:opds") include(":readium:lcp") diff --git a/test-app/build.gradle.kts b/test-app/build.gradle.kts index a20d63be9c..2ae9439230 100644 --- a/test-app/build.gradle.kts +++ b/test-app/build.gradle.kts @@ -67,6 +67,7 @@ dependencies { implementation(project(":readium:streamer")) implementation(project(":readium:navigator")) implementation(project(":readium:navigator-media2")) + implementation(project(":readium:navigator-tts")) implementation(project(":readium:opds")) implementation(project(":readium:lcp")) From 3cf879787ae425d06ee51baddbee0645c78fa098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 16 Mar 2022 11:42:44 +0100 Subject: [PATCH 06/59] Add JS Dom utils --- .../src/main/assets/_scripts/src/dom.js | 73 +++++++++++++++++++ .../main/assets/_scripts/src/index-fixed.js | 2 + .../assets/_scripts/src/index-reflowable.js | 2 + .../src/main/assets/_scripts/src/index.js | 4 + .../src/main/assets/_scripts/src/utils.js | 2 +- .../assets/readium/scripts/readium-fixed.js | 2 +- .../readium/scripts/readium-reflowable.js | 2 +- 7 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 readium/navigator/src/main/assets/_scripts/src/dom.js diff --git a/readium/navigator/src/main/assets/_scripts/src/dom.js b/readium/navigator/src/main/assets/_scripts/src/dom.js new file mode 100644 index 0000000000..81dc6d7c8b --- /dev/null +++ b/readium/navigator/src/main/assets/_scripts/src/dom.js @@ -0,0 +1,73 @@ +// +// Copyright 2022 Readium Foundation. All rights reserved. +// Use of this source code is governed by the BSD-style license +// available in the top-level LICENSE file of the project. +// + +import { log as logNative, isScrollModeEnabled, pageWidth } from "./utils"; + +export function findFirstVisibleElement(rootElement) { + for (var i = 0; i < rootElement.children.length; i++) { + const child = rootElement.children[i]; + if (child.nodeType !== Node.ELEMENT_NODE) { + continue; + } + const visibleElement = findFirstVisibleElement(child); + if (visibleElement) { + return visibleElement; + } + } + + if ( + rootElement !== document.body && + rootElement !== document.documentElement + ) { + const visible = isElementVisible(rootElement, undefined); + if (visible) { + return rootElement; + } + } + return undefined; +} + +// See computeVisibility_() in r2-navigator-js +function isElementVisible(element, domRect /* nullable */) { + if (readium.isFixedLayout) { + return true; + } else if (!document || !document.documentElement || !document.body) { + return false; + } + if (element === document.body || element === document.documentElement) { + return true; + } + + const elStyle = getComputedStyle(element); + if (elStyle) { + const display = elStyle.getPropertyValue("display"); + if (display === "none") { + return false; + } + // Cannot be relied upon, because web browser engine reports invisible when out of view in + // scrolled columns! + // const visibility = elStyle.getPropertyValue("visibility"); + // if (visibility === "hidden") { + // return false; + // } + const opacity = elStyle.getPropertyValue("opacity"); + if (opacity === "0") { + return false; + } + } + + const rect = domRect || element.getBoundingClientRect(); + + const scrollElement = document.scrollingElement; + if (isScrollModeEnabled()) { + // TODO: vertical writing mode + return rect.top >= 0 && rect.top <= document.documentElement.clientHeight; + } + + const scrollLeft = rect.left; + let currentOffset = scrollElement.scrollLeft; + return rect.left > 0 && rect.left < pageWidth; +} diff --git a/readium/navigator/src/main/assets/_scripts/src/index-fixed.js b/readium/navigator/src/main/assets/_scripts/src/index-fixed.js index c868cee962..2f7b0d13b3 100644 --- a/readium/navigator/src/main/assets/_scripts/src/index-fixed.js +++ b/readium/navigator/src/main/assets/_scripts/src/index-fixed.js @@ -7,3 +7,5 @@ // Script used for fixed layouts resources. import "./index"; + +window.readium.isFixedLayout = true; diff --git a/readium/navigator/src/main/assets/_scripts/src/index-reflowable.js b/readium/navigator/src/main/assets/_scripts/src/index-reflowable.js index e67724cee5..b79d8c1c24 100644 --- a/readium/navigator/src/main/assets/_scripts/src/index-reflowable.js +++ b/readium/navigator/src/main/assets/_scripts/src/index-reflowable.js @@ -8,6 +8,8 @@ import "./index"; +window.readium.isReflowable = true; + document.addEventListener("DOMContentLoaded", function () { // Setups the `viewport` meta tag to disable zooming. let meta = document.createElement("meta"); diff --git a/readium/navigator/src/main/assets/_scripts/src/index.js b/readium/navigator/src/main/assets/_scripts/src/index.js index 77d902454d..881ee504d2 100644 --- a/readium/navigator/src/main/assets/_scripts/src/index.js +++ b/readium/navigator/src/main/assets/_scripts/src/index.js @@ -27,6 +27,7 @@ import { rectangleForHighlightWithID, setScrollMode, } from "./highlight"; +import { findFirstVisibleElement } from "./dom"; import { getCurrentSelection } from "./selection"; import { getDecorations, registerTemplates } from "./decorator"; @@ -49,6 +50,9 @@ window.readium = { // decoration registerDecorationTemplates: registerTemplates, getDecorations: getDecorations, + + // DOM + findFirstVisibleElement: findFirstVisibleElement, }; // Legacy highlights API. diff --git a/readium/navigator/src/main/assets/_scripts/src/utils.js b/readium/navigator/src/main/assets/_scripts/src/utils.js index 4c3d94ceb9..d6d6ff50f2 100644 --- a/readium/navigator/src/main/assets/_scripts/src/utils.js +++ b/readium/navigator/src/main/assets/_scripts/src/utils.js @@ -62,7 +62,7 @@ function appendVirtualColumnIfNeeded() { } } -var pageWidth = 1; +export var pageWidth = 1; function onViewportWidthChanged() { // We can't rely on window.innerWidth for the pageWidth on Android, because if the diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js index 1160173398..7db9d2c675 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},3466:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var anchor = new TextQuoteAnchor(document.body, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZXNpcy9hbmNob3JpbmcvbWF0Y2gtcXVvdGUuanM/ZGQ2YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlLmpzP2ZkZWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXMuanM/NDAwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3V0aWxzLmpzPzAyNWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9yZWN0LmpzPzRkNWEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kZWNvcmF0b3IuanM/MWIwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2dlc3R1cmVzLmpzPzE0YzIiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9oaWdobGlnaHQuanM/OGRhOCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LWZpeGVkLmpzP2Q5OWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcHJveFNlYXJjaCBmcm9tICdhcHByb3gtc3RyaW5nLW1hdGNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHByb3gtc3RyaW5nLW1hdGNoJykuTWF0Y2h9IFN0cmluZ01hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBNYXRjaFxuICogQHByb3Age251bWJlcn0gc3RhcnQgLSBTdGFydCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gZW5kIC0gRW5kIG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBzY29yZSAtXG4gKiAgIFNjb3JlIGZvciB0aGUgbWF0Y2ggYmV0d2VlbiAwIGFuZCAxLjAsIHdoZXJlIDEuMCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNoXG4gKiAgIGZvciB0aGUgcXVvdGUgYW5kIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoZXMgZm9yIGBzdHJgIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhFcnJvcnNcbiAqIEByZXR1cm4ge1N0cmluZ01hdGNoW119XG4gKi9cbmZ1bmN0aW9uIHNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycykge1xuICAvLyBEbyBhIGZhc3Qgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLiBUaGUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGxpYnJhcnlcbiAgLy8gZG9lc24ndCBjdXJyZW50bHkgaW5jb3Jwb3JhdGUgdGhpcyBvcHRpbWl6YXRpb24gaXRzZWxmLlxuICBsZXQgbWF0Y2hQb3MgPSAwO1xuICBsZXQgZXhhY3RNYXRjaGVzID0gW107XG4gIHdoaWxlIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICBtYXRjaFBvcyA9IHRleHQuaW5kZXhPZihzdHIsIG1hdGNoUG9zKTtcbiAgICBpZiAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgICBleGFjdE1hdGNoZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtYXRjaFBvcyxcbiAgICAgICAgZW5kOiBtYXRjaFBvcyArIHN0ci5sZW5ndGgsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgIH0pO1xuICAgICAgbWF0Y2hQb3MgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4YWN0TWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGV4YWN0TWF0Y2hlcztcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBubyBleGFjdCBtYXRjaGVzLCBkbyBhIG1vcmUgZXhwZW5zaXZlIHNlYXJjaCBmb3IgbWF0Y2hlc1xuICAvLyB3aXRoIGVycm9ycy5cbiAgcmV0dXJuIGFwcHJveFNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGB0ZXh0YCBhbmQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gdGV4dE1hdGNoU2NvcmUodGV4dCwgc3RyKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gYHNjb3JlTWF0Y2hgIHdpbGwgbmV2ZXIgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKi9cbiAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgc3RyLCBzdHIubGVuZ3RoKTtcblxuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgcmV0dXJuIDEgLSAobWF0Y2hlc1swXS5lcnJvcnMgLyBzdHIubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoIGZvciBgcXVvdGVgIGluIGB0ZXh0YC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBpZiBubyBtYXRjaCBleGNlZWRpbmcgdGhlIG1pbmltdW0gcXVhbGl0eSB0aHJlc2hvbGQgd2FzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRG9jdW1lbnQgdGV4dCB0byBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdW90ZSAtIFN0cmluZyB0byBmaW5kIHdpdGhpbiBgdGV4dGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IC1cbiAqICAgQ29udGV4dCBpbiB3aGljaCB0aGUgcXVvdGUgb3JpZ2luYWxseSBhcHBlYXJlZC4gVGhpcyBpcyB1c2VkIHRvIGNob29zZSB0aGVcbiAqICAgYmVzdCBtYXRjaC5cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF0gLSBFeHBlY3RlZCB0ZXh0IGJlZm9yZSB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF0gLSBFeHBlY3RlZCB0ZXh0IGFmdGVyIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge251bWJlcn0gW2NvbnRleHQuaGludF0gLSBFeHBlY3RlZCBvZmZzZXQgb2YgbWF0Y2ggd2l0aGluIHRleHRcbiAqIEByZXR1cm4ge01hdGNofG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1b3RlKHRleHQsIHF1b3RlLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKHF1b3RlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hvb3NlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gYWxsb3cgZm9yIHRoZSBpbml0aWFsIHNlYXJjaC5cbiAgLy8gVGhpcyBjaG9pY2UgaW52b2x2ZXMgYSB0cmFkZW9mZiBiZXR3ZWVuOlxuICAvL1xuICAvLyAgLSBSZWNhbGwgKHByb3BvcnRpb24gb2YgXCJnb29kXCIgbWF0Y2hlcyBmb3VuZClcbiAgLy8gIC0gUHJlY2lzaW9uIChwcm9wb3J0aW9uIG9mIG1hdGNoZXMgZm91bmQgd2hpY2ggYXJlIFwiZ29vZFwiKVxuICAvLyAgLSBDb3N0IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgb2YgcHJvY2Vzc2luZyB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgWzFdXG4gIC8vXG4gIC8vIFsxXSBTcGVjaWZpY2FsbHksIHRoZSBleHBlY3RlZC10aW1lIGNvbXBsZXhpdHkgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGlzXG4gIC8vICAgICBgTygobWF4RXJyb3JzIC8gMzIpICogdGV4dC5sZW5ndGgpYC4gU2VlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBkb2NzLlxuICBjb25zdCBtYXhFcnJvcnMgPSBNYXRoLm1pbigyNTYsIHF1b3RlLmxlbmd0aCAvIDIpO1xuXG4gIC8vIEZpbmQgY2xvc2VzdCBtYXRjaGVzIGZvciBgcXVvdGVgIGluIGB0ZXh0YCBiYXNlZCBvbiBlZGl0IGRpc3RhbmNlLlxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHF1b3RlLCBtYXhFcnJvcnMpO1xuXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgYSBtYXRjaCBjYW5kaWRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nTWF0Y2h9IG1hdGNoXG4gICAqL1xuICBjb25zdCBzY29yZU1hdGNoID0gbWF0Y2ggPT4ge1xuICAgIGNvbnN0IHF1b3RlV2VpZ2h0ID0gNTA7IC8vIFNpbWlsYXJpdHkgb2YgbWF0Y2hlZCB0ZXh0IHRvIHF1b3RlLlxuICAgIGNvbnN0IHByZWZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYmVmb3JlIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5wcmVmaXhgLlxuICAgIGNvbnN0IHN1ZmZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYWZ0ZXIgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnN1ZmZpeGAuXG4gICAgY29uc3QgcG9zV2VpZ2h0ID0gMjsgLy8gUHJveGltaXR5IHRvIGV4cGVjdGVkIGxvY2F0aW9uLiBVc2VkIGFzIGEgdGllLWJyZWFrZXIuXG5cbiAgICBjb25zdCBxdW90ZVNjb3JlID0gMSAtIG1hdGNoLmVycm9ycyAvIHF1b3RlLmxlbmd0aDtcblxuICAgIGNvbnN0IHByZWZpeFNjb3JlID0gY29udGV4dC5wcmVmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShNYXRoLm1heCgwLCBtYXRjaC5zdGFydCAtIGNvbnRleHQucHJlZml4Lmxlbmd0aCksIG1hdGNoLnN0YXJ0KSxcbiAgICAgICAgICBjb250ZXh0LnByZWZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcbiAgICBjb25zdCBzdWZmaXhTY29yZSA9IGNvbnRleHQuc3VmZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UobWF0Y2guZW5kLCBtYXRjaC5lbmQgKyBjb250ZXh0LnN1ZmZpeC5sZW5ndGgpLFxuICAgICAgICAgIGNvbnRleHQuc3VmZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuXG4gICAgbGV0IHBvc1Njb3JlID0gMS4wO1xuICAgIGlmICh0eXBlb2YgY29udGV4dC5oaW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMobWF0Y2guc3RhcnQgLSBjb250ZXh0LmhpbnQpO1xuICAgICAgcG9zU2NvcmUgPSAxLjAgLSBvZmZzZXQgLyB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTY29yZSA9XG4gICAgICBxdW90ZVdlaWdodCAqIHF1b3RlU2NvcmUgK1xuICAgICAgcHJlZml4V2VpZ2h0ICogcHJlZml4U2NvcmUgK1xuICAgICAgc3VmZml4V2VpZ2h0ICogc3VmZml4U2NvcmUgK1xuICAgICAgcG9zV2VpZ2h0ICogcG9zU2NvcmU7XG4gICAgY29uc3QgbWF4U2NvcmUgPSBxdW90ZVdlaWdodCArIHByZWZpeFdlaWdodCArIHN1ZmZpeFdlaWdodCArIHBvc1dlaWdodDtcbiAgICBjb25zdCBub3JtYWxpemVkU2NvcmUgPSByYXdTY29yZSAvIG1heFNjb3JlO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTY29yZTtcbiAgfTtcblxuICAvLyBSYW5rIG1hdGNoZXMgYmFzZWQgb24gc2ltaWxhcml0eSBvZiBhY3R1YWwgYW5kIGV4cGVjdGVkIHN1cnJvdW5kaW5nIHRleHRcbiAgLy8gYW5kIGFjdHVhbC9leHBlY3RlZCBvZmZzZXQgaW4gdGhlIGRvY3VtZW50IHRleHQuXG4gIGNvbnN0IHNjb3JlZE1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+ICh7XG4gICAgc3RhcnQ6IG0uc3RhcnQsXG4gICAgZW5kOiBtLmVuZCxcbiAgICBzY29yZTogc2NvcmVNYXRjaChtKSxcbiAgfSkpO1xuXG4gIC8vIENob29zZSBtYXRjaCB3aXRoIGhpZ2hlc3Qgc2NvcmUuXG4gIHNjb3JlZE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICByZXR1cm4gc2NvcmVkTWF0Y2hlc1swXTtcbn1cbiIsIi8qKlxuICogUmV0dXJuIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGV4dCBub2RlcyBjb250YWluZWQgaW4gYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBub2RlVGV4dExlbmd0aChub2RlKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIC8vIG5iLiBgdGV4dENvbnRlbnRgIGV4Y2x1ZGVzIHRleHQgaW4gY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAvLyB3aGVuIGNhbGxlZCBvbiBhIHBhcmVudCBlbGVtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0IHRoYXQgaGVyZS5cblxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobm9kZS50ZXh0Q29udGVudCkubGVuZ3RoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IG9mIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIHdoaWxlIChzaWJsaW5nKSB7XG4gICAgbGVuZ3RoICs9IG5vZGVUZXh0TGVuZ3RoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIG9yIG1vcmUgY2hhcmFjdGVyIG9mZnNldHMgd2l0aGluIGFuIGVsZW1lbnQgdG8gKHRleHQgbm9kZSwgcG9zaXRpb24pXG4gKiBwYWlycy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyW119IG9mZnNldHMgLSBPZmZzZXRzLCB3aGljaCBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfVtdfVxuICovXG5mdW5jdGlvbiByZXNvbHZlT2Zmc2V0cyhlbGVtZW50LCAuLi5vZmZzZXRzKSB7XG4gIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICBjb25zdCBub2RlSXRlciA9IC8qKiBAdHlwZSB7RG9jdW1lbnR9ICovIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgKS5jcmVhdGVOb2RlSXRlcmF0b3IoZWxlbWVudCwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgbGV0IHRleHROb2RlO1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICAvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgYG5leHRPZmZzZXRgdGggY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0XG4gIC8vIG9mIGBlbGVtZW50YC5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Tm9kZSkge1xuICAgIHRleHROb2RlID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAoY3VycmVudE5vZGUpO1xuICAgIGlmIChsZW5ndGggKyB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IG5leHRPZmZzZXQpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IG5leHRPZmZzZXQgLSBsZW5ndGggfSk7XG4gICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gICAgICBsZW5ndGggKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLy8gQm91bmRhcnkgY2FzZS5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0Tm9kZSAmJiBsZW5ndGggPT09IG5leHRPZmZzZXQpIHtcbiAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCB9KTtcbiAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICB9XG5cbiAgaWYgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgZXhjZWVkcyB0ZXh0IGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBsZXQgUkVTT0xWRV9GT1JXQVJEUyA9IDE7XG5leHBvcnQgbGV0IFJFU09MVkVfQkFDS1dBUkRTID0gMjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9mZnNldCB3aXRoaW4gdGhlIHRleHQgY29udGVudCBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoaXMgcG9zaXRpb24gY2FuIGJlIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZGVzY2VuZGFudCBub2RlIGluIHRoZSBjdXJyZW50XG4gKiBET00gc3VidHJlZSBvZiB0aGUgZWxlbWVudCB1c2luZyB0aGUgYHJlc29sdmVgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgdGV4dCBwb3NpdGlvbiBgb2Zmc2V0YCB3aXRoaW5cbiAgICogdGhlIHRleHQgY29udGVudCBvZiBgZWxlbWVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPZmZzZXQgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8qKiBFbGVtZW50IHRoYXQgYG9mZnNldGAgaXMgcmVsYXRpdmUgdG8uICovXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIC8qKiBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50J3MgYHRleHRDb250ZW50YC4gKi9cbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcG9zaXRpb24gd2l0aCBvZmZzZXQgcmVsYXRpdmUgdG8gYSBnaXZlbiBhbmNlc3RvclxuICAgKiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudCAtIEFuY2VzdG9yIG9mIGB0aGlzLmVsZW1lbnRgXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHJlbGF0aXZlVG8ocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuY29udGFpbnModGhpcy5lbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGN1cnJlbnQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgd2hpbGUgKGVsICE9PSBwYXJlbnQpIHtcbiAgICAgIG9mZnNldCArPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChlbCk7XG4gICAgICBlbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHBvc2l0aW9uIHRvIGEgc3BlY2lmaWMgdGV4dCBub2RlIGFuZCBvZmZzZXQgd2l0aGluIHRoYXQgbm9kZS5cbiAgICpcbiAgICogVGhyb3dzIGlmIGB0aGlzLm9mZnNldGAgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSW4gdGhlXG4gICAqIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaGFzIG5vIHRleHQgYW5kIGB0aGlzLm9mZnNldGAgaXMgMCwgdGhlIGBkaXJlY3Rpb25gXG4gICAqIG9wdGlvbiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucy5cbiAgICpcbiAgICogT2Zmc2V0cyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbm9kZXMgYXJlIHJlc29sdmVkIHRvIHRoZSBzdGFydCBvZiB0aGVcbiAgICogbm9kZSB0aGF0IGJlZ2lucyBhdCB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICBAcGFyYW0ge1JFU09MVkVfRk9SV0FSRFN8UkVTT0xWRV9CQUNLV0FSRFN9IFtvcHRpb25zLmRpcmVjdGlvbl0gLVxuICAgKiAgICAgU3BlY2lmaWVzIGluIHdoaWNoIGRpcmVjdGlvbiB0byBzZWFyY2ggZm9yIHRoZSBuZWFyZXN0IHRleHQgbm9kZSBpZlxuICAgKiAgICAgYHRoaXMub2Zmc2V0YCBpcyBgMGAgYW5kIGB0aGlzLmVsZW1lbnRgIGhhcyBubyB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkXG4gICAqICAgICBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfX1cbiAgICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAgICovXG4gIHJlc29sdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXNvbHZlT2Zmc2V0cyh0aGlzLmVsZW1lbnQsIHRoaXMub2Zmc2V0KVswXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMCAmJiBvcHRpb25zLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHR3ID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Um9vdE5vZGUoKSxcbiAgICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVFxuICAgICAgICApO1xuICAgICAgICB0dy5jdXJyZW50Tm9kZSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9yd2FyZHMgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUkVTT0xWRV9GT1JXQVJEUztcbiAgICAgICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7VGV4dHxudWxsfSAqLyAoXG4gICAgICAgICAgZm9yd2FyZHMgPyB0dy5uZXh0Tm9kZSgpIDogdHcucHJldmlvdXNOb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRleHQsIG9mZnNldDogZm9yd2FyZHMgPyAwIDogdGV4dC5kYXRhLmxlbmd0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgYG9mZnNldGB0aCBjaGFyYWN0ZXIgd2l0aGluXG4gICAqIGBub2RlYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21DaGFyT2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbi5mcm9tUG9pbnQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCBvZmZzZXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGlzIG5vdCBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIHN0YXJ0IG9yIGVuZCBwb2ludCAobm9kZSwgb2Zmc2V0KS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGV4dCBvciBFbGVtZW50IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIE9mZnNldCB3aXRoaW4gdGhlIG5vZGUuXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tUG9pbnQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IC8qKiBAdHlwZSB7VGV4dH0gKi8gKG5vZGUpLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBoYXMgbm8gcGFyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSArIG9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihub2RlLnBhcmVudEVsZW1lbnQsIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggYmVmb3JlIHRoZSBgb2Zmc2V0YHRoIGNoaWxkIG9mIGVsZW1lbnQuXG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgICAgIHRleHRPZmZzZXQgKz0gbm9kZVRleHRMZW5ndGgobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IGluIGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZ2lvbiBvZiBhIGRvY3VtZW50IGFzIGEgKHN0YXJ0LCBlbmQpIHBhaXIgb2YgYFRleHRQb3NpdGlvbmAgcG9pbnRzLlxuICpcbiAqIFJlcHJlc2VudGluZyBhIHJhbmdlIGluIHRoaXMgd2F5IGFsbG93cyBmb3IgY2hhbmdlcyBpbiB0aGUgRE9NIGNvbnRlbnQgb2YgdGhlXG4gKiByYW5nZSB3aGljaCBkb24ndCBhZmZlY3QgaXRzIHRleHQgY29udGVudCwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHRleHQgY29udGVudFxuICogb2YgdGhlIHJhbmdlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRSYW5nZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW1tdXRhYmxlIGBUZXh0UmFuZ2VgIGZyb20gYSBgc3RhcnRgIGFuZCBgZW5kYCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IHN0YXJ0XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gYVxuICAgKiBnaXZlbiBhbmNlc3Rvci4gU2VlIGBUZXh0UG9zaXRpb24ucmVsYXRpdmVUb2AuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgcmVsYXRpdmVUbyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlVG8oZWxlbWVudCksXG4gICAgICB0aGlzLmVuZC5yZWxhdGl2ZVRvKGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgVGV4dFJhbmdlYCB0byBhIERPTSByYW5nZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBET00gUmFuZ2Ugd2lsbCBhbHdheXMgc3RhcnQgYW5kIGVuZCBpbiBhIGBUZXh0YCBub2RlLlxuICAgKiBIZW5jZSBgVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkudG9SYW5nZSgpYCBjYW4gYmUgdXNlZCB0byBcInNocmlua1wiIGFcbiAgICogcmFuZ2UgdG8gdGhlIHRleHQgaXQgY29udGFpbnMuXG4gICAqXG4gICAqIE1heSB0aHJvdyBpZiB0aGUgYHN0YXJ0YCBvciBgZW5kYCBwb3NpdGlvbnMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cbiAgdG9SYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCA9PT0gdGhpcy5lbmQuZWxlbWVudCAmJlxuICAgICAgdGhpcy5zdGFydC5vZmZzZXQgPD0gdGhpcy5lbmQub2Zmc2V0XG4gICAgKSB7XG4gICAgICAvLyBGYXN0IHBhdGggZm9yIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGluIHNhbWUgZWxlbWVudC5cbiAgICAgIFtzdGFydCwgZW5kXSA9IHJlc29sdmVPZmZzZXRzKFxuICAgICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQsXG4gICAgICAgIHRoaXMuc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmVuZC5vZmZzZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5zdGFydC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0ZPUldBUkRTIH0pO1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9CQUNLV0FSRFMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gZXhpc3RpbmcgRE9NIGBSYW5nZWAgdG8gYSBgVGV4dFJhbmdlYFxuICAgKlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKiBAcmV0dXJuIHtUZXh0UmFuZ2V9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KFxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICByYW5nZS5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgYFRleHRSYW5nZWAgZnJvbSB0aGUgYHN0YXJ0YHRoIHRvIGBlbmRgdGggY2hhcmFjdGVycyBpbiBgcm9vdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgc3RhdGljIGZyb21PZmZzZXRzKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgc3RhcnQpLFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBlbmQpXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGNsYXNzZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBET00gYFJhbmdlYFxuICogb2JqZWN0cyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlbGVjdG9ycy4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhXG4gKiBzZXQgb2YgYW5jaG9yaW5nIGxpYnJhcmllcy4gSXQgc2VydmVzIHR3byBtYWluIHB1cnBvc2VzOlxuICpcbiAqICAxLiBQcm92aWRpbmcgYSBjb25zaXN0ZW50IGludGVyZmFjZSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFuY2hvcnMuXG4gKiAgMi4gSW5zdWxhdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIEFQSSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGFuY2hvcmluZ1xuICogICAgIGxpYnJhcmllcy5cbiAqL1xuXG5pbXBvcnQgeyBtYXRjaFF1b3RlIH0gZnJvbSAnLi9tYXRjaC1xdW90ZSc7XG5pbXBvcnQgeyBUZXh0UmFuZ2UsIFRleHRQb3NpdGlvbiB9IGZyb20gJy4vdGV4dC1yYW5nZSc7XG5pbXBvcnQgeyBub2RlRnJvbVhQYXRoLCB4cGF0aEZyb21Ob2RlIH0gZnJvbSAnLi94cGF0aCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuUmFuZ2VTZWxlY3Rvcn0gUmFuZ2VTZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFBvc2l0aW9uU2VsZWN0b3J9IFRleHRQb3NpdGlvblNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UXVvdGVTZWxlY3Rvcn0gVGV4dFF1b3RlU2VsZWN0b3JcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUmFuZ2VBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgcmFuZ2UpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhbmNob3IgZnJvbSBhIHNlcmlhbGl6ZWQgYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2VTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3Iuc3RhcnRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghc3RhcnRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgc3RhcnRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLmVuZENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFlbmRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZW5kQ29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5lbmRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpLnRvUmFuZ2UoKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7UmFuZ2VTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgLy8gXCJTaHJpbmtcIiB0aGUgcmFuZ2Ugc28gdGhhdCBpdCB0aWdodGx5IHdyYXBzIGl0cyB0ZXh0LiBUaGlzIGVuc3VyZXMgbW9yZVxuICAgIC8vIHByZWRpY3RhYmxlIG91dHB1dCBmb3IgYSBnaXZlbiB0ZXh0IHNlbGVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkUmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHRoaXMucmFuZ2UpLnRvUmFuZ2UoKTtcblxuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2Uobm9ybWFsaXplZFJhbmdlKTtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLnN0YXJ0LmVsZW1lbnQsIHRoaXMucm9vdCk7XG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2UuZW5kLmVsZW1lbnQsIHRoaXMucm9vdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JhbmdlU2VsZWN0b3InLFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzdGFydE9mZnNldDogdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIGVuZE9mZnNldDogdGV4dFJhbmdlLmVuZC5vZmZzZXQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRQb3NpdGlvblNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbkFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKFxuICAgICAgcm9vdCxcbiAgICAgIHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICB0ZXh0UmFuZ2UuZW5kLm9mZnNldFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvblNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHJvb3QsIHNlbGVjdG9yLnN0YXJ0LCBzZWxlY3Rvci5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvblNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRQb3NpdGlvblNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICB9O1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gVGV4dFJhbmdlLmZyb21PZmZzZXRzKHRoaXMucm9vdCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLnRvUmFuZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFF1b3RlTWF0Y2hPcHRpb25zXG4gKiBAcHJvcCB7bnVtYmVyfSBbaGludF0gLSBFeHBlY3RlZCBwb3NpdGlvbiBvZiBtYXRjaCBpbiB0ZXh0LiBTZWUgYG1hdGNoUXVvdGVgLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFF1b3RlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFF1b3RlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhhY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XVxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBleGFjdCwgY29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmV4YWN0ID0gZXhhY3Q7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgVGV4dFF1b3RlQW5jaG9yYCBmcm9tIGEgcmFuZ2UuXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgYHJhbmdlYCBkb2VzIG5vdCBjb250YWluIGFueSB0ZXh0IG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICAgIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBxdW90ZSB0byBjYXB0dXJlIGFzIGNvbnRleHQuIFdlIGN1cnJlbnRseVxuICAgIC8vIGFsd2F5cyB1c2UgYSBmaXhlZCBhbW91bnQsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhpcyBjb2RlIHdhcyBhd2FyZVxuICAgIC8vIG9mIGxvZ2ljYWwgYm91bmRhcmllcyBpbiB0aGUgZG9jdW1lbnQgKHBhcmFncmFwaCwgYXJ0aWNsZSBldGMuKSB0byBhdm9pZFxuICAgIC8vIGNhcHR1cmluZyB0ZXh0IHVucmVsYXRlZCB0byB0aGUgcXVvdGUuXG4gICAgLy9cbiAgICAvLyBJbiByZWd1bGFyIHByb3NlIHRoZSBpZGVhbCBjb250ZW50IHdvdWxkIG9mdGVuIGJlIHRoZSBzdXJyb3VuZGluZyBzZW50ZW5jZS5cbiAgICAvLyBUaGlzIGlzIGEgbmF0dXJhbCB1bml0IG9mIG1lYW5pbmcgd2hpY2ggZW5hYmxlcyBkaXNwbGF5aW5nIHF1b3RlcyBpblxuICAgIC8vIGNvbnRleHQgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBpcyBub3QgYXZhaWxhYmxlLiBXZSBjb3VsZCB1c2UgYEludGwuU2VnbWVudGVyYFxuICAgIC8vIGZvciB0aGlzIHdoZW4gYXZhaWxhYmxlLlxuICAgIGNvbnN0IGNvbnRleHRMZW4gPSAzMjtcblxuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCksIHtcbiAgICAgIHByZWZpeDogdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIGNvbnRleHRMZW4pLCBzdGFydCksXG4gICAgICBzdWZmaXg6IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgY29udGV4dExlbikpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRRdW90ZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHsgcHJlZml4LCBzdWZmaXggfSA9IHNlbGVjdG9yO1xuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHNlbGVjdG9yLmV4YWN0LCB7IHByZWZpeCwgc3VmZml4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRRdW90ZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRRdW90ZVNlbGVjdG9yJyxcbiAgICAgIGV4YWN0OiB0aGlzLmV4YWN0LFxuICAgICAgcHJlZml4OiB0aGlzLmNvbnRleHQucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLmNvbnRleHQuc3VmZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1JhbmdlKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnRvUG9zaXRpb25BbmNob3Iob3B0aW9ucykudG9SYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hRdW90ZSh0ZXh0LCB0aGlzLmV4YWN0LCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICBoaW50OiBvcHRpb25zLmhpbnQsXG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdW90ZSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IodGhpcy5yb290LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgVGV4dFF1b3RlQW5jaG9yIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzXCI7XG5cbi8vIENhdGNoIEpTIGVycm9ycyB0byBsb2cgdGhlbSBpbiB0aGUgYXBwLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwiZXJyb3JcIixcbiAgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgQW5kcm9pZC5sb2dFcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5maWxlbmFtZSwgZXZlbnQubGluZW5vKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8vIE5vdGlmeSBuYXRpdmUgY29kZSB0aGF0IHRoZSBwYWdlIGhhcyBsb2FkZWQuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gICAgICBzbmFwQ3VycmVudE9mZnNldCgpO1xuICAgIH0pO1xuICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8qKlxuICogSGF2aW5nIGFuIG9kZCBudW1iZXIgb2YgY29sdW1ucyB3aGVuIGRpc3BsYXlpbmcgdHdvIGNvbHVtbnMgcGVyIHNjcmVlbiBjYXVzZXMgc25hcHBpbmcgYW5kIHBhZ2VcbiAqIHR1cm5pbmcgaXNzdWVzLiBUbyBmaXggdGhpcywgd2UgaW5zZXJ0IGEgYmxhbmsgdmlydHVhbCBjb2x1bW4gYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpIHtcbiAgY29uc3QgaWQgPSBcInJlYWRpdW0tdmlydHVhbC1wYWdlXCI7XG4gIHZhciB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHx8IGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkgIT0gMikge1xuICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGNvbENvdW50ID0gZG9jdW1lbnRXaWR0aCAvIHBhZ2VXaWR0aDtcbiAgICB2YXIgaGFzT2RkQ29sQ291bnQgPSAoTWF0aC5yb3VuZChjb2xDb3VudCAqIDIpIC8gMikgJSAxID4gMC4xO1xuICAgIGlmIChoYXNPZGRDb2xDb3VudCkge1xuICAgICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2aXJ0dWFsQ29sLnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgICAgdmlydHVhbENvbC5zdHlsZS5icmVha0JlZm9yZSA9IFwiY29sdW1uXCI7XG4gICAgICAgIHZpcnR1YWxDb2wuaW5uZXJIVE1MID0gXCImIzgyMDM7XCI7IC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aXJ0dWFsQ29sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgc2Nyb2xsVG9SZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SZWN0KHJlY3QpIHtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvU3RhcnQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvU3RhcnRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0VuZCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9FbmRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGggKiBmYWN0b3JcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIGxlZnQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbExlZnQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYIC0gcGFnZVdpZHRoO1xuICB2YXIgbWluT2Zmc2V0ID0gaXNSVEwoKSA/IC0oZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aCkgOiAwO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5tYXgob2Zmc2V0LCBtaW5PZmZzZXQpKTtcbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSByaWdodC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUmlnaHQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYICsgcGFnZVdpZHRoO1xuICB2YXIgbWF4T2Zmc2V0ID0gaXNSVEwoKSA/IDAgOiBkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5taW4ob2Zmc2V0LCBtYXhPZmZzZXQpKTtcbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZ2l2ZW4gbGVmdCBvZmZzZXQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGNsb3NlIGVub3VnaCB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuZnVuY3Rpb24gc2Nyb2xsVG9PZmZzZXQob2Zmc2V0KSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvT2Zmc2V0IFwiICsgb2Zmc2V0KTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IFwiQ2FsbGVkIHNjcm9sbFRvT2Zmc2V0KCkgd2l0aCBzY3JvbGwgbW9kZSBlbmFibGVkLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gcGFnaW5hdGVkIG1vZGUuXCI7XG4gIH1cblxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIC8vIEluIHNvbWUgY2FzZSB0aGUgc2Nyb2xsWCBjYW5ub3QgcmVhY2ggdGhlIHBvc2l0aW9uIHJlc3BlY3RpbmcgdG8gaW5uZXJXaWR0aFxuICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpIC8gcGFnZVdpZHRoO1xuICByZXR1cm4gZGlmZiA+IDAuMDE7XG59XG5cbi8vIFNuYXAgdGhlIG9mZnNldCB0byB0aGUgc2NyZWVuIHdpZHRoIChwYWdlIHdpZHRoKS5cbmZ1bmN0aW9uIHNuYXBPZmZzZXQob2Zmc2V0KSB7XG4gIHZhciB2YWx1ZSA9IG9mZnNldCArIChpc1JUTCgpID8gLTEgOiAxKTtcbiAgcmV0dXJuIHZhbHVlIC0gKHZhbHVlICUgcGFnZVdpZHRoKTtcbn1cblxuLy8gU25hcHMgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRoZSBwYWdlIHdpZHRoLlxuZnVuY3Rpb24gc25hcEN1cnJlbnRPZmZzZXQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNuYXBDdXJyZW50T2Zmc2V0XCIpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIC8vIEFkZHMgaGFsZiBhIHBhZ2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNuYXAgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICB2YXIgZGVsdGEgPSBmYWN0b3IgKiAocGFnZVdpZHRoIC8gMik7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoY3VycmVudE9mZnNldCArIGRlbHRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlRnJvbUxvY2F0b3IobG9jYXRvcikge1xuICBsZXQgdGV4dCA9IGxvY2F0b3IudGV4dDtcbiAgaWYgKCF0ZXh0IHx8ICF0ZXh0LmhpZ2hsaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3IoZG9jdW1lbnQuYm9keSwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBsb2dFcnJvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyB0b05hdGl2ZVJlY3QgfSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBUZXh0UmFuZ2UgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZVwiO1xuXG4vLyBQb2x5ZmlsbCBmb3IgQW5kcm9pZCBBUEkgMjZcbmltcG9ydCBtYXRjaEFsbCBmcm9tIFwic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbFwiO1xubWF0Y2hBbGwuc2hpbSgpO1xuXG5jb25zdCBkZWJ1ZyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICBjb25zdCB0ZXh0ID0gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldFNlbGVjdGlvblJlY3QoKTtcbiAgcmV0dXJuIHsgdGV4dCwgcmVjdCB9O1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIGxldCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICByZXR1cm4gdG9OYXRpdmVSZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBoaWdobGlnaHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5IaWdobGlnaHQgPSBoaWdobGlnaHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhbkhpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7XG4gIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8oZG9jdW1lbnQuYm9keSk7XG4gIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgY29uc3Qgc25pcHBldExlbmd0aCA9IDIwMDtcblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGJlZm9yZSB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgZmlyc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGJlZm9yZSA9IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBzbmlwcGV0TGVuZ3RoKSwgc3RhcnQpO1xuICBsZXQgZmlyc3RXb3JkU3RhcnQgPSBiZWZvcmUuc2VhcmNoKC9cXFB7TH1cXHB7TH0vZ3UpO1xuICBpZiAoZmlyc3RXb3JkU3RhcnQgIT09IC0xKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlLnNsaWNlKGZpcnN0V29yZFN0YXJ0ICsgMSk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGFmdGVyIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBsYXN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBhZnRlciA9IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgc25pcHBldExlbmd0aCkpO1xuICBsZXQgbGFzdFdvcmRFbmQgPSBBcnJheS5mcm9tKGFmdGVyLm1hdGNoQWxsKC9cXHB7TH1cXFB7TH0vZ3UpKS5wb3AoKTtcbiAgaWYgKGxhc3RXb3JkRW5kICE9PSB1bmRlZmluZWQgJiYgbGFzdFdvcmRFbmQuaW5kZXggPiAxKSB7XG4gICAgYWZ0ZXIgPSBhZnRlci5zbGljZSgwLCBsYXN0V29yZEVuZC5pbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGlnaGxpZ2h0LCBiZWZvcmUsIGFmdGVyIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBCYXNlIHNjcmlwdCB1c2VkIGJ5IGJvdGggcmVmbG93YWJsZSBhbmQgZml4ZWQgbGF5b3V0IHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9nZXN0dXJlc1wiO1xuaW1wb3J0IHtcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb0VuZCxcbiAgc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9UZXh0LFxuICBzZXRQcm9wZXJ0eSxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUFubm90YXRpb24sXG4gIGNyZWF0ZUhpZ2hsaWdodCxcbiAgZGVzdHJveUhpZ2hsaWdodCxcbiAgZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8sXG4gIGdldFNlbGVjdGlvblJlY3QsXG4gIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCxcbiAgc2V0U2Nyb2xsTW9kZSxcbn0gZnJvbSBcIi4vaGlnaGxpZ2h0XCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXREZWNvcmF0aW9ucywgcmVnaXN0ZXJUZW1wbGF0ZXMgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxuLy8gUHVibGljIEFQSSB1c2VkIGJ5IHRoZSBuYXZpZ2F0b3IuXG53aW5kb3cucmVhZGl1bSA9IHtcbiAgLy8gdXRpbHNcbiAgc2Nyb2xsVG9JZDogc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbjogc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9UZXh0OiBzY3JvbGxUb1RleHQsXG4gIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0OiBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9TdGFydDogc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9FbmQ6IHNjcm9sbFRvRW5kLFxuICBzZXRQcm9wZXJ0eTogc2V0UHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnR5OiByZW1vdmVQcm9wZXJ0eSxcblxuICAvLyBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbjogZ2V0Q3VycmVudFNlbGVjdGlvbixcblxuICAvLyBkZWNvcmF0aW9uXG4gIHJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlczogcmVnaXN0ZXJUZW1wbGF0ZXMsXG4gIGdldERlY29yYXRpb25zOiBnZXREZWNvcmF0aW9ucyxcbn07XG5cbi8vIExlZ2FjeSBoaWdobGlnaHRzIEFQSS5cbndpbmRvdy5jcmVhdGVBbm5vdGF0aW9uID0gY3JlYXRlQW5ub3RhdGlvbjtcbndpbmRvdy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG53aW5kb3cuZGVzdHJveUhpZ2hsaWdodCA9IGRlc3Ryb3lIaWdobGlnaHQ7XG53aW5kb3cuZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbztcbndpbmRvdy5nZXRTZWxlY3Rpb25SZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdDtcbndpbmRvdy5yZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQgPSByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQ7XG53aW5kb3cuc2V0U2Nyb2xsTW9kZSA9IHNldFNjcm9sbE1vZGU7XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBTY3JpcHQgdXNlZCBmb3IgZml4ZWQgbGF5b3V0cyByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vaW5kZXhcIjtcbiJdLCJuYW1lcyI6WyJhcHByb3hTZWFyY2giLCJzZWFyY2giLCJ0ZXh0Iiwic3RyIiwibWF4RXJyb3JzIiwibWF0Y2hQb3MiLCJleGFjdE1hdGNoZXMiLCJpbmRleE9mIiwicHVzaCIsInN0YXJ0IiwiZW5kIiwibGVuZ3RoIiwiZXJyb3JzIiwidGV4dE1hdGNoU2NvcmUiLCJtYXRjaGVzIiwibWF0Y2hRdW90ZSIsInF1b3RlIiwiY29udGV4dCIsIk1hdGgiLCJtaW4iLCJzY29yZU1hdGNoIiwibWF0Y2giLCJxdW90ZVdlaWdodCIsInByZWZpeFdlaWdodCIsInN1ZmZpeFdlaWdodCIsInBvc1dlaWdodCIsInF1b3RlU2NvcmUiLCJwcmVmaXhTY29yZSIsInByZWZpeCIsInNsaWNlIiwibWF4Iiwic3VmZml4U2NvcmUiLCJzdWZmaXgiLCJwb3NTY29yZSIsImhpbnQiLCJvZmZzZXQiLCJhYnMiLCJyYXdTY29yZSIsIm1heFNjb3JlIiwibm9ybWFsaXplZFNjb3JlIiwic2NvcmVkTWF0Y2hlcyIsIm1hcCIsIm0iLCJzY29yZSIsInNvcnQiLCJhIiwiYiIsIm5vZGVUZXh0TGVuZ3RoIiwibm9kZSIsIm5vZGVUeXBlIiwiTm9kZSIsIkVMRU1FTlRfTk9ERSIsIlRFWFRfTk9ERSIsInRleHRDb250ZW50IiwicHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgiLCJzaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwicmVzb2x2ZU9mZnNldHMiLCJlbGVtZW50Iiwib2Zmc2V0cyIsIm5leHRPZmZzZXQiLCJzaGlmdCIsIm5vZGVJdGVyIiwib3duZXJEb2N1bWVudCIsImNyZWF0ZU5vZGVJdGVyYXRvciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJyZXN1bHRzIiwiY3VycmVudE5vZGUiLCJuZXh0Tm9kZSIsInRleHROb2RlIiwidW5kZWZpbmVkIiwiZGF0YSIsIlJhbmdlRXJyb3IiLCJSRVNPTFZFX0ZPUldBUkRTIiwiUkVTT0xWRV9CQUNLV0FSRFMiLCJUZXh0UG9zaXRpb24iLCJFcnJvciIsInBhcmVudCIsImNvbnRhaW5zIiwiZWwiLCJwYXJlbnRFbGVtZW50Iiwib3B0aW9ucyIsImVyciIsImRpcmVjdGlvbiIsInR3IiwiZG9jdW1lbnQiLCJjcmVhdGVUcmVlV2Fsa2VyIiwiZ2V0Um9vdE5vZGUiLCJmb3J3YXJkcyIsInByZXZpb3VzTm9kZSIsImZyb21Qb2ludCIsInRleHRPZmZzZXQiLCJjaGlsZE5vZGVzIiwiaSIsIlRleHRSYW5nZSIsInJlbGF0aXZlVG8iLCJyZXNvbHZlIiwicmFuZ2UiLCJSYW5nZSIsInNldFN0YXJ0Iiwic2V0RW5kIiwic3RhcnRDb250YWluZXIiLCJzdGFydE9mZnNldCIsImVuZENvbnRhaW5lciIsImVuZE9mZnNldCIsInJvb3QiLCJub2RlRnJvbVhQYXRoIiwieHBhdGhGcm9tTm9kZSIsIlJhbmdlQW5jaG9yIiwibm9ybWFsaXplZFJhbmdlIiwiZnJvbVJhbmdlIiwidG9SYW5nZSIsInRleHRSYW5nZSIsInR5cGUiLCJzZWxlY3RvciIsInN0YXJ0UG9zIiwiZnJvbUNoYXJPZmZzZXQiLCJlbmRQb3MiLCJUZXh0UG9zaXRpb25BbmNob3IiLCJmcm9tT2Zmc2V0cyIsIlRleHRRdW90ZUFuY2hvciIsImV4YWN0IiwidG9Qb3NpdGlvbkFuY2hvciIsImNvbnRleHRMZW4iLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJBbmRyb2lkIiwibG9nRXJyb3IiLCJtZXNzYWdlIiwiZmlsZW5hbWUiLCJsaW5lbm8iLCJvYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwiYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkIiwib2JzZXJ2ZSIsImJvZHkiLCJvblZpZXdwb3J0V2lkdGhDaGFuZ2VkIiwic25hcEN1cnJlbnRPZmZzZXQiLCJpZCIsInZpcnR1YWxDb2wiLCJnZXRFbGVtZW50QnlJZCIsImlzU2Nyb2xsTW9kZUVuYWJsZWQiLCJnZXRDb2x1bW5Db3VudFBlclNjcmVlbiIsInJlbW92ZSIsImRvY3VtZW50V2lkdGgiLCJzY3JvbGxpbmdFbGVtZW50Iiwic2Nyb2xsV2lkdGgiLCJjb2xDb3VudCIsInBhZ2VXaWR0aCIsImhhc09kZENvbENvdW50Iiwicm91bmQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwic3R5bGUiLCJicmVha0JlZm9yZSIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwid2lkdGgiLCJnZXRWaWV3cG9ydFdpZHRoIiwiZGV2aWNlUGl4ZWxSYXRpbyIsInNldFByb3BlcnR5IiwicGFyc2VJbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwiZG9jdW1lbnRFbGVtZW50IiwiZ2V0UHJvcGVydHlWYWx1ZSIsInRvU3RyaW5nIiwidHJpbSIsImlzUlRMIiwiZGlyIiwidG9Mb3dlckNhc2UiLCJzY3JvbGxUb0lkIiwic2Nyb2xsVG9SZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic2Nyb2xsVG9Qb3NpdGlvbiIsInBvc2l0aW9uIiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsVG9wIiwiZmFjdG9yIiwic2Nyb2xsTGVmdCIsInNuYXBPZmZzZXQiLCJzY3JvbGxUb1RleHQiLCJyYW5nZUZyb21Mb2NhdG9yIiwic2Nyb2xsVG9SYW5nZSIsInJlY3QiLCJ0b3AiLCJzY3JvbGxZIiwiaW5uZXJIZWlnaHQiLCJsZWZ0Iiwic2Nyb2xsWCIsInNjcm9sbFRvU3RhcnQiLCJzY3JvbGxUbyIsInNjcm9sbFRvRW5kIiwibWluT2Zmc2V0Iiwic2Nyb2xsVG9PZmZzZXQiLCJzY3JvbGxSaWdodCIsIm1heE9mZnNldCIsImN1cnJlbnRPZmZzZXQiLCJkaWZmIiwidmFsdWUiLCJkZWx0YSIsImxvY2F0b3IiLCJoaWdobGlnaHQiLCJhbmNob3IiLCJiZWZvcmUiLCJhZnRlciIsImUiLCJrZXkiLCJyZW1vdmVQcm9wZXJ0eSIsImxvZyIsIkFycmF5IiwicHJvdG90eXBlIiwiY2FsbCIsImFyZ3VtZW50cyIsImpvaW4iLCJsb2dOYXRpdmUiLCJkZWJ1ZyIsInRvTmF0aXZlUmVjdCIsInBpeGVsUmF0aW8iLCJoZWlnaHQiLCJyaWdodCIsImJvdHRvbSIsImdldENsaWVudFJlY3RzTm9PdmVybGFwIiwiZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyIsImNsaWVudFJlY3RzIiwiZ2V0Q2xpZW50UmVjdHMiLCJ0b2xlcmFuY2UiLCJvcmlnaW5hbFJlY3RzIiwicmFuZ2VDbGllbnRSZWN0IiwibWVyZ2VkUmVjdHMiLCJtZXJnZVRvdWNoaW5nUmVjdHMiLCJub0NvbnRhaW5lZFJlY3RzIiwicmVtb3ZlQ29udGFpbmVkUmVjdHMiLCJuZXdSZWN0cyIsInJlcGxhY2VPdmVybGFwaW5nUmVjdHMiLCJtaW5BcmVhIiwiaiIsImJpZ0Vub3VnaCIsInNwbGljZSIsInJlY3RzIiwicmVjdDEiLCJyZWN0MiIsInJlY3RzTGluZVVwVmVydGljYWxseSIsImFsbW9zdEVxdWFsIiwicmVjdHNMaW5lVXBIb3Jpem9udGFsbHkiLCJob3Jpem9udGFsQWxsb3dlZCIsImFsaWduZWQiLCJjYW5NZXJnZSIsInJlY3RzVG91Y2hPck92ZXJsYXAiLCJmaWx0ZXIiLCJyZXBsYWNlbWVudENsaWVudFJlY3QiLCJnZXRCb3VuZGluZ1JlY3QiLCJyZWN0c1RvS2VlcCIsIlNldCIsImRlbGV0ZSIsInBvc3NpYmx5Q29udGFpbmluZ1JlY3QiLCJoYXMiLCJyZWN0Q29udGFpbnMiLCJmcm9tIiwicmVjdENvbnRhaW5zUG9pbnQiLCJ4IiwieSIsInRvQWRkIiwidG9SZW1vdmUiLCJzdWJ0cmFjdFJlY3RzMSIsInJlY3RTdWJ0cmFjdCIsInN1YnRyYWN0UmVjdHMyIiwiYXBwbHkiLCJyZWN0SW50ZXJzZWN0ZWQiLCJyZWN0SW50ZXJzZWN0IiwicmVjdEEiLCJyZWN0QiIsInJlY3RDIiwicmVjdEQiLCJtYXhMZWZ0IiwibWluUmlnaHQiLCJtYXhUb3AiLCJtaW5Cb3R0b20iLCJzdHlsZXMiLCJNYXAiLCJncm91cHMiLCJsYXN0R3JvdXBJZCIsInJlZ2lzdGVyVGVtcGxhdGVzIiwibmV3U3R5bGVzIiwic3R5bGVzaGVldCIsIk9iamVjdCIsImVudHJpZXMiLCJzZXQiLCJzdHlsZUVsZW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImdldERlY29yYXRpb25zIiwiZ3JvdXBOYW1lIiwiZ3JvdXAiLCJnZXQiLCJEZWNvcmF0aW9uR3JvdXAiLCJoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCIsImNsaWNrRXZlbnQiLCJzaXplIiwiZmluZFRhcmdldCIsImdyb3VwQ29udGVudCIsIml0ZW1zIiwicmV2ZXJzZSIsIml0ZW0iLCJjbGlja2FibGVFbGVtZW50cyIsInRvSlNPTiIsImNsaWVudFgiLCJjbGllbnRZIiwidGFyZ2V0Iiwib25EZWNvcmF0aW9uQWN0aXZhdGVkIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlY29yYXRpb24iLCJjbGljayIsImdyb3VwSWQiLCJsYXN0SXRlbUlkIiwiY29udGFpbmVyIiwiYWRkIiwibGF5b3V0IiwiZGVjb3JhdGlvbklkIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJ1cGRhdGUiLCJjbGVhciIsImNsZWFyQ29udGFpbmVyIiwicmVxdWVzdExheW91dCIsImZvckVhY2giLCJncm91cENvbnRhaW5lciIsInJlcXVpcmVDb250YWluZXIiLCJpdGVtQ29udGFpbmVyIiwidmlld3BvcnRXaWR0aCIsImlubmVyV2lkdGgiLCJjb2x1bW5Db3VudCIsInhPZmZzZXQiLCJ5T2Zmc2V0IiwicG9zaXRpb25FbGVtZW50IiwiYm91bmRpbmdSZWN0IiwiZmxvb3IiLCJlbGVtZW50VGVtcGxhdGUiLCJ0ZW1wbGF0ZSIsImNvbnRlbnQiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImVycm9yIiwicjEiLCJyMiIsImNsaWVudFJlY3QiLCJsaW5lIiwiY2xvbmVOb2RlIiwiYXBwZW5kIiwiYm91bmRzIiwicXVlcnlTZWxlY3RvckFsbCIsImNoaWxkcmVuIiwibGFzdFNpemUiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsIm9uQ2xpY2siLCJnZXRTZWxlY3Rpb24iLCJpc0NvbGxhcHNlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ0YXJnZXRFbGVtZW50Iiwib3V0ZXJIVE1MIiwiaW50ZXJhY3RpdmVFbGVtZW50IiwibmVhcmVzdEludGVyYWN0aXZlRWxlbWVudCIsInNob3VsZFByZXZlbnREZWZhdWx0Iiwib25UYXAiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImludGVyYWN0aXZlVGFncyIsIm5vZGVOYW1lIiwiaGFzQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUk9PVF9DTEFTU19SRURVQ0VfTU9USU9OIiwiUk9PVF9DTEFTU19OT19GT09UTk9URVMiLCJQT1BVUF9ESUFMT0dfQ0xBU1MiLCJGT09UTk9URVNfQ09OVEFJTkVSX0NMQVNTIiwiRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyIsIkZPT1ROT1RFX0ZPUkNFX1NIT1ciLCJUVFNfSURfUFJFVklPVVMiLCJUVFNfSURfTkVYVCIsIlRUU19JRF9TTElERVIiLCJUVFNfSURfQUNUSVZFX1dPUkQiLCJUVFNfSURfQ09OVEFJTkVSIiwiVFRTX0lEX0lORk8iLCJUVFNfTkFWX0JVVFRPTl9DTEFTUyIsIlRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCIsIlRUU19DTEFTU19JTkpFQ1RFRF9TUEFOIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4iLCJUVFNfSURfSU5KRUNURURfUEFSRU5UIiwiSURfSElHSExJR0hUU19DT05UQUlORVIiLCJJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiIsIkNMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIiLCJDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiIsIkNMQVNTX0hJR0hMSUdIVF9BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9BUkVBIiwiQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEiLCJfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSIsIkNMQVNTX1BBR0lOQVRFRCIsIklTX0RFViIsIl9oaWdobGlnaHRzIiwiX2hpZ2hsaWdodHNDb250YWluZXIiLCJfYW5ub3RhdGlvbkNvbnRhaW5lciIsImxhc3RNb3VzZURvd25YIiwibGFzdE1vdXNlRG93blkiLCJib2R5RXZlbnRMaXN0ZW5lcnNTZXQiLCJVU0VfU1ZHIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiREVCVUdfVklTVUFMUyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUiIsImJsdWUiLCJncmVlbiIsInJlZCIsIkFOTk9UQVRJT05fV0lEVEgiLCJyZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJfd2luIiwiaGlnaGxpZ2h0Qm91bmRpbmciLCJvdXRsaW5lIiwic2V0SGlnaGxpZ2h0QXJlYVN0eWxlIiwid2luIiwiaGlnaGxpZ2h0QXJlYXMiLCJ1c2VTVkciLCJoaWdobGlnaHRBcmVhIiwiaXNTVkciLCJuYW1lc3BhY2VVUkkiLCJTVkdfWE1MX05BTUVTUEFDRSIsIm9wYWNpdHkiLCJjb2xvciIsInJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlIiwicGFyZW50Tm9kZSIsImZpbmQiLCJoIiwicHJvY2Vzc1RvdWNoRXZlbnQiLCJldiIsInNjcm9sbEVsZW1lbnQiLCJnZXRTY3JvbGxpbmdFbGVtZW50IiwiY2hhbmdlZFRvdWNoZXMiLCJwYWdpbmF0ZWQiLCJpc1BhZ2luYXRlZCIsImJvZHlSZWN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiZm91bmRIaWdobGlnaHQiLCJmb3VuZEVsZW1lbnQiLCJmb3VuZFJlY3QiLCJoaWdobGlnaHRQYXJlbnQiLCJxdWVyeVNlbGVjdG9yIiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJsb2NhdGlvbnMiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsImNzc1NlbGVjdG9yIiwicGFydGlhbENmaSIsImRvbVJhbmdlIiwibG9jYXRpb24iLCJyZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQiLCJnZXRTZWxlY3Rpb25SZWN0Iiwic2VsIiwiaGFuZGxlQm91bmRzIiwic2V0U2Nyb2xsTW9kZSIsImZsYWciLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVhZGl1bSIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3466\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var B=__webpack_module_cache__[Q];if(void 0!==B)return B.exports;var t=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](t,t.exports,__webpack_require__),t.exports}__webpack_require__.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(B,{a:B}),B},__webpack_require__.d=function(Q,B){for(var t in B)__webpack_require__.o(B,t)&&!__webpack_require__.o(Q,t)&&Object.defineProperty(Q,t,{enumerable:!0,get:B[t]})},__webpack_require__.o=function(Q,B){return Object.prototype.hasOwnProperty.call(Q,B)};var __webpack_exports__=__webpack_require__(3466)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var anchor = new TextQuoteAnchor(document.body, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nfunction findFirstVisibleElement(rootElement) {\n for (var i = 0; i < rootElement.children.length; i++) {\n var child = rootElement.children[i];\n\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n var visibleElement = findFirstVisibleElement(child);\n\n if (visibleElement) {\n return visibleElement;\n }\n }\n\n if (rootElement !== document.body && rootElement !== document.documentElement) {\n var visible = isElementVisible(rootElement, undefined);\n\n if (visible) {\n return rootElement;\n }\n }\n\n return undefined;\n} // See computeVisibility_() in r2-navigator-js\n\nfunction isElementVisible(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) {\n return true;\n } else if (!document || !document.documentElement || !document.body) {\n return false;\n }\n\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n // TODO: vertical writing mode\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n }\n\n var scrollLeft = rect.left;\n var currentOffset = scrollElement.scrollLeft;\n return rect.left > 0 && rect.left < pageWidth;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleElement: findFirstVisibleElement\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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IndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1maXhlZC5qcz9kOTlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihkb2N1bWVudC5ib2R5LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudChyb290RWxlbWVudCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGQgPSByb290RWxlbWVudC5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdmlzaWJsZUVsZW1lbnQgPSBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudChjaGlsZCk7XG4gICAgaWYgKHZpc2libGVFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdmlzaWJsZUVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHJvb3RFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5ICYmXG4gICAgcm9vdEVsZW1lbnQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICApIHtcbiAgICBjb25zdCB2aXNpYmxlID0gaXNFbGVtZW50VmlzaWJsZShyb290RWxlbWVudCwgdW5kZWZpbmVkKTtcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgcmV0dXJuIHJvb3RFbGVtZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKGVsZW1lbnQsIGRvbVJlY3QgLyogbnVsbGFibGUgKi8pIHtcbiAgaWYgKHJlYWRpdW0uaXNGaXhlZExheW91dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8ICFkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIENhbm5vdCBiZSByZWxpZWQgdXBvbiwgYmVjYXVzZSB3ZWIgYnJvd3NlciBlbmdpbmUgcmVwb3J0cyBpbnZpc2libGUgd2hlbiBvdXQgb2YgdmlldyBpblxuICAgIC8vIHNjcm9sbGVkIGNvbHVtbnMhXG4gICAgLy8gY29uc3QgdmlzaWJpbGl0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2liaWxpdHlcIik7XG4gICAgLy8gaWYgKHZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIH1cbiAgICBjb25zdCBvcGFjaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3BhY2l0eVwiKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gXCIwXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWN0ID0gZG9tUmVjdCB8fCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgLy8gVE9ETzogdmVydGljYWwgd3JpdGluZyBtb2RlXG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IHNjcm9sbExlZnQgPSByZWN0LmxlZnQ7XG4gIGxldCBjdXJyZW50T2Zmc2V0ID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICByZXR1cm4gcmVjdC5sZWZ0ID4gMCAmJiByZWN0LmxlZnQgPCBwYWdlV2lkdGg7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBsb2dFcnJvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyB0b05hdGl2ZVJlY3QgfSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBUZXh0UmFuZ2UgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZVwiO1xuXG4vLyBQb2x5ZmlsbCBmb3IgQW5kcm9pZCBBUEkgMjZcbmltcG9ydCBtYXRjaEFsbCBmcm9tIFwic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbFwiO1xubWF0Y2hBbGwuc2hpbSgpO1xuXG5jb25zdCBkZWJ1ZyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICBjb25zdCB0ZXh0ID0gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldFNlbGVjdGlvblJlY3QoKTtcbiAgcmV0dXJuIHsgdGV4dCwgcmVjdCB9O1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIGxldCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICByZXR1cm4gdG9OYXRpdmVSZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBoaWdobGlnaHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5IaWdobGlnaHQgPSBoaWdobGlnaHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhbkhpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7XG4gIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8oZG9jdW1lbnQuYm9keSk7XG4gIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgY29uc3Qgc25pcHBldExlbmd0aCA9IDIwMDtcblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGJlZm9yZSB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgZmlyc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGJlZm9yZSA9IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBzbmlwcGV0TGVuZ3RoKSwgc3RhcnQpO1xuICBsZXQgZmlyc3RXb3JkU3RhcnQgPSBiZWZvcmUuc2VhcmNoKC9cXFB7TH1cXHB7TH0vZ3UpO1xuICBpZiAoZmlyc3RXb3JkU3RhcnQgIT09IC0xKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlLnNsaWNlKGZpcnN0V29yZFN0YXJ0ICsgMSk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGFmdGVyIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBsYXN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBhZnRlciA9IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgc25pcHBldExlbmd0aCkpO1xuICBsZXQgbGFzdFdvcmRFbmQgPSBBcnJheS5mcm9tKGFmdGVyLm1hdGNoQWxsKC9cXHB7TH1cXFB7TH0vZ3UpKS5wb3AoKTtcbiAgaWYgKGxhc3RXb3JkRW5kICE9PSB1bmRlZmluZWQgJiYgbGFzdFdvcmRFbmQuaW5kZXggPiAxKSB7XG4gICAgYWZ0ZXIgPSBhZnRlci5zbGljZSgwLCBsYXN0V29yZEVuZC5pbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGlnaGxpZ2h0LCBiZWZvcmUsIGFmdGVyIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBCYXNlIHNjcmlwdCB1c2VkIGJ5IGJvdGggcmVmbG93YWJsZSBhbmQgZml4ZWQgbGF5b3V0IHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9nZXN0dXJlc1wiO1xuaW1wb3J0IHtcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb0VuZCxcbiAgc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9UZXh0LFxuICBzZXRQcm9wZXJ0eSxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUFubm90YXRpb24sXG4gIGNyZWF0ZUhpZ2hsaWdodCxcbiAgZGVzdHJveUhpZ2hsaWdodCxcbiAgZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8sXG4gIGdldFNlbGVjdGlvblJlY3QsXG4gIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCxcbiAgc2V0U2Nyb2xsTW9kZSxcbn0gZnJvbSBcIi4vaGlnaGxpZ2h0XCI7XG5pbXBvcnQgeyBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudCB9IGZyb20gXCIuL2RvbVwiO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGVjb3JhdGlvbnMsIHJlZ2lzdGVyVGVtcGxhdGVzIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbi8vIFB1YmxpYyBBUEkgdXNlZCBieSB0aGUgbmF2aWdhdG9yLlxud2luZG93LnJlYWRpdW0gPSB7XG4gIC8vIHV0aWxzXG4gIHNjcm9sbFRvSWQ6IHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb246IHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvVGV4dDogc2Nyb2xsVG9UZXh0LFxuICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodDogc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvU3RhcnQ6IHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvRW5kOiBzY3JvbGxUb0VuZCxcbiAgc2V0UHJvcGVydHk6IHNldFByb3BlcnR5LFxuICByZW1vdmVQcm9wZXJ0eTogcmVtb3ZlUHJvcGVydHksXG5cbiAgLy8gc2VsZWN0aW9uXG4gIGdldEN1cnJlbnRTZWxlY3Rpb246IGdldEN1cnJlbnRTZWxlY3Rpb24sXG5cbiAgLy8gZGVjb3JhdGlvblxuICByZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXM6IHJlZ2lzdGVyVGVtcGxhdGVzLFxuICBnZXREZWNvcmF0aW9uczogZ2V0RGVjb3JhdGlvbnMsXG5cbiAgLy8gRE9NXG4gIGZpbmRGaXJzdFZpc2libGVFbGVtZW50OiBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudCxcbn07XG5cbi8vIExlZ2FjeSBoaWdobGlnaHRzIEFQSS5cbndpbmRvdy5jcmVhdGVBbm5vdGF0aW9uID0gY3JlYXRlQW5ub3RhdGlvbjtcbndpbmRvdy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG53aW5kb3cuZGVzdHJveUhpZ2hsaWdodCA9IGRlc3Ryb3lIaWdobGlnaHQ7XG53aW5kb3cuZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbztcbndpbmRvdy5nZXRTZWxlY3Rpb25SZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdDtcbndpbmRvdy5yZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQgPSByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQ7XG53aW5kb3cuc2V0U2Nyb2xsTW9kZSA9IHNldFNjcm9sbE1vZGU7XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBTY3JpcHQgdXNlZCBmb3IgZml4ZWQgbGF5b3V0cyByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vaW5kZXhcIjtcblxud2luZG93LnJlYWRpdW0uaXNGaXhlZExheW91dCA9IHRydWU7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwicXVlcnlTZWxlY3RvciIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwibG9jYXRpb25zIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJjc3NTZWxlY3RvciIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQiLCJyb290RWxlbWVudCIsInZpc2libGVFbGVtZW50IiwidmlzaWJsZSIsImlzRWxlbWVudFZpc2libGUiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var B=__webpack_module_cache__[Q];if(void 0!==B)return B.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(B,{a:B}),B},__webpack_require__.d=function(Q,B){for(var n in B)__webpack_require__.o(B,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:B[n]})},__webpack_require__.o=function(Q,B){return Object.prototype.hasOwnProperty.call(Q,B)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js index 0d94427a02..594cf2384a 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},4970:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var anchor = new TextQuoteAnchor(document.body, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WTtBQUN4RDtBQUNBLE1BQUkwakIsSUFBSSxHQUFHbG1CLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsTUFBdkIsQ0FBWDtBQUNBK2hCLEVBQUFBLElBQUksQ0FBQzloQixZQUFMLENBQWtCLE1BQWxCLEVBQTBCLFVBQTFCO0FBQ0E4aEIsRUFBQUEsSUFBSSxDQUFDOWhCLFlBQUwsQ0FDRSxTQURGLEVBRUUsOEZBRkY7QUFJQXBFLEVBQUFBLFFBQVEsQ0FBQ21tQixJQUFULENBQWMzaEIsV0FBZCxDQUEwQjBoQixJQUExQjtBQUNELENBVEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvc2VsZWN0aW9uLmpzPzU5YWMiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC5qcz9iNjM1Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXgtcmVmbG93YWJsZS5qcz8zOTI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBwYWdlV2lkdGggPSAxO1xuXG5mdW5jdGlvbiBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCkge1xuICAvLyBXZSBjYW4ndCByZWx5IG9uIHdpbmRvdy5pbm5lcldpZHRoIGZvciB0aGUgcGFnZVdpZHRoIG9uIEFuZHJvaWQsIGJlY2F1c2UgaWYgdGhlXG4gIC8vIGRldmljZSBwaXhlbCByYXRpbyBpcyBub3QgYW4gaW50ZWdlciwgd2UgZ2V0IHJvdW5kaW5nIGlzc3VlcyBvZmZzZXR0aW5nIHRoZSBwYWdlcy5cbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3JlYWRpdW0tY3NzL2lzc3Vlcy85N1xuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcjItbmF2aWdhdG9yLWtvdGxpbi9pc3N1ZXMvMTQ2XG4gIHZhciB3aWR0aCA9IEFuZHJvaWQuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICBwYWdlV2lkdGggPSB3aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBzZXRQcm9wZXJ0eShcbiAgICBcIi0tUlNfX3ZpZXdwb3J0V2lkdGhcIixcbiAgICBcImNhbGMoXCIgKyB3aWR0aCArIFwicHggLyBcIiArIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICsgXCIpXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkge1xuICByZXR1cm4gcGFyc2VJbnQoXG4gICAgd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbi1jb3VudFwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1VU0VSX19zY3JvbGxcIilcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpID09IFwicmVhZGl1bS1zY3JvbGwtb25cIlxuICApO1xufVxuXG5mdW5jdGlvbiBpc1JUTCgpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuZGlyLnRvTG93ZXJDYXNlKCkgPT0gXCJydGxcIjtcbn1cblxuLy8gU2Nyb2xsIHRvIHRoZSBnaXZlbiBUYWdJZCBpbiBkb2N1bWVudCBhbmQgc25hcC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0lkKGlkKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVG9SZWN0KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG4vLyBQb3NpdGlvbiBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCAtIDFdLCAwLTEwMCUuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbikge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1Bvc2l0aW9uIFwiICsgcG9zaXRpb24pO1xuICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gMSkge1xuICAgIHRocm93IFwic2Nyb2xsVG9Qb3NpdGlvbigpIG11c3QgYmUgZ2l2ZW4gYSBwb3NpdGlvbiBmcm9tIDAuMCB0byAgMS4wXCI7XG4gIH1cblxuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxIZWlnaHQgKiBwb3NpdGlvbjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcbiAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnRXaWR0aCAqIHBvc2l0aW9uICogZmFjdG9yO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgfVxufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiB0ZXh0IHNuaXBwZXQuXG4vL1xuLy8gVGhlIGV4cGVjdGVkIHRleHQgYXJndW1lbnQgaXMgYSBMb2NhdG9yIFRleHQgb2JqZWN0LCBhcyBkZWZpbmVkIGhlcmU6XG4vLyBodHRwczovL3JlYWRpdW0ub3JnL2FyY2hpdGVjdHVyZS9tb2RlbHMvbG9jYXRvcnMvXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9UZXh0KHRleHQpIHtcbiAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcih7IHRleHQgfSk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2Nyb2xsVG9SYW5nZShyYW5nZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JhbmdlKHJhbmdlKSB7XG4gIHNjcm9sbFRvUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmVjdChyZWN0KSB7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gd2luZG93LmlubmVySGVpZ2h0IC8gMjtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1N0YXJ0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1N0YXJ0XCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbmQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvRW5kXCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoICogZmFjdG9yXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0O1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSBsZWZ0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCAtIHBhZ2VXaWR0aDtcbiAgdmFyIG1pbk9mZnNldCA9IGlzUlRMKCkgPyAtKGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGgpIDogMDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWF4KG9mZnNldCwgbWluT2Zmc2V0KSk7XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgcmlnaHQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFJpZ2h0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCArIHBhZ2VXaWR0aDtcbiAgdmFyIG1heE9mZnNldCA9IGlzUlRMKCkgPyAwIDogZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWluKG9mZnNldCwgbWF4T2Zmc2V0KSk7XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGdpdmVuIGxlZnQgb2Zmc2V0LlxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBzY3JvbGwgcG9zaXRpb24gaXMgYWxyZWFkeSBjbG9zZSBlbm91Z2ggdG8gdGhlIGdpdmVuIG9mZnNldC5cbmZ1bmN0aW9uIHNjcm9sbFRvT2Zmc2V0KG9mZnNldCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb09mZnNldCBcIiArIG9mZnNldCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBcIkNhbGxlZCBzY3JvbGxUb09mZnNldCgpIHdpdGggc2Nyb2xsIG1vZGUgZW5hYmxlZC4gVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHBhZ2luYXRlZCBtb2RlLlwiO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICAvLyBJbiBzb21lIGNhc2UgdGhlIHNjcm9sbFggY2Fubm90IHJlYWNoIHRoZSBwb3NpdGlvbiByZXNwZWN0aW5nIHRvIGlubmVyV2lkdGhcbiAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50T2Zmc2V0IC0gb2Zmc2V0KSAvIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIGRpZmYgPiAwLjAxO1xufVxuXG4vLyBTbmFwIHRoZSBvZmZzZXQgdG8gdGhlIHNjcmVlbiB3aWR0aCAocGFnZSB3aWR0aCkuXG5mdW5jdGlvbiBzbmFwT2Zmc2V0KG9mZnNldCkge1xuICB2YXIgdmFsdWUgPSBvZmZzZXQgKyAoaXNSVEwoKSA/IC0xIDogMSk7XG4gIHJldHVybiB2YWx1ZSAtICh2YWx1ZSAlIHBhZ2VXaWR0aCk7XG59XG5cbi8vIFNuYXBzIHRoZSBjdXJyZW50IG9mZnNldCB0byB0aGUgcGFnZSB3aWR0aC5cbmZ1bmN0aW9uIHNuYXBDdXJyZW50T2Zmc2V0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzbmFwQ3VycmVudE9mZnNldFwiKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICAvLyBBZGRzIGhhbGYgYSBwYWdlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzbmFwIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgdmFyIGRlbHRhID0gZmFjdG9yICogKHBhZ2VXaWR0aCAvIDIpO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KGN1cnJlbnRPZmZzZXQgKyBkZWx0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUZyb21Mb2NhdG9yKGxvY2F0b3IpIHtcbiAgbGV0IHRleHQgPSBsb2NhdG9yLnRleHQ7XG4gIGlmICghdGV4dCB8fCAhdGV4dC5oaWdobGlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIGxldCBhbmNob3IgPSBuZXcgVGV4dFF1b3RlQW5jaG9yKGRvY3VtZW50LmJvZHksIHRleHQuaGlnaGxpZ2h0LCB7XG4gICAgICBwcmVmaXg6IHRleHQuYmVmb3JlLFxuICAgICAgc3VmZml4OiB0ZXh0LmFmdGVyLFxuICAgIH0pO1xuICAgIHJldHVybiBhbmNob3IudG9SYW5nZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8vIFVzZXIgU2V0dGluZ3MuXG5cbi8vIEZvciBzZXR0aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG59XG5cbi8vIEZvciByZW1vdmluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHkoa2V5KSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcbn1cblxuLy8vIFRvb2xraXRcblxuZXhwb3J0IGZ1bmN0aW9uIGxvZygpIHtcbiAgdmFyIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO1xuICBBbmRyb2lkLmxvZyhtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0Vycm9yKG1lc3NhZ2UpIHtcbiAgQW5kcm9pZC5sb2dFcnJvcihtZXNzYWdlLCBcIlwiLCAwKTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGZhbHNlO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgRE9NUmVjdCBpbnRvIGEgSlNPTiBvYmplY3QgdW5kZXJzdGFuZGFibGUgYnkgdGhlIG5hdGl2ZSBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYXRpdmVSZWN0KHJlY3QpIHtcbiAgY29uc3QgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCB3aWR0aCA9IHJlY3Qud2lkdGggKiBwaXhlbFJhdGlvO1xuICBjb25zdCBoZWlnaHQgPSByZWN0LmhlaWdodCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGxlZnQgPSByZWN0LmxlZnQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCB0b3AgPSByZWN0LnRvcCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQ7XG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gIHJhbmdlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcblxuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZyhgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWApO1xuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgbG9nKFxuICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQge1xuICBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCxcbiAgcmVjdENvbnRhaW5zUG9pbnQsXG4gIHRvTmF0aXZlUmVjdCxcbn0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgbG9nLCBsb2dFcnJvciwgcmFuZ2VGcm9tTG9jYXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBzdHlsZXMgPSBuZXcgTWFwKCk7XG5sZXQgZ3JvdXBzID0gbmV3IE1hcCgpO1xudmFyIGxhc3RHcm91cElkID0gMDtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgc3VwcG9ydGVkIERlY29yYXRpb24gVGVtcGxhdGVzLlxuICpcbiAqIEVhY2ggdGVtcGxhdGUgb2JqZWN0IGlzIGluZGV4ZWQgYnkgdGhlIHN0eWxlIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUZW1wbGF0ZXMobmV3U3R5bGVzKSB7XG4gIHZhciBzdHlsZXNoZWV0ID0gXCJcIjtcblxuICBmb3IgKGNvbnN0IFtpZCwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld1N0eWxlcykpIHtcbiAgICBzdHlsZXMuc2V0KGlkLCBzdHlsZSk7XG4gICAgaWYgKHN0eWxlLnN0eWxlc2hlZXQpIHtcbiAgICAgIHN0eWxlc2hlZXQgKz0gc3R5bGUuc3R5bGVzaGVldCArIFwiXFxuXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlc2hlZXQpIHtcbiAgICBsZXQgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgIHN0eWxlRWxlbWVudC5pbm5lckhUTUwgPSBzdHlsZXNoZWV0O1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBEZWNvcmF0aW9uR3JvdXAgZm9yIHRoZSBnaXZlbiBncm91cCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjb3JhdGlvbnMoZ3JvdXBOYW1lKSB7XG4gIHZhciBncm91cCA9IGdyb3Vwcy5nZXQoZ3JvdXBOYW1lKTtcbiAgaWYgKCFncm91cCkge1xuICAgIGxldCBpZCA9IFwicjItZGVjb3JhdGlvbi1cIiArIGxhc3RHcm91cElkKys7XG4gICAgZ3JvdXAgPSBEZWNvcmF0aW9uR3JvdXAoaWQsIGdyb3VwTmFtZSk7XG4gICAgZ3JvdXBzLnNldChncm91cE5hbWUsIGdyb3VwKTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBjbGljayBldmVudHMgb24gYSBEZWNvcmF0aW9uLlxuICogUmV0dXJucyB3aGV0aGVyIGEgZGVjb3JhdGlvbiBtYXRjaGVkIHRoaXMgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkge1xuICBpZiAoZ3JvdXBzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kVGFyZ2V0KCkge1xuICAgIGZvciAoY29uc3QgW2dyb3VwLCBncm91cENvbnRlbnRdIG9mIGdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwQ29udGVudC5pdGVtcy5yZXZlcnNlKCkpIHtcbiAgICAgICAgaWYgKCFpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBsZXQgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9KU09OKCk7XG4gICAgICAgICAgaWYgKHJlY3RDb250YWluc1BvaW50KHJlY3QsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFksIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cCwgaXRlbSwgZWxlbWVudCwgcmVjdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB0YXJnZXQgPSBmaW5kVGFyZ2V0KCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIEFuZHJvaWQub25EZWNvcmF0aW9uQWN0aXZhdGVkKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGlkOiB0YXJnZXQuaXRlbS5kZWNvcmF0aW9uLmlkLFxuICAgICAgZ3JvdXA6IHRhcmdldC5ncm91cCxcbiAgICAgIHJlY3Q6IHRvTmF0aXZlUmVjdCh0YXJnZXQuaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksXG4gICAgICBjbGljazogY2xpY2tFdmVudCxcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEZWNvcmF0aW9uR3JvdXAgb2JqZWN0IGZyb20gYSB1bmlxdWUgSFRNTCBJRCBhbmQgaXRzIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWNvcmF0aW9uR3JvdXAoZ3JvdXBJZCwgZ3JvdXBOYW1lKSB7XG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIgbGFzdEl0ZW1JZCA9IDA7XG4gIHZhciBjb250YWluZXIgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGRlY29yYXRpb24gdG8gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkKGRlY29yYXRpb24pIHtcbiAgICBsZXQgaWQgPSBncm91cElkICsgXCItXCIgKyBsYXN0SXRlbUlkKys7XG5cbiAgICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKGRlY29yYXRpb24ubG9jYXRvcik7XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgbG9nKFwiQ2FuJ3QgbG9jYXRlIERPTSByYW5nZSBmb3IgZGVjb3JhdGlvblwiLCBkZWNvcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IHsgaWQsIGRlY29yYXRpb24sIHJhbmdlIH07XG4gICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICBsYXlvdXQoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZGVjb3JhdGlvbiB3aXRoIGdpdmVuIElEIGZyb20gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlKGRlY29yYXRpb25JZCkge1xuICAgIGxldCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaS5kZWNvcmF0aW9uLmlkID09PSBkZWNvcmF0aW9uSWQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBudWxsO1xuICAgIGlmIChpdGVtLmNvbnRhaW5lcikge1xuICAgICAgaXRlbS5jb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBpdGVtLmNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoYXQgdGhlIGdpdmVuIGRlY29yYXRpb24gd2FzIG1vZGlmaWVkIGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlKGRlY29yYXRpb24pIHtcbiAgICByZW1vdmUoZGVjb3JhdGlvbi5pZCk7XG4gICAgYWRkKGRlY29yYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGRlY29yYXRpb25zIGZyb20gdGhpcyBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZXMgdGhlIGRlY29yYXRpb24gZWxlbWVudHMuXG4gICAqXG4gICAqIFRvIGJlIGNhbGxlZCBhZnRlciByZWZsb3dpbmcgdGhlIHJlc291cmNlLCBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVlc3RMYXlvdXQoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBsYXlvdXQoaXRlbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExheW91dHMgYSBzaW5nbGUgRGVjb3JhdGlvbiBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gbGF5b3V0KGl0ZW0pIHtcbiAgICBsZXQgZ3JvdXBDb250YWluZXIgPSByZXF1aXJlQ29udGFpbmVyKCk7XG5cbiAgICBsZXQgc3R5bGUgPSBzdHlsZXMuZ2V0KGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaWYgKCFzdHlsZSkge1xuICAgICAgbG9nRXJyb3IoYFVua25vd24gZGVjb3JhdGlvbiBzdHlsZTogJHtpdGVtLmRlY29yYXRpb24uc3R5bGV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgaXRlbS5pZCk7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlXCIsIGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaXRlbUNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIGxldCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gcGFyc2VJbnQoXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgXCJjb2x1bW4tY291bnRcIlxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IHBhZ2VXaWR0aCA9IHZpZXdwb3J0V2lkdGggLyAoY29sdW1uQ291bnQgfHwgMSk7XG4gICAgbGV0IHNjcm9sbGluZ0VsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICAgIGxldCB4T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCB5T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnQoZWxlbWVudCwgcmVjdCwgYm91bmRpbmdSZWN0KSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXG4gICAgICBpZiAoc3R5bGUud2lkdGggPT09IFwid3JhcFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtyZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3ZpZXdwb3J0V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHZpZXdwb3J0V2lkdGgpICogdmlld3BvcnRXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcImJvdW5kc1wiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZGluZ1JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Ym91bmRpbmdSZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJwYWdlXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3BhZ2VXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gcGFnZVdpZHRoKSAqIHBhZ2VXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGJvdW5kaW5nUmVjdCA9IGl0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBsZXQgZWxlbWVudFRlbXBsYXRlO1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBpdGVtLmRlY29yYXRpb24uZWxlbWVudC50cmltKCk7XG4gICAgICBlbGVtZW50VGVtcGxhdGUgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihcbiAgICAgICAgYEludmFsaWQgZGVjb3JhdGlvbiBlbGVtZW50IFwiJHtpdGVtLmRlY29yYXRpb24uZWxlbWVudH1cIjogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3hlc1wiKSB7XG4gICAgICBsZXQgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IHRydWU7XG4gICAgICBsZXQgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICAgICAgaXRlbS5yYW5nZSxcbiAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgKTtcblxuICAgICAgY2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5zb3J0KChyMSwgcjIpID0+IHtcbiAgICAgICAgaWYgKHIxLnRvcCA8IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChyMS50b3AgPiByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudChsaW5lLCBjbGllbnRSZWN0LCBib3VuZGluZ1JlY3QpO1xuICAgICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChsaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgY29uc3QgYm91bmRzID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGJvdW5kcy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIHBvc2l0aW9uRWxlbWVudChib3VuZHMsIGJvdW5kaW5nUmVjdCwgYm91bmRpbmdSZWN0KTtcblxuICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQoYm91bmRzKTtcbiAgICB9XG5cbiAgICBncm91cENvbnRhaW5lci5hcHBlbmQoaXRlbUNvbnRhaW5lcik7XG4gICAgaXRlbS5jb250YWluZXIgPSBpdGVtQ29udGFpbmVyO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgaXRlbUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtYWN0aXZhYmxlPScxJ11cIilcbiAgICApO1xuICAgIGlmIChpdGVtLmNsaWNrYWJsZUVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oaXRlbUNvbnRhaW5lci5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIGNvbnRhaW5lciBlbGVtZW50LCBhZnRlciBtYWtpbmcgc3VyZSBpdCBleGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1aXJlQ29udGFpbmVyKCkge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGdyb3VwSWQpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtZ3JvdXBcIiwgZ3JvdXBOYW1lKTtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ3JvdXAgY29udGFpbmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXJDb250YWluZXIoKSB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhZGQsIHJlbW92ZSwgdXBkYXRlLCBjbGVhciwgaXRlbXMsIHJlcXVlc3RMYXlvdXQgfTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2lsbCByZWxheW91dCBhbGwgdGhlIGRlY29yYXRpb25zIHdoZW4gdGhlIGRvY3VtZW50IGJvZHkgaXMgcmVzaXplZC5cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgbGFzdFNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RTaXplLndpZHRoID09PSBib2R5LmNsaWVudFdpZHRoICYmXG4gICAgICAgIGxhc3RTaXplLmhlaWdodCA9PT0gYm9keS5jbGllbnRIZWlnaHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IGJvZHkuY2xpZW50V2lkdGgsXG4gICAgICAgIGhlaWdodDogYm9keS5jbGllbnRIZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAucmVxdWVzdExheW91dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShib2R5KTtcbiAgfSxcbiAgZmFsc2Vcbik7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4gKiBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2ssIGZhbHNlKTtcbn0pO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgLy8gVGhlcmUncyBhbiBvbi1nb2luZyBzZWxlY3Rpb24sIHRoZSB0YXAgd2lsbCBkaXNtaXNzIGl0IHNvIHdlIGRvbid0IGZvcndhcmQgaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgbGV0IGNsaWNrRXZlbnQgPSB7XG4gICAgZGVmYXVsdFByZXZlbnRlZDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZCxcbiAgICB4OiBldmVudC5jbGllbnRYICogcGl4ZWxSYXRpbyxcbiAgICB5OiBldmVudC5jbGllbnRZICogcGl4ZWxSYXRpbyxcbiAgICB0YXJnZXRFbGVtZW50OiBldmVudC50YXJnZXQub3V0ZXJIVE1MLFxuICAgIGludGVyYWN0aXZlRWxlbWVudDogbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChldmVudC50YXJnZXQpLFxuICB9O1xuXG4gIGlmIChoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTZW5kIHRoZSB0YXAgZGF0YSBvdmVyIHRoZSBKUyBicmlkZ2UgZXZlbiBpZiBpdCdzIGJlZW4gaGFuZGxlZCB3aXRoaW4gdGhlIHdlYiB2aWV3LCBzbyB0aGF0XG4gIC8vIGl0IGNhbiBiZSBwcmVzZXJ2ZWQgYW5kIHVzZWQgYnkgdGhlIHRvb2xraXQgaWYgbmVlZGVkLlxuICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uVGFwKEpTT04uc3RyaW5naWZ5KGNsaWNrRXZlbnQpKTtcblxuICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5cbi8vIFNlZS4gaHR0cHM6Ly9naXRodWIuY29tL0pheVBhbm96L2FyY2hpdGVjdHVyZS90cmVlL3RvdWNoLWhhbmRsaW5nL21pc2MvdG91Y2gtaGFuZGxpbmdcbmZ1bmN0aW9uIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgaW50ZXJhY3RpdmVUYWdzID0gW1xuICAgIFwiYVwiLFxuICAgIFwiYXVkaW9cIixcbiAgICBcImJ1dHRvblwiLFxuICAgIFwiY2FudmFzXCIsXG4gICAgXCJkZXRhaWxzXCIsXG4gICAgXCJpbnB1dFwiLFxuICAgIFwibGFiZWxcIixcbiAgICBcIm9wdGlvblwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzdWJtaXRcIixcbiAgICBcInRleHRhcmVhXCIsXG4gICAgXCJ2aWRlb1wiLFxuICBdO1xuICBpZiAoaW50ZXJhY3RpdmVUYWdzLmluZGV4T2YoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGVkaXRhYmxlIGJ5IHRoZSB1c2VyLlxuICBpZiAoXG4gICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKS50b0xvd2VyQ2FzZSgpICE9IFwiZmFsc2VcIlxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3MgcGFyZW50cyByZWN1cnNpdmVseSBiZWNhdXNlIHRoZSB0b3VjaCBtaWdodCBiZSBmb3IgZXhhbXBsZSBvbiBhbiA8ZW0+IGluc2lkZSBhIDxhPi5cbiAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgIHJldHVybiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vL1xuLy8gIGhpZ2hsaWdodC5qc1xuLy8gIHIyLW5hdmlnYXRvci1rb3RsaW5cbi8vXG4vLyAgT3JnYW5pemVkIGJ5IFRhZWh5dW4gS2ltIG9uIDYvMjcvMTkgZnJvbSByMi1uYXZpZ2F0b3ItanMuXG4vL1xuLy8gIENvcHlyaWdodCAyMDE5IFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHdoaWNoIGlzIGRldGFpbGVkXG4vLyAgaW4gdGhlIExJQ0VOU0UgZmlsZSBwcmVzZW50IGluIHRoZSBwcm9qZWN0IHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBzb3VyY2UgY29kZSBpcyBtYWludGFpbmVkLlxuLy9cblxuY29uc3QgUk9PVF9DTEFTU19SRURVQ0VfTU9USU9OID0gXCJyMi1yZWR1Y2UtbW90aW9uXCI7XG5jb25zdCBST09UX0NMQVNTX05PX0ZPT1ROT1RFUyA9IFwicjItbm8tcG9wdXAtZm9vbm90ZXNcIjtcbmNvbnN0IFBPUFVQX0RJQUxPR19DTEFTUyA9IFwicjItcG9wdXAtZGlhbG9nXCI7XG5jb25zdCBGT09UTk9URVNfQ09OVEFJTkVSX0NMQVNTID0gXCJyMi1mb290bm90ZS1jb250YWluZXJcIjtcbmNvbnN0IEZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNsb3NlXCI7XG5jb25zdCBGT09UTk9URV9GT1JDRV9TSE9XID0gXCJyMi1mb290bm90ZS1mb3JjZS1zaG93XCI7XG5jb25zdCBUVFNfSURfUFJFVklPVVMgPSBcInIyLXR0cy1wcmV2aW91c1wiO1xuY29uc3QgVFRTX0lEX05FWFQgPSBcInIyLXR0cy1uZXh0XCI7XG5jb25zdCBUVFNfSURfU0xJREVSID0gXCJyMi10dHMtc2xpZGVyXCI7XG5jb25zdCBUVFNfSURfQUNUSVZFX1dPUkQgPSBcInIyLXR0cy1hY3RpdmUtd29yZFwiO1xuY29uc3QgVFRTX0lEX0NPTlRBSU5FUiA9IFwicjItdHRzLXR4dFwiO1xuY29uc3QgVFRTX0lEX0lORk8gPSBcInIyLXR0cy1pbmZvXCI7XG5jb25zdCBUVFNfTkFWX0JVVFRPTl9DTEFTUyA9IFwicjItdHRzLWJ1dHRvblwiO1xuY29uc3QgVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UID0gXCJyMi10dHMtc3BlYWtpbmctZWxcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOID0gXCJyMi10dHMtc3BlYWtpbmctdHh0XCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9JTkpFQ1RFRF9QQVJFTlQgPSBcInIyLXR0cy1zcGVha2luZy10eHQtcGFyZW50XCI7XG5jb25zdCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUiA9IFwiUjJfSURfSElHSExJR0hUU19DT05UQUlORVJcIjtcbmNvbnN0IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9JRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9BUkVBXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXCI7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5jb25zdCBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSA9IFtcbiAgUE9QVVBfRElBTE9HX0NMQVNTLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTixcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4sXG4gIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQVJFQSxcbiAgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEsXG4gIFwicmVzaXplLXNlbnNvclwiLFxuXTtcbmNvbnN0IENMQVNTX1BBR0lOQVRFRCA9IFwicjItY3NzLXBhZ2luYXRlZFwiO1xuXG4vL2NvbnN0IElTX0RFViA9IChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldlwiKTtcbmNvbnN0IElTX0RFViA9IGZhbHNlO1xuY29uc3QgX2hpZ2hsaWdodHMgPSBbXTtcblxubGV0IF9oaWdobGlnaHRzQ29udGFpbmVyO1xubGV0IF9hbm5vdGF0aW9uQ29udGFpbmVyO1xubGV0IGxhc3RNb3VzZURvd25YID0gLTE7XG5sZXQgbGFzdE1vdXNlRG93blkgPSAtMTtcbmxldCBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSBmYWxzZTtcblxuY29uc3QgVVNFX1NWRyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjM7XG5jb25zdCBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC40NTtcblxuLy9jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSB7XG4gIGJsdWU6IDEwMCxcbiAgZ3JlZW46IDUwLFxuICByZWQ6IDIzMCxcbn07XG5cbmNvbnN0IEFOTk9UQVRJT05fV0lEVEggPSAxNTtcblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKF93aW4sIGhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gIGlmIChcbiAgICBoaWdobGlnaHRCb3VuZGluZy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSA9PSBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLm91dGxpbmUgPSBcIm5vbmVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgXCJ0cmFuc3BhcmVudFwiLFxuICAgIFwiaW1wb3J0YW50XCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYXMsIGhpZ2hsaWdodCkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgaGlnaGxpZ2h0QXJlYXMpIHtcbiAgICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gICAgY29uc3Qgb3BhY2l0eSA9IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGxcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gIGNvbnN0IGlkID0gaXNTVkdcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlkKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCkgPT4ge1xuICAgICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICAgIH0pO1xuICAgIGlmIChoaWdobGlnaHQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICAgIGlmIChpc1NWRykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbFwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICAvLyAgICBfaGlnaGxpZ2h0cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgLy8gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGEuc2VsZWN0aW9uSW5mbykpXG4gIC8vICAgICAgICByZXR1cm4gYS5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGggPCBiLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aFxuICAvLyAgICB9KVxuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcInRvdWNoc3RhcnRcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LmlkLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3VuZEhpZ2hsaWdodC5pZC5pbmNsdWRlcyhcIlIyX0FOTk9UQVRJT05fXCIpKTtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZXVwXCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCB0b3VjaGVkUG9zaXRpb24gPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVkUG9zaXRpb24sXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBsZXQgdG9QcmVzZXJ2ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW107XG4gICAgICAgICAgdG9DaGVjay5wdXNoKHRvUHJlc2VydmUpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRvQ2hlY2ssIHRvQWRkKTtcbiAgICAgICAgICBjaGVja092ZXJsYXBzKHRvQ2hlY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gY2hlY2tPdmVybGFwcyhyZWN0cykge1xuICBjb25zdCBzdGlsbE92ZXJsYXBpbmdSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJlY3QxIG9mIHJlY3RzKSB7XG4gICAgZm9yIChjb25zdCByZWN0MiBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhczEgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QxKSA+PSAwO1xuICAgICAgY29uc3QgaGFzMiA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDIpID49IDA7XG4gICAgICBpZiAoIWhhczEgfHwgIWhhczIpIHtcbiAgICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgICBpZiAoIWhhczEpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWhhczIpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiBvdmVybGFwIC0tLVwiKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMSBUT1A6JHtyZWN0MS50b3B9IEJPVFRPTToke3JlY3QxLmJvdHRvbX0gTEVGVDoke3JlY3QxLmxlZnR9IFJJR0hUOiR7cmVjdDEucmlnaHR9IFdJRFRIOiR7cmVjdDEud2lkdGh9IEhFSUdIVDoke3JlY3QxLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMiBUT1A6JHtyZWN0Mi50b3B9IEJPVFRPTToke3JlY3QyLmJvdHRvbX0gTEVGVDoke3JlY3QyLmxlZnR9IFJJR0hUOiR7cmVjdDIucmlnaHR9IFdJRFRIOiR7cmVjdDIud2lkdGh9IEhFSUdIVDoke3JlY3QyLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB4T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWChyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB4T3ZlcmxhcDogJHt4T3ZlcmxhcH1gKTtcbiAgICAgICAgICBjb25zdCB5T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWShyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB5T3ZlcmxhcDogJHt5T3ZlcmxhcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5sb2coYENMSUVOVCBSRUNUOiBvdmVybGFwcyAke3N0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIH1cbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgY29uc3QgcmVjdCA9IHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAocmFuZ2UsIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMpIHtcbiAgY29uc3QgcmFuZ2VDbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG4gIHJldHVybiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gICAgcmFuZ2VDbGllbnRSZWN0cyxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgY2xpZW50UmVjdHMsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY2hlY2tPdmVybGFwcyhuZXdSZWN0cyk7XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGVkKGRvY3VtZW50KSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX1BBR0lOQVRFRClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCkge1xuICBpZiAoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgaWYgKCFib2R5RXZlbnRMaXN0ZW5lcnNTZXQpIHtcbiAgICAgIGJvZHlFdmVudExpc3RlbmVyc1NldCA9IHRydWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vkb3duXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGxhc3RNb3VzZURvd25YID0gZXYuY2xpZW50WDtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWSA9IGV2LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNldXBcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blggLSBldi5jbGllbnRYKSA8IDMgJiZcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25ZIC0gZXYuY2xpZW50WSkgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlbW92ZVwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJ0b3VjaGVuZFwiLFxuICAgICAgICBmdW5jdGlvbiB0b3VjaEVuZChlKSB7XG4gICAgICAgICAgcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUik7XG5cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChfaGlnaGxpZ2h0c0NvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gX2hpZ2hsaWdodHNDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGhpZGVBbGxoaWdobGlnaHRzKCkge1xuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveUFsbGhpZ2hsaWdodHMoKSB7XG4gIGhpZGVBbGxoaWdobGlnaHRzKCk7XG4gIF9oaWdobGlnaHRzLnNwbGljZSgwLCBfaGlnaGxpZ2h0cy5sZW5ndGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzdHJveUhpZ2hsaWdodChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBsZXQgX2RvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGhpZ2hsaWdodCAmJiBpID49IDAgJiYgaSA8IF9oaWdobGlnaHRzLmxlbmd0aCkge1xuICAgIF9oaWdobGlnaHRzLnNwbGljZShpLCAxKTtcbiAgfVxuICBjb25zdCBoaWdobGlnaHRDb250YWluZXIgPSBfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaGlnaGxpZ2h0Q29udGFpbmVyKSB7XG4gICAgaGlnaGxpZ2h0Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2ZpVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChlbGVtZW50LCBjaGlsZCkge1xuICBsZXQgZm91bmQgPSAtMTtcbiAgbGV0IHRleHROb2RlSW5kZXggPSAtMTtcbiAgbGV0IHByZXZpb3VzV2FzRWxlbWVudCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBjb25zdCBpc1RleHQgPSBpc0NmaVRleHROb2RlKGNoaWxkTm9kZSk7XG4gICAgaWYgKGlzVGV4dCB8fCBwcmV2aW91c1dhc0VsZW1lbnQpIHtcbiAgICAgIHRleHROb2RlSW5kZXggKz0gMjtcbiAgICB9XG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgaWYgKGNoaWxkTm9kZSA9PT0gY2hpbGQpIHtcbiAgICAgICAgZm91bmQgPSB0ZXh0Tm9kZUluZGV4O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcHJldmlvdXNXYXNFbGVtZW50ID0gY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChub2RlMSwgbm9kZTIpIHtcbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMSA9PT0gbm9kZTIpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMS5jb250YWlucyhub2RlMikpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMi5jb250YWlucyhub2RlMSkpIHtcbiAgICByZXR1cm4gbm9kZTI7XG4gIH1cbiAgY29uc3Qgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBsZXQgcGFyZW50ID0gbm9kZTEucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgY29uc3Qgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBwYXJlbnQgPSBub2RlMi5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBsZXQgY29tbW9uQW5jZXN0b3IgPSBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoXG4gICAgKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH1cbiAgKTtcbiAgaWYgKCFjb21tb25BbmNlc3Rvcikge1xuICAgIGNvbW1vbkFuY2VzdG9yID0gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKChub2RlMkVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMkVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbW9uQW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIGZ1bGxRdWFsaWZpZWRTZWxlY3Rvcihub2RlKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZU5hbWU7XG4gIH1cbiAgLy9yZXR1cm4gY3NzUGF0aChub2RlLCBqdXN0U2VsZWN0b3IpO1xuICByZXR1cm4gY3NzUGF0aChub2RlLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIENPTExBUFNFRC5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYXdUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuVGV4dCA9IHJhd1RleHQudHJpbSgpLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhblRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFRFWFQgRU1QVFkuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZUluZm8gPSBjb252ZXJ0UmFuZ2UocmFuZ2UsIGZ1bGxRdWFsaWZpZWRTZWxlY3RvciwgY29tcHV0ZUNGSSk7XG4gIGlmICghcmFuZ2VJbmZvKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFJBTkdFIElORk8gRkFJTD8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoSVNfREVWICYmIERFQlVHX1ZJU1VBTFMpIHtcbiAgICBjb25zdCByZXN0b3JlZFJhbmdlID0gY29udmVydFJhbmdlSW5mbyh3aW4uZG9jdW1lbnQsIHJhbmdlSW5mbyk7XG4gICAgaWYgKHJlc3RvcmVkUmFuZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCA9PT0gcmFuZ2Uuc3RhcnRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQgPT09IHJhbmdlLmVuZE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRUQgT0tBWSAoZGV2IGNoZWNrKS5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFIEZBSUwgKGRldiBjaGVjaykuXCIpO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJTRUxFQ1RJT05cIixcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIk9SREVSRUQgUkFOR0UgRlJPTSBTRUxFQ1RJT05cIixcbiAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlJFU1RPUkVEIFJBTkdFXCIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0FOTk9UIFJFU1RPUkUgU0VMRUNUSU9OIFJBTkdFID8/IVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbyksXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiByYXdUZXh0LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrQmxhY2tsaXN0ZWQoZWwpIHtcbiAgbGV0IGJsYWNrbGlzdGVkSWQ7XG4gIGNvbnN0IGlkID0gZWwuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG4gIGlmIChpZCAmJiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSS5pbmRleE9mKGlkKSA+PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIElEOiBcIiArIGlkKTtcbiAgICBibGFja2xpc3RlZElkID0gaWQ7XG4gIH1cbiAgbGV0IGJsYWNrbGlzdGVkQ2xhc3M7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSkge1xuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoaXRlbSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBDTEFTUzogXCIgKyBpdGVtKTtcbiAgICAgIGJsYWNrbGlzdGVkQ2xhc3MgPSBpdGVtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChibGFja2xpc3RlZElkIHx8IGJsYWNrbGlzdGVkQ2xhc3MpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzUGF0aChub2RlLCBvcHRpbWl6ZWQpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBzdGVwcyA9IFtdO1xuICBsZXQgY29udGV4dE5vZGUgPSBub2RlO1xuICB3aGlsZSAoY29udGV4dE5vZGUpIHtcbiAgICBjb25zdCBzdGVwID0gX2Nzc1BhdGhTdGVwKGNvbnRleHROb2RlLCAhIW9wdGltaXplZCwgY29udGV4dE5vZGUgPT09IG5vZGUpO1xuICAgIGlmICghc3RlcCkge1xuICAgICAgYnJlYWs7IC8vIEVycm9yIC0gYmFpbCBvdXQgZWFybHkuXG4gICAgfVxuICAgIHN0ZXBzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgaWYgKHN0ZXAub3B0aW1pemVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29udGV4dE5vZGUgPSBjb250ZXh0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIHN0ZXBzLnJldmVyc2UoKTtcbiAgcmV0dXJuIHN0ZXBzLmpvaW4oXCIgPiBcIik7XG59XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9tYXN0ZXIvU291cmNlL2RldnRvb2xzL2Zyb250X2VuZC9jb21wb25lbnRzL0RPTVByZXNlbnRhdGlvblV0aWxzLmpzIzMxNlxuZnVuY3Rpb24gX2Nzc1BhdGhTdGVwKG5vZGUsIG9wdGltaXplZCwgaXNUYXJnZXROb2RlKSB7XG4gIGZ1bmN0aW9uIHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMobmQpIHtcbiAgICBjb25zdCBjbGFzc0F0dHJpYnV0ZSA9IG5kLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIGlmICghY2xhc3NBdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NBdHRyaWJ1dGVcbiAgICAgIC5zcGxpdCgvXFxzKy9nKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcCgobm0pID0+IHtcbiAgICAgICAgLy8gVGhlIHByZWZpeCBpcyByZXF1aXJlZCB0byBzdG9yZSBcIl9fcHJvdG9fX1wiIGluIGEgb2JqZWN0LWJhc2VkIG1hcC5cbiAgICAgICAgcmV0dXJuIFwiJFwiICsgbm07XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlkU2VsZWN0b3IoaWRkKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZCk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRlbnQpIHtcbiAgICBpZiAoaXNDU1NJZGVudGlmaWVyKGlkZW50KSkge1xuICAgICAgcmV0dXJuIGlkZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEVzY2FwZUZpcnN0ID0gL14oPzpbMC05XXwtWzAtOS1dPykvLnRlc3QoaWRlbnQpO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlkZW50Lmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGlkZW50LnJlcGxhY2UoLy4vZywgZnVuY3Rpb24gKGMsIGlpKSB7XG4gICAgICByZXR1cm4gKHNob3VsZEVzY2FwZUZpcnN0ICYmIGlpID09PSAwKSB8fCAhaXNDU1NJZGVudENoYXIoYylcbiAgICAgICAgPyBlc2NhcGVBc2NpaUNoYXIoYywgaWkgPT09IGxhc3RJbmRleClcbiAgICAgICAgOiBjO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlQXNjaWlDaGFyKGMsIGlzTGFzdCkge1xuICAgIHJldHVybiBcIlxcXFxcIiArIHRvSGV4Qnl0ZShjKSArIChpc0xhc3QgPyBcIlwiIDogXCIgXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9IZXhCeXRlKGMpIHtcbiAgICBsZXQgaGV4Qnl0ZSA9IGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gICAgaWYgKGhleEJ5dGUubGVuZ3RoID09PSAxKSB7XG4gICAgICBoZXhCeXRlID0gXCIwXCIgKyBoZXhCeXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGV4Qnl0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRDaGFyKGMpIHtcbiAgICBpZiAoL1thLXpBLVowLTlfLV0vLnRlc3QoYykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApID49IDB4YTA7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50aWZpZXIodmFsdWUpIHtcbiAgICByZXR1cm4gL14tP1thLXpBLVpfXVthLXpBLVowLTlfLV0qJC8udGVzdCh2YWx1ZSk7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBlbGVtZW50ID0gbm9kZTtcblxuICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cbiAgaWYgKG9wdGltaXplZCkge1xuICAgIGlmIChpZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogaWRTZWxlY3RvcihpZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImJvZHlcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJoZWFkXCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaHRtbFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBsb3dlckNhc2VOYW1lLCAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBub2RlTmFtZSA9IGxvd2VyQ2FzZU5hbWU7IC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7XG4gIGlmIChpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUgKyBpZFNlbGVjdG9yKGlkKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50IHx8IHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhlbGVtZW50KTtcblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICBpZiAocHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmVlZHNDbGFzc05hbWVzID0gZmFsc2U7XG4gIGxldCBuZWVkc050aENoaWxkID0gZmFsc2U7XG4gIGxldCBvd25JbmRleCA9IC0xO1xuICBsZXQgZWxlbWVudEluZGV4ID0gLTE7XG4gIGNvbnN0IHNpYmxpbmdzID0gcGFyZW50LmNoaWxkcmVuO1xuXG4gIGZvciAoXG4gICAgbGV0IGkgPSAwO1xuICAgIChvd25JbmRleCA9PT0gLTEgfHwgIW5lZWRzTnRoQ2hpbGQpICYmIGkgPCBzaWJsaW5ncy5sZW5ndGg7XG4gICAgKytpXG4gICkge1xuICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICBpZiAoc2libGluZy5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBlbGVtZW50SW5kZXggKz0gMTtcbiAgICBpZiAoc2libGluZyA9PT0gbm9kZSkge1xuICAgICAgb3duSW5kZXggPSBlbGVtZW50SW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNpYmxpbmcubm9kZU5hbWVJbkNvcnJlY3RDYXNlKClcbiAgICBjb25zdCBzaWJsaW5nTmFtZSA9XG4gICAgICAoc2libGluZy5sb2NhbE5hbWUgJiYgc2libGluZy5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIHNpYmxpbmcubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc2libGluZ05hbWUgIT09IG5vZGVOYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmVlZHNDbGFzc05hbWVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IG93bkNsYXNzTmFtZXMgPSBbXTtcbiAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBvd25DbGFzc05hbWVzLnB1c2goYXJySXRlbSk7XG4gICAgfSk7XG4gICAgbGV0IG93bkNsYXNzTmFtZUNvdW50ID0gb3duQ2xhc3NOYW1lcy5sZW5ndGg7XG5cbiAgICBpZiAob3duQ2xhc3NOYW1lQ291bnQgPT09IDApIHtcbiAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhzaWJsaW5nKTtcbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIGlmIChzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc2libGluZ0NsYXNzIG9mIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIGNvbnN0IGluZCA9IG93bkNsYXNzTmFtZXMuaW5kZXhPZihzaWJsaW5nQ2xhc3MpO1xuICAgICAgaWYgKGluZCA8IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG93bkNsYXNzTmFtZXMuc3BsaWNlKGluZCwgMSk7IC8vIGRlbGV0ZSBvd25DbGFzc05hbWVzW3NpYmxpbmdDbGFzc107XG5cbiAgICAgIGlmICghLS1vd25DbGFzc05hbWVDb3VudCkge1xuICAgICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdCA9IG5vZGVOYW1lO1xuICBpZiAoXG4gICAgaXNUYXJnZXROb2RlICYmXG4gICAgbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIilcbiAgKSB7XG4gICAgcmVzdWx0ICs9ICdbdHlwZT1cIicgKyBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgKyAnXCJdJztcbiAgfVxuICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgIHJlc3VsdCArPSBcIjpudGgtY2hpbGQoXCIgKyAob3duSW5kZXggKyAxKSArIFwiKVwiO1xuICB9IGVsc2UgaWYgKG5lZWRzQ2xhc3NOYW1lcykge1xuICAgIGZvciAoY29uc3QgcHJlZml4ZWROYW1lIG9mIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICByZXN1bHQgKz0gXCIuXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQocHJlZml4ZWROYW1lLnN1YnN0cigxKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpbWl6ZWQ6IGZhbHNlLFxuICAgIHZhbHVlOiByZXN1bHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDRkkobm9kZSkge1xuICAvLyBUT0RPOiBoYW5kbGUgY2hhcmFjdGVyIHBvc2l0aW9uIGluc2lkZSB0ZXh0IG5vZGVcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBjZmkgPSBcIlwiO1xuXG4gIGxldCBjdXJyZW50RWxlbWVudCA9IG5vZGU7XG4gIHdoaWxlIChcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlICYmXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgKSB7XG4gICAgY29uc3QgYmxhY2tsaXN0ZWQgPSBjaGVja0JsYWNrbGlzdGVkKGN1cnJlbnRFbGVtZW50KTtcbiAgICBpZiAoIWJsYWNrbGlzdGVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbjtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudEluZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuW2ldKSB7XG4gICAgICAgICAgY3VycmVudEVsZW1lbnRJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudEluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXggPSAoY3VycmVudEVsZW1lbnRJbmRleCArIDEpICogMjtcbiAgICAgICAgY2ZpID1cbiAgICAgICAgICBjZmlJbmRleCArXG4gICAgICAgICAgKGN1cnJlbnRFbGVtZW50LmlkID8gXCJbXCIgKyBjdXJyZW50RWxlbWVudC5pZCArIFwiXVwiIDogXCJcIikgK1xuICAgICAgICAgIChjZmkubGVuZ3RoID8gXCIvXCIgKyBjZmkgOiBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIFwiL1wiICsgY2ZpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlSGlnaGxpZ2h0KGxvY2F0aW9ucywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbiwgdHlwZSkge1xuICBjb25zdCByYW5nZUluZm8gPSBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb25zKTtcbiAgY29uc3QgdW5pcXVlU3RyID0gYCR7cmFuZ2VJbmZvLmNmaX0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5zdGFydE9mZnNldH0ke3JhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLmVuZE9mZnNldH1gO1xuXG4gIGNvbnN0IGhhc2ggPSByZXF1aXJlKFwiaGFzaC5qc1wiKTtcbiAgY29uc3Qgc2hhMjU2SGV4ID0gaGFzaC5zaGEyNTYoKS51cGRhdGUodW5pcXVlU3RyKS5kaWdlc3QoXCJoZXhcIik7XG5cbiAgdmFyIGlkO1xuICBpZiAodHlwZSA9PSBJRF9ISUdITElHSFRTX0NPTlRBSU5FUikge1xuICAgIGlkID0gXCJSMl9ISUdITElHSFRfXCIgKyBzaGEyNTZIZXg7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBcIlIyX0FOTk9UQVRJT05fXCIgKyBzaGEyNTZIZXg7XG4gIH1cblxuICBkZXN0cm95SGlnaGxpZ2h0KGlkKTtcblxuICBjb25zdCBoaWdobGlnaHQgPSB7XG4gICAgY29sb3I6IGNvbG9yID8gY29sb3IgOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgaWQsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIHJhbmdlSW5mbyxcbiAgfTtcbiAgX2hpZ2hsaWdodHMucHVzaChoaWdobGlnaHQpO1xuICBjcmVhdGVIaWdobGlnaHREb20oXG4gICAgd2luZG93LFxuICAgIGhpZ2hsaWdodCxcbiAgICB0eXBlID09IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uKSB7XG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIHNlbGVjdGlvbkluZm8sXG4gICAgY29sb3IsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uKGlkKSB7XG4gIGxldCBpID0gLTE7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChpID09IF9oaWdobGlnaHRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gIHZhciBsb2NhdGlvbnMgPSB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24oaGlnaGxpZ2h0LnJhbmdlSW5mbyksXG4gIH07XG5cbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgbG9jYXRpb25zLFxuICAgIGhpZ2hsaWdodC5jb2xvcixcbiAgICB0cnVlLFxuICAgIElEX0FOTk9UQVRJT05fQ09OVEFJTkVSXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodERvbSh3aW4sIGhpZ2hsaWdodCwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2NhbGUgPVxuICAgIDEgL1xuICAgICh3aW4uUkVBRElVTTIgJiYgd2luLlJFQURJVU0yLmlzRml4ZWRMYXlvdXRcbiAgICAgID8gd2luLlJFQURJVU0yLmZ4bFZpZXdwb3J0U2NhbGVcbiAgICAgIDogMSk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBoaWdobGlnaHRzQ29udGFpbmVyID0gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpO1xuICBjb25zdCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBoaWdobGlnaHQuaWQpO1xuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUik7XG5cbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgaGlnaGxpZ2h0UGFyZW50LnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBpZiAoaGlnaGxpZ2h0LnBvaW50ZXJJbnRlcmFjdGlvbikge1xuICAgIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIsIFwiMVwiKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgbGV0IGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnO1xuICBjb25zdCByb3VuZGVkQ29ybmVyID0gMztcbiAgY29uc3QgdW5kZXJsaW5lVGhpY2tuZXNzID0gMjtcbiAgY29uc3Qgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgPSAzO1xuICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gIGxldCBleHRyYSA9IFwiXCI7XG4gIGNvbnN0IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCA9XG4gICAgZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGhpZ2hsaWdodC5pZCk7XG5cbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBsZXQgYW5ub3RhdGlvbk9mZnNldDtcblxuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPVxuICAgICAgcGFyc2VJbnQoXG4gICAgICAgIChyYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSB4T2Zmc2V0KSAvIHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICApICsgMTtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPSBwYXJzZUludChcbiAgICAgIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAvIHdpbmRvdy5pbm5lcldpZHRoICsgMVxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAodXNlU1ZHKSB7XG4gICAgICBjb25zdCBib3JkZXJUaGlja25lc3MgPSAwO1xuICAgICAgaWYgKCFoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdSZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgXCJyZWN0XCJcbiAgICAgICk7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgZmlsbDogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pICFpbXBvcnRhbnQ7IGZpbGwtb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50OyBzdHJva2Utd2lkdGg6IDA7YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNjYWxlID0gc2NhbGU7XG5cbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnhcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnlcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QubGVmdCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInlcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QudG9wIC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmhlaWdodCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC53aWR0aCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdSZWN0KTtcbiAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCA+IHJvdW5kZWRDb3JuZXIgPyByb3VuZGVkQ29ybmVyIDogMDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgbGluZU9mZnNldCkgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAtXG4gICAgICAgICAgICAgIGxpbmVPZmZzZXQpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeSA9XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC1cbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgICAgaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcblxuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGgpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9IGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgeSA9IChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArIGxpbmVPZmZzZXQpICogc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICBjb25zdCByZ2IgPSBNYXRoLnJvdW5kKDB4ZmZmZmZmICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIGNvbnN0IHIgPSByZ2IgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAocmdiID4+IDgpICYgMjU1O1xuICAgICAgICBjb25zdCBiID0gcmdiICYgMjU1O1xuICAgICAgICBleHRyYSA9IGBvdXRsaW5lLWNvbG9yOiByZ2IoJHtyfSwgJHtnfSwgJHtifSk7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICAgIGV4dHJhICs9IGBib3JkZXItYm90dG9tOiAke3VuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlfXB4IHNvbGlkIHJnYmEoJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5yZWRcbiAgICAgICAgICB9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnRgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICBoaWdobGlnaHRBcmVhLnNjYWxlID0gc2NhbGU7XG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC50b3AgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWEpO1xuICAgICAgaWYgKCFERUJVR19WSVNVQUxTICYmIGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIC8vaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDtgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS53aWR0aCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3Qud2lkdGggKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmxlZnQgPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmxlZnQgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5oZWlnaHQgLyAyIC1cbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYUxpbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX1hNTF9OQU1FU1BBQ0UsIFwic3ZnXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc2V0QXR0cmlidXRlKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpO1xuICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWRyk7XG4gIH1cblxuICBjb25zdCBoaWdobGlnaHRCb3VuZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSk7XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnNjYWxlID0gc2NhbGU7XG5cbiAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgb3V0bGluZS1jb2xvcjogbWFnZW50YTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YFxuICAgICk7XG4gIH1cblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgIHRvcDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9O1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC50b3AgKiBzY2FsZX1weGA7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRCb3VuZGluZyk7XG4gIGhpZ2hsaWdodHNDb250YWluZXIuYXBwZW5kKGhpZ2hsaWdodFBhcmVudCk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodFBhcmVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlKHJhbmdlLCBnZXRDc3NTZWxlY3RvciwgY29tcHV0ZUVsZW1lbnRDRkkpIHtcbiAgY29uc3Qgc3RhcnRJc0VsZW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lclxuICAgIDogcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFzdGFydENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgaWYgKHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50XG4gICk7XG4gIGNvbnN0IGVuZElzRWxlbWVudCA9IHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnQgPSBlbmRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lclxuICAgIDogcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFlbmRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBlbmRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihyYW5nZS5lbmRDb250YWluZXIpO1xuICBpZiAoZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBjb21tb25FbGVtZW50QW5jZXN0b3IgPSBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQoXG4gICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICk7XG4gIGlmICghY29tbW9uRWxlbWVudEFuY2VzdG9yKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gTk8gUkFOR0UgQ09NTU9OIEFOQ0VTVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpIHtcbiAgICBjb25zdCByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCA9XG4gICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgPyByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lclxuICAgICAgICA6IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgJiZcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICkge1xuICAgICAgaWYgKGNvbW1vbkVsZW1lbnRBbmNlc3RvciAhPT0gcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCI+Pj4+Pj4gQ09NTU9OIEFOQ0VTVE9SIENPTlRBSU5FUiBESUZGPz8hXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3Rvcihjb21tb25FbGVtZW50QW5jZXN0b3IpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IocmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgcm9vdEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShjb21tb25FbGVtZW50QW5jZXN0b3IpO1xuICBjb25zdCBzdGFydEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShzdGFydENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBlbmRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGxldCBjZmk7XG4gIGlmIChyb290RWxlbWVudENmaSAmJiBzdGFydEVsZW1lbnRDZmkgJiYgZW5kRWxlbWVudENmaSkge1xuICAgIGxldCBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmk7XG4gICAgaWYgKCFzdGFydElzRWxlbWVudCkge1xuICAgICAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBzdGFydEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5zdGFydE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0IDwgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5zdGFydE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmk7XG4gICAgaWYgKCFlbmRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApO1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIGVuZEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA8IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2UuZW5kT2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLmVuZE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNmaSA9XG4gICAgICByb290RWxlbWVudENmaSArXG4gICAgICBcIixcIiArXG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIikgK1xuICAgICAgXCIsXCIgK1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogcmFuZ2UuZW5kT2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiByYW5nZS5zdGFydE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGlkKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFjbGllbnRSZWN0cykgcmV0dXJuO1xuXG4gIHZhciB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gIHZhciBtYXhIZWlnaHQgPSB0b3BDbGllbnRSZWN0LmhlaWdodDtcbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKGNsaWVudFJlY3QudG9wIDwgdG9wQ2xpZW50UmVjdC50b3ApIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0O1xuICAgIGlmIChjbGllbnRSZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICB2YXIgbmV3VG9wID0gdG9wQ2xpZW50UmVjdC50b3A7XG5cbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGJvdW5kaW5nQXJlYXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgICAgICk7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIC8vZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGJvdW5kaW5nQXJlYXMuc25hcHNob3RMZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBib3VuZGluZ0FyZWFzLmxlbmd0aCB8IDA7XG4gICAgICAgIGkgPCBsZW47XG4gICAgICAgIGkgPSAoaSArIDEpIHwgMFxuICAgICAgKSB7XG4gICAgICAgIHZhciBib3VuZGluZ0FyZWEgPSBib3VuZGluZ0FyZWFzW2ldO1xuICAgICAgICBpZiAoTWF0aC5hYnMoYm91bmRpbmdBcmVhLnJlY3QudG9wIC0gKG5ld1RvcCAtIHlPZmZzZXQpKSA8IDMpIHtcbiAgICAgICAgICBuZXdUb3AgKz0gYm91bmRpbmdBcmVhLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGZvdW5kKTtcbiAgfVxuXG4gIHRvcENsaWVudFJlY3QudG9wID0gbmV3VG9wO1xuICB0b3BDbGllbnRSZWN0LmhlaWdodCA9IG1heEhlaWdodDtcblxuICByZXR1cm4gdG9wQ2xpZW50UmVjdDtcbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG5cbiAgcmV0dXJuIGNsaWVudFJlY3RzO1xufVxuXG5mdW5jdGlvbiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBwYXJ0aWFsQ2ZpOiByYW5nZUluZm8uY2ZpLFxuICAgIGRvbVJhbmdlOiB7XG4gICAgICBzdGFydDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uZW5kT2Zmc2V0LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgY2ZpOiBsb2NhdGlvbi5wYXJ0aWFsQ2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgdmFyIHNpemUgPSB7XG4gICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgIGxlZnQ6IGNsaWVudFJlY3RzWzBdLmxlZnQsXG4gICAgd2lkdGg6IGNsaWVudFJlY3RzWzBdLndpZHRoLFxuICAgIHRvcDogY2xpZW50UmVjdHNbMF0udG9wLFxuICAgIGhlaWdodDogY2xpZW50UmVjdHNbMF0uaGVpZ2h0LFxuICB9O1xuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhhbmRsZUJvdW5kcyA9IHtcbiAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0LFxuICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICB0b3A6IGNsaWVudFJlY3QudG9wLFxuICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCb3VuZHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2Nyb2xsTW9kZShmbGFnKSB7XG4gIGlmICghZmxhZykge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX1BBR0lOQVRFRCk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfVxufVxuXG4vKlxuIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7IC8vIElFID49IDk7IG90aGVyIGJyb3dzZXJzXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgLy9hbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTsgLy9oZXJlIHlvdSBkcmF3IHlvdXIgb3duIG1lbnVcbiAgICAgICAgICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy9sZXQgZ2V0Q3NzU2VsZWN0b3IgPSBmdWxsUXVhbGlmaWVkU2VsZWN0b3I7XG4gICAgICAgICAgICBcblx0XHRcdGxldCBzdHIgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRsZXQgc2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCk7XG5cdFx0XHRsZXQgcG9zID0gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8se3JlZDoxMCxncmVlbjo1MCxibHVlOjIzMH0sdHJ1ZSk7XG5cdFx0XHRsZXQgcmV0MiA9IGNyZWF0ZUFubm90YXRpb24ocG9zLmlkKTtcblx0XHRcdFxuICB9LCBmYWxzZSk7XG4gICAgfSBlbHNlIHsgLy8gSUUgPCA5XG4gICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbmNvbnRleHRtZW51JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTtcbiAgICAgICAgICAgIHdpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4qL1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGVjb3JhdGlvbnMsIHJlZ2lzdGVyVGVtcGxhdGVzIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbi8vIFB1YmxpYyBBUEkgdXNlZCBieSB0aGUgbmF2aWdhdG9yLlxud2luZG93LnJlYWRpdW0gPSB7XG4gIC8vIHV0aWxzXG4gIHNjcm9sbFRvSWQ6IHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb246IHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvVGV4dDogc2Nyb2xsVG9UZXh0LFxuICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodDogc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvU3RhcnQ6IHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvRW5kOiBzY3JvbGxUb0VuZCxcbiAgc2V0UHJvcGVydHk6IHNldFByb3BlcnR5LFxuICByZW1vdmVQcm9wZXJ0eTogcmVtb3ZlUHJvcGVydHksXG5cbiAgLy8gc2VsZWN0aW9uXG4gIGdldEN1cnJlbnRTZWxlY3Rpb246IGdldEN1cnJlbnRTZWxlY3Rpb24sXG5cbiAgLy8gZGVjb3JhdGlvblxuICByZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXM6IHJlZ2lzdGVyVGVtcGxhdGVzLFxuICBnZXREZWNvcmF0aW9uczogZ2V0RGVjb3JhdGlvbnMsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIHJlZmxvd2FibGUgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgLy8gU2V0dXBzIHRoZSBgdmlld3BvcnRgIG1ldGEgdGFnIHRvIGRpc2FibGUgem9vbWluZy5cbiAgbGV0IG1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidmlld3BvcnRcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFxuICAgIFwiY29udGVudFwiLFxuICAgIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHNocmluay10by1maXQ9bm9cIlxuICApO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGEpO1xufSk7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwicXVlcnlTZWxlY3RvciIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwibG9jYXRpb25zIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJjc3NTZWxlY3RvciIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlYWRpdW0iLCJyZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXMiLCJtZXRhIiwiaGVhZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4970\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHLHlCQUF5QjtBQUMzSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxrQkFBa0IsZ0RBQWdEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0JBQWdCO0FBQy9DO0FBQ0EsMkJBQTJCLGlDQUFpQztBQUM1RDtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBLHdCQUF3QjtBQUN4Qix1QkFBdUI7QUFDdkIseUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsaUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjtBQUN0QixtQ0FBbUMsT0FBTztBQUMxQywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsR0FBRztBQUN6Qjs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DLHNCQUFzQjtBQUMxRDs7QUFFQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0IsOEJBQThCLFlBQVk7QUFDMUMsd0VBQXdFLFlBQVk7QUFDcEY7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var B=__webpack_module_cache__[Q];if(void 0!==B)return B.exports;var t=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](t,t.exports,__webpack_require__),t.exports}__webpack_require__.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(B,{a:B}),B},__webpack_require__.d=function(Q,B){for(var t in B)__webpack_require__.o(B,t)&&!__webpack_require__.o(Q,t)&&Object.defineProperty(Q,t,{enumerable:!0,get:B[t]})},__webpack_require__.o=function(Q,B){return Object.prototype.hasOwnProperty.call(Q,B)};var __webpack_exports__=__webpack_require__(4970)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var anchor = new TextQuoteAnchor(document.body, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nfunction findFirstVisibleElement(rootElement) {\n for (var i = 0; i < rootElement.children.length; i++) {\n var child = rootElement.children[i];\n\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n var visibleElement = findFirstVisibleElement(child);\n\n if (visibleElement) {\n return visibleElement;\n }\n }\n\n if (rootElement !== document.body && rootElement !== document.documentElement) {\n var visible = isElementVisible(rootElement, undefined);\n\n if (visible) {\n return rootElement;\n }\n }\n\n return undefined;\n} // See computeVisibility_() in r2-navigator-js\n\nfunction isElementVisible(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) {\n return true;\n } else if (!document || !document.documentElement || !document.body) {\n return false;\n }\n\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n // TODO: vertical writing mode\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n }\n\n var scrollLeft = rect.left;\n var currentOffset = scrollElement.scrollLeft;\n return rect.left > 0 && rect.left < pageWidth;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleElement: findFirstVisibleElement\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQ3dDLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxZQUFZO0FBQ3hEO0FBQ0EsTUFBSW1rQixJQUFJLEdBQUczbUIsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixNQUF2QixDQUFYO0FBQ0F3aUIsRUFBQUEsSUFBSSxDQUFDdmlCLFlBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsVUFBMUI7QUFDQXVpQixFQUFBQSxJQUFJLENBQUN2aUIsWUFBTCxDQUNFLFNBREYsRUFFRSw4RkFGRjtBQUlBcEUsRUFBQUEsUUFBUSxDQUFDNG1CLElBQVQsQ0FBY3BpQixXQUFkLENBQTBCbWlCLElBQTFCO0FBQ0QsQ0FURCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LXJlZmxvd2FibGUuanM/MzkyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgc2Nyb2xsVG9SZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SZWN0KHJlY3QpIHtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvU3RhcnQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvU3RhcnRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0VuZCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9FbmRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGggKiBmYWN0b3JcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIGxlZnQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbExlZnQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYIC0gcGFnZVdpZHRoO1xuICB2YXIgbWluT2Zmc2V0ID0gaXNSVEwoKSA/IC0oZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aCkgOiAwO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5tYXgob2Zmc2V0LCBtaW5PZmZzZXQpKTtcbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSByaWdodC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUmlnaHQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYICsgcGFnZVdpZHRoO1xuICB2YXIgbWF4T2Zmc2V0ID0gaXNSVEwoKSA/IDAgOiBkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5taW4ob2Zmc2V0LCBtYXhPZmZzZXQpKTtcbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZ2l2ZW4gbGVmdCBvZmZzZXQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGNsb3NlIGVub3VnaCB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuZnVuY3Rpb24gc2Nyb2xsVG9PZmZzZXQob2Zmc2V0KSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvT2Zmc2V0IFwiICsgb2Zmc2V0KTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IFwiQ2FsbGVkIHNjcm9sbFRvT2Zmc2V0KCkgd2l0aCBzY3JvbGwgbW9kZSBlbmFibGVkLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gcGFnaW5hdGVkIG1vZGUuXCI7XG4gIH1cblxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIC8vIEluIHNvbWUgY2FzZSB0aGUgc2Nyb2xsWCBjYW5ub3QgcmVhY2ggdGhlIHBvc2l0aW9uIHJlc3BlY3RpbmcgdG8gaW5uZXJXaWR0aFxuICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpIC8gcGFnZVdpZHRoO1xuICByZXR1cm4gZGlmZiA+IDAuMDE7XG59XG5cbi8vIFNuYXAgdGhlIG9mZnNldCB0byB0aGUgc2NyZWVuIHdpZHRoIChwYWdlIHdpZHRoKS5cbmZ1bmN0aW9uIHNuYXBPZmZzZXQob2Zmc2V0KSB7XG4gIHZhciB2YWx1ZSA9IG9mZnNldCArIChpc1JUTCgpID8gLTEgOiAxKTtcbiAgcmV0dXJuIHZhbHVlIC0gKHZhbHVlICUgcGFnZVdpZHRoKTtcbn1cblxuLy8gU25hcHMgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRoZSBwYWdlIHdpZHRoLlxuZnVuY3Rpb24gc25hcEN1cnJlbnRPZmZzZXQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNuYXBDdXJyZW50T2Zmc2V0XCIpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIC8vIEFkZHMgaGFsZiBhIHBhZ2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNuYXAgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICB2YXIgZGVsdGEgPSBmYWN0b3IgKiAocGFnZVdpZHRoIC8gMik7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoY3VycmVudE9mZnNldCArIGRlbHRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlRnJvbUxvY2F0b3IobG9jYXRvcikge1xuICBsZXQgdGV4dCA9IGxvY2F0b3IudGV4dDtcbiAgaWYgKCF0ZXh0IHx8ICF0ZXh0LmhpZ2hsaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3IoZG9jdW1lbnQuYm9keSwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQocm9vdEVsZW1lbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZpc2libGVFbGVtZW50ID0gZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQoY2hpbGQpO1xuICAgIGlmICh2aXNpYmxlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIHZpc2libGVFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICByb290RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSAmJlxuICAgIHJvb3RFbGVtZW50ICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3QgdmlzaWJsZSA9IGlzRWxlbWVudFZpc2libGUocm9vdEVsZW1lbnQsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHZpc2libGUpIHtcbiAgICAgIHJldHVybiByb290RWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCAhZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIC8vIFRPRE86IHZlcnRpY2FsIHdyaXRpbmcgbW9kZVxuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBjb25zdCBzY3JvbGxMZWZ0ID0gcmVjdC5sZWZ0O1xuICBsZXQgY3VycmVudE9mZnNldCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgcmV0dXJuIHJlY3QubGVmdCA+IDAgJiYgcmVjdC5sZWZ0IDwgcGFnZVdpZHRoO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudDogZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIHJlZmxvd2FibGUgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzUmVmbG93YWJsZSA9IHRydWU7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgLy8gU2V0dXBzIHRoZSBgdmlld3BvcnRgIG1ldGEgdGFnIHRvIGRpc2FibGUgem9vbWluZy5cbiAgbGV0IG1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidmlld3BvcnRcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFxuICAgIFwiY29udGVudFwiLFxuICAgIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHNocmluay10by1maXQ9bm9cIlxuICApO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGEpO1xufSk7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwicXVlcnlTZWxlY3RvciIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwibG9jYXRpb25zIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJjc3NTZWxlY3RvciIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQiLCJyb290RWxlbWVudCIsInZpc2libGVFbGVtZW50IiwidmlzaWJsZSIsImlzRWxlbWVudFZpc2libGUiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyIsImlzUmVmbG93YWJsZSIsIm1ldGEiLCJoZWFkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var B=__webpack_module_cache__[Q];if(void 0!==B)return B.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(B,{a:B}),B},__webpack_require__.d=function(Q,B){for(var n in B)__webpack_require__.o(B,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:B[n]})},__webpack_require__.o=function(Q,B){return Object.prototype.hasOwnProperty.call(Q,B)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file From 636288ef0b70208f3b5f7d5b26abba742f5d07ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 22 Mar 2022 08:54:34 +0100 Subject: [PATCH 07/59] Add the ContentIterator --- .../readium/r2/shared/publication/Metadata.kt | 2 +- .../r2/shared/publication/Publication.kt | 2 +- .../services/content/ContentIterator.kt | 319 ++++++++++++++++++ .../ContentIteratorService.kt} | 13 +- .../{iterator => content}/Tokenizer.kt | 2 +- .../{iterator => content}/IcuTokenizerTest.kt | 2 +- .../NaiveUnitTextContentTokenizer.kt | 2 +- .../r2/streamer/parser/epub/EpubParser.kt | 2 +- 8 files changed, 335 insertions(+), 9 deletions(-) create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt rename readium/shared/src/main/java/org/readium/r2/shared/publication/services/{iterator/TextIteratorService.kt => content/ContentIteratorService.kt} (95%) rename readium/shared/src/main/java/org/readium/r2/shared/publication/services/{iterator => content}/Tokenizer.kt (98%) rename readium/shared/src/test/java/org/readium/r2/shared/publication/services/{iterator => content}/IcuTokenizerTest.kt (98%) rename readium/shared/src/test/java/org/readium/r2/shared/publication/services/{iterator => content}/NaiveUnitTextContentTokenizer.kt (98%) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt index 75345c66c9..d08ea53329 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt @@ -158,7 +158,7 @@ data class Metadata( */ @IgnoredOnParcel val locale: Locale? by lazy { - languages.firstOrNull()?.let { Locale.forLanguageTag(it) } + languages.firstOrNull()?.let { Locale.forLanguageTag(it.replace("_", "-")) } } /** diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt index f31e8630e4..d4e77142fd 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt @@ -29,7 +29,7 @@ import org.readium.r2.shared.fetcher.Resource import org.readium.r2.shared.publication.epub.listOfAudioClips import org.readium.r2.shared.publication.epub.listOfVideoClips import org.readium.r2.shared.publication.services.* -import org.readium.r2.shared.publication.services.iterator.TextIteratorService +import org.readium.r2.shared.publication.services.content.TextIteratorService import org.readium.r2.shared.publication.services.search.SearchService import org.readium.r2.shared.util.Ref import org.readium.r2.shared.util.mediatype.MediaType diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt new file mode 100644 index 0000000000..c606bcc6e1 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt @@ -0,0 +1,319 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.publication.services.content + +import kotlinx.coroutines.* +import org.jsoup.Jsoup +import org.jsoup.internal.StringUtil +import org.jsoup.nodes.* +import org.jsoup.parser.Parser +import org.jsoup.select.NodeTraversor +import org.jsoup.select.NodeVisitor +import org.readium.r2.shared.fetcher.Resource +import org.readium.r2.shared.fetcher.mapCatching +import org.readium.r2.shared.publication.Link +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.indexOfFirstWithHref +import org.readium.r2.shared.util.Href +import org.readium.r2.shared.util.SuspendingCloseable +import org.readium.r2.shared.util.Try +import org.readium.r2.shared.util.mediatype.MediaType +import org.readium.r2.shared.util.use + +sealed class Content { + data class Audio( + val locator: Locator, + val link: Link, + val extras: Map = emptyMap() + ) : Content() + + data class Image( + val locator: Locator, + val link: Link, + val description: String?, + val extras: Map = emptyMap() + ) : Content() + + data class Text( + val spans: List, + val style: Style = Style.Body, + val extras: Map = emptyMap() + ) : Content() { + data class Span( + val locator: Locator, + val language: String?, + val text: String, + ) + + sealed class Style { + class Heading(val level: Int) : Style() + object Body : Style() + object Callout : Style() + object Caption : Style() + object Footnote: Style() + object Quote: Style() + object ListItem: Style() + } + } +} + +/** + * Iterates through a publication's content. + */ +interface ContentIterator : SuspendingCloseable { + + suspend fun hasNext(): Boolean + + /** + * Retrieves the next piece of content. + * + * @return Null when reaching the end of the publication, or an error in case of failure. + */ + suspend fun next(): Try + + /** + * Closes any resources allocated for the search query, such as a cursor. + * To be called when the user dismisses the search. + */ + override suspend fun close() {} +} + +class PublicationContentIterator( + private val publication: Publication, + start: Locator?, + private val resourceContentIteratorFactories: List +) : ContentIterator { + + private var nextIndex = + start?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } + ?: 0 + + private var currentIterator: ContentIterator? = null + + private suspend fun iterator(): ContentIterator? { + currentIterator?.takeIf { it.hasNext() } + ?.let { return it } + + if (nextIndex >= publication.readingOrder.count()) { + return null + } + + val link = publication.readingOrder[nextIndex] + val locator = publication.locatorFromLink(link) ?: return null + val resource = publication.get(link) + currentIterator = resourceContentIteratorFactories + .firstNotNullOfOrNull { factory -> factory(resource, locator) } + nextIndex += 1 + return currentIterator + } + + override suspend fun hasNext(): Boolean = + iterator()?.hasNext() ?: false + + override suspend fun next(): Try = + iterator()?.next() + ?: Try.success(null) + + override suspend fun close() { + currentIterator?.close() + } +} + +/** + * Creates a [ContentIterator] instance for the given [resource]. + * + * Return null if the resource format is not supported. +*/ +typealias ResourceContentIteratorFactory = + suspend (resource: Resource, locator: Locator) -> ContentIterator? + +class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) : ContentIterator { + companion object { + // FIXME: Custom skipped elements + fun createFactory(): ResourceContentIteratorFactory = { res, locator -> + if (res.link().mediaType.matchesAny(MediaType.HTML, MediaType.XHTML)) + HtmlResourceContentIterator(res, locator) + else null + } + } + private val scope = MainScope() + + override suspend fun close() { + scope.cancel() + } + + private suspend fun openDocument(): Try = + resource.use { res -> + res.readAsString() + .mapCatching { Jsoup.parse(it) } + } + + private fun parseElement(element: Element): List { + val contentParser = ContentParser(locator) + NodeTraversor.traverse(contentParser, element) + return contentParser.content.toList() + } + + private var items: Try, Exception>? = null + + private suspend fun items(): Try, Exception> { + if (items == null) { + items = openDocument() + .map { parseElement(it.body()).toMutableList() } + } + return requireNotNull(items) + } + + override suspend fun hasNext(): Boolean = + items().getOrNull()?.isNotEmpty() + ?: false + + override suspend fun next(): Try = + items().map { it.removeFirstOrNull() } + + private class ContentParser( + private var baseLocator: Locator + ) : NodeVisitor { + val content = mutableListOf() + + private var spansAcc = mutableListOf() + private var textAcc = StringBuilder() + private var wholeRawTextAcc: String = "" + private var rawTextAcc: String = "" + private var currentLanguage: String? = null + private var currentCssSelector: String? = null + private var ignoredNode: Node? = null + + override fun head(node: Node, depth: Int) { + if (ignoredNode != null) return + + if (node.isHidden) { + ignoredNode = node + return + } + + if (node is TextNode) { + val language = node.language + if (currentLanguage != language) { + flushSpan() + currentLanguage = language + } + + rawTextAcc += Parser.unescapeEntities(node.wholeText, false) + appendNormalisedText(node) + + } else if (node is Element) { + val tag = node.normalName() + when { + tag == "br" -> { + flushText() + } + tag == "img" -> { + flushText() + val href = node.attr("src") + .takeIf { it.isNotBlank() } + ?.let { Href(it, baseLocator.href).string } + + if (href != null) { + content.add( + Content.Image( + locator = baseLocator.copy( + locations = Locator.Locations( + otherLocations = buildMap { + put("cssSelector", node.cssSelector() as Any) + } + ) + ), + link = Link(href = href), + description = node.attr("alt").takeIf { it.isNotBlank() }, + ) + ) + } + } + node.isBlock -> { + flushText() + currentCssSelector = node.cssSelector() + } + } + } + } + + override fun tail(node: Node, depth: Int) { + if (ignoredNode == node) { + ignoredNode = null + } + } + + private fun appendNormalisedText(textNode: TextNode) { + val text = Parser.unescapeEntities(textNode.wholeText, false) + StringUtil.appendNormalisedWhitespace(textAcc, text, lastCharIsWhitespace()) + } + + private fun lastCharIsWhitespace(): Boolean = + textAcc.lastOrNull() == ' ' + + private fun flushText() { + flushSpan() + if (spansAcc.isEmpty()) return + + content.add(Content.Text( + spans = spansAcc.toList(), + )) + spansAcc = mutableListOf() + } + + private fun flushSpan() { + var text = textAcc.toString() + + if (text.isNotBlank()) { + if (spansAcc.isEmpty()) { + text = text.trimStart() + } + + spansAcc.add(Content.Text.Span( + locator = baseLocator.copy( + locations = Locator.Locations( + otherLocations = buildMap { + currentCssSelector?.let { + put("cssSelector", it as Any) + } + } + ), + text = Locator.Text( + highlight = rawTextAcc, + before = wholeRawTextAcc.takeLast(50) // FIXME: custom length + ) + ), + language = currentLanguage, + text = text + )) + } + + wholeRawTextAcc += rawTextAcc + rawTextAcc = "" + textAcc.clear() + } + } +} + +// FIXME: Setup ignore conditions +private val Node.isHidden: Boolean get() = false + +private val Node.language: String? get() = + attr("xml:lang").takeUnless { it.isBlank() } + ?: attr("lang").takeUnless { it.isBlank() } + ?: parent()?.language + +private fun Node.parentElement(): Element? = + parent()?.let { + if (it is Element) { + it + } else { + it.parentElement() + } + } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIteratorService.kt similarity index 95% rename from readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt rename to readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIteratorService.kt index 6873244c5e..63987c71d1 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/TextIteratorService.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIteratorService.kt @@ -4,7 +4,7 @@ * available in the top-level LICENSE file of the project. */ -package org.readium.r2.shared.publication.services.iterator +package org.readium.r2.shared.publication.services.content import org.readium.r2.shared.Search import org.readium.r2.shared.fetcher.DefaultResourceContentExtractorFactory @@ -30,10 +30,17 @@ sealed class TextIteratorException private constructor( class ResourceError(message: String, val link: Link, override val cause: Resource.Exception) : TextIteratorException(message, cause) } +/** + * @param text Sanitized text. + * @param language BCP 47 language tag. + * @param extras Additional context data specific to an implementation of a text iterator. + * Readium does not use it. + */ data class Text( val text: String, - val locator: Locator -) + val locator: Locator, +) { +} enum class TextUnit { Character, Word, Sentence, Paragraph diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt similarity index 98% rename from readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt rename to readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt index cb7f73c647..35ddca425a 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/iterator/Tokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt @@ -4,7 +4,7 @@ * available in the top-level LICENSE file of the project. */ -package org.readium.r2.shared.publication.services.iterator +package org.readium.r2.shared.publication.services.content import android.icu.text.BreakIterator import android.os.Build diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/IcuTokenizerTest.kt similarity index 98% rename from readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt rename to readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/IcuTokenizerTest.kt index d0d0ce9ea8..022442760e 100644 --- a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/IcuTokenizerTest.kt +++ b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/IcuTokenizerTest.kt @@ -4,7 +4,7 @@ * available in the top-level LICENSE file of the project. */ -package org.readium.r2.shared.publication.services.iterator +package org.readium.r2.shared.publication.services.content import kotlinx.coroutines.runBlocking import org.junit.Test diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/NaiveUnitTextContentTokenizer.kt similarity index 98% rename from readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt rename to readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/NaiveUnitTextContentTokenizer.kt index 7758b4d6f3..991a97fc6b 100644 --- a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/iterator/NaiveUnitTextContentTokenizer.kt +++ b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/NaiveUnitTextContentTokenizer.kt @@ -4,7 +4,7 @@ * available in the top-level LICENSE file of the project. */ -package org.readium.r2.shared.publication.services.iterator +package org.readium.r2.shared.publication.services.content import kotlinx.coroutines.runBlocking import org.junit.Test diff --git a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt index 0a5ba3d2af..1f4a1c8d0a 100644 --- a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt +++ b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt @@ -21,7 +21,7 @@ import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.asset.FileAsset import org.readium.r2.shared.publication.asset.PublicationAsset import org.readium.r2.shared.publication.encryption.Encryption -import org.readium.r2.shared.publication.services.iterator.DefaultTextIteratorService +import org.readium.r2.shared.publication.services.content.DefaultTextIteratorService import org.readium.r2.shared.publication.services.search.StringSearchService import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.logging.WarningLogger From ef11ff1650b4f30d90f91b7b65ed3b7109256555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 22 Mar 2022 18:23:05 +0100 Subject: [PATCH 08/59] Fix DOM iterator --- .../services/content/ContentIterator.kt | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt index c606bcc6e1..997c1684a3 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt @@ -181,7 +181,7 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) ) : NodeVisitor { val content = mutableListOf() - private var spansAcc = mutableListOf() + private val spansAcc = mutableListOf() private var textAcc = StringBuilder() private var wholeRawTextAcc: String = "" private var rawTextAcc: String = "" @@ -197,17 +197,7 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) return } - if (node is TextNode) { - val language = node.language - if (currentLanguage != language) { - flushSpan() - currentLanguage = language - } - - rawTextAcc += Parser.unescapeEntities(node.wholeText, false) - appendNormalisedText(node) - - } else if (node is Element) { + if (node is Element) { val tag = node.normalName() when { tag == "br" -> { @@ -236,7 +226,9 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) } } node.isBlock -> { - flushText() + spansAcc.clear() + textAcc.clear() + rawTextAcc = "" currentCssSelector = node.cssSelector() } } @@ -247,6 +239,22 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) if (ignoredNode == node) { ignoredNode = null } + + if (node is TextNode) { + val language = node.language + if (currentLanguage != language) { + flushSpan() + currentLanguage = language + } + + rawTextAcc += Parser.unescapeEntities(node.wholeText, false) + appendNormalisedText(node) + + } else if (node is Element) { + if (node.isBlock) { + flushText() + } + } } private fun appendNormalisedText(textNode: TextNode) { @@ -264,7 +272,7 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) content.add(Content.Text( spans = spansAcc.toList(), )) - spansAcc = mutableListOf() + spansAcc.clear() } private fun flushSpan() { From d88a96024c8ff28e911c7be0113413ca92f1d23f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 23 Mar 2022 19:49:49 +0100 Subject: [PATCH 09/59] Improve the `TextToSpeechController` --- .../navigator/tts/TextToSpeechController.kt | 148 +++++++++++++----- .../services/content/ContentIterator.kt | 6 +- .../publication/services/content/Tokenizer.kt | 4 +- 3 files changed, 116 insertions(+), 42 deletions(-) diff --git a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt index 614deea041..8c69346a3e 100644 --- a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt +++ b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt @@ -9,7 +9,10 @@ package org.readium.navigator.tts import android.app.Activity import android.graphics.Color import android.speech.tts.TextToSpeech +import android.speech.tts.TextToSpeech.* import android.speech.tts.UtteranceProgressListener +import android.speech.tts.Voice +import androidx.annotation.ColorInt import kotlinx.coroutines.* import org.readium.r2.navigator.DecorableNavigator import org.readium.r2.navigator.Decoration @@ -17,11 +20,11 @@ import org.readium.r2.navigator.ExperimentalDecorator import org.readium.r2.navigator.Navigator import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.publication.services.iterator.* +import org.readium.r2.shared.publication.services.content.* +import org.readium.r2.shared.util.SuspendingCloseable import org.readium.r2.shared.util.Try -import org.readium.r2.shared.util.flatMap import org.readium.r2.shared.util.getOrElse -import timber.log.Timber +import java.util.* typealias TextToSpeechTry = Try @@ -29,7 +32,9 @@ sealed class TextToSpeechException private constructor( override val message: String, cause: Throwable? = null ) : Exception(message, cause) { - class IteratorError(message: String, override val cause: TextIteratorException) : TextToSpeechException(message, cause) + class IteratorError(message: String, cause: Exception) : TextToSpeechException(message, cause) + class LanguageNotSupported(val locale: Locale) : TextToSpeechException("The language ${locale.toLanguageTag()} is not supported by the TTS engine") + class LanguageMissingData(val locale: Locale) : TextToSpeechException("The language ${locale.toLanguageTag()} requires additional files by the TTS engine") } @OptIn(ExperimentalDecorator::class) @@ -38,64 +43,133 @@ class TextToSpeechController( val publication: Publication, val navigator: Navigator, val listener: Listener, -) { + config: Configuration = Configuration( + defaultLocale = publication.metadata.locale ?: Locale.getDefault() + ) +) : SuspendingCloseable { + data class Configuration( + val defaultLocale: Locale, + @ColorInt val highlightTint: Int = Color.RED, + val rate: Double = 1.0 + ) + interface Listener { fun onError(exception: TextToSpeechException) } private val scope: CoroutineScope = MainScope() - private var textIterator: TextIterator? = null + private var textIterator: ContentIterator? = null private val ttsListener = TtsListener() private val tts: TextToSpeech = TextToSpeech(activity, ttsListener).apply { setOnUtteranceProgressListener(ttsListener) } + var config: Configuration = config + set(value) { + field = value + tts.setSpeechRate(value.rate.toFloat()) + } + + var voice: Voice + get() = tts.voice + set(value) { tts.voice = value } + + val voices: Map> get() = + tts.voices.groupBy(Voice::getLocale) + fun play(start: Locator? = null) = scope.launch { initializeIterator(start) playNextUtterance() } + override suspend fun close() { + textIterator?.close() + scope.cancel() + tts.shutdown() + } + private suspend fun initializeIterator(start: Locator? = null) { - // FIXME: locale - publication.textIterator(unit = TextUnit.Sentence, start = start) - .onSuccess { textIterator = it } - .onFailure { listener.onError(TextToSpeechException.IteratorError("Failed to create the text iterator", it)) } + textIterator = PublicationContentIterator(publication, start = start, resourceContentIteratorFactories = listOf(HtmlResourceContentIterator.createFactory())) } private var count = 0 - private var currentText: Text? = null + private var currentSpan: Content.Text.Span? = null + private var spans = mutableListOf() private suspend fun playNextUtterance() { while (!initialized) { delay(100) } - val iter = textIterator ?: return - - val text = iter.next().getOrElse { - listener.onError(TextToSpeechException.IteratorError("Failed to create the text iterator", it)) - return + val span = spans.removeFirstOrNull() + currentSpan = span + if (span != null) { + if (!span.text.any { it.isLetterOrDigit() }) { + playNextUtterance() + return + } + navigator.go(span.locator) + (navigator as? DecorableNavigator)?.applyDecorations(listOf( + Decoration(id = "tts", locator = span.locator, style = Decoration.Style.Highlight(tint = config.highlightTint)) + ), group = "tts") + + val locale = span.language?.let { Locale.forLanguageTag(it.replace("_", "-")) } + ?: config.defaultLocale + + val localeResult = tts.setLanguage(locale) + if (localeResult >= LANG_AVAILABLE) { + tts.speak(span.text, QUEUE_FLUSH, null, count++.toString()) + } else { + if (localeResult == LANG_MISSING_DATA) { + listener.onError(TextToSpeechException.LanguageMissingData(locale)) + } else { + listener.onError(TextToSpeechException.LanguageNotSupported(locale)) + } + playNextUtterance() + } + + } else { + val iter = textIterator ?: return + + val text = iter.next().getOrElse { + listener.onError( + TextToSpeechException.IteratorError( + "Failed to create the text iterator", + it + ) + ) + return + } ?: return + + if (text is Content.Text) { + spans = text.spans + .flatMap { tokenize(it).getOrThrow() } + .toMutableList() + } + playNextUtterance() } - if (text == null) { - textIterator = null - return - } - - currentText = text - navigator.go(text.locator) - (navigator as? DecorableNavigator)?.applyDecorations(listOf( - Decoration(id = "tts", locator = text.locator, style = Decoration.Style.Highlight(tint = Color.RED)) - ), group = "tts") - tts.speak(text.text, TextToSpeech.QUEUE_FLUSH, null, count++.toString()) } - fun pause() { + private suspend fun tokenize(span: Content.Text.Span): Try, Exception> = + unitTextContentTokenizer(unit = TextUnit.Sentence, locale = span.locale).tokenize(span.text) + .map { + it.map { text -> + Content.Text.Span( + locator = span.locator.copy(text = text), + text = text.highlight ?: "", + language = span.language + ) + } + } + fun pause() { + tts.stop() } - fun skipForward() { + fun skipForward() = scope.launch { + playNextUtterance() } fun skipBackward() { @@ -106,14 +180,6 @@ class TextToSpeechController( private inner class TtsListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { override fun onInit(status: Int) { initialized = true -// val res = tts.isLanguageAvailable(Locale.forLanguageTag("fr-BLA")) -//// if (res == TextToSpeech.LANG_MISSING_DATA) { -// val installIntent = Intent() -// installIntent.action = TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA -// activity.startActivity(installIntent) -//// } else { -//// Timber.e("FRENCH INSTALLED") -//// } } override fun onStart(utteranceId: String?) { @@ -124,14 +190,18 @@ class TextToSpeechController( } override fun onError(utteranceId: String?) { + scope.launch { playNextUtterance() } } + private var wordJob: Job? = null + override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { - var locator = currentText?.locator ?: return + var locator = currentSpan?.locator ?: return locator = locator.copy(text = locator.text.substring(start, end)) navigator.go(locator) -// scope.launch { +// wordJob?.cancel() +// wordJob = scope.launch { // (navigator as? DecorableNavigator)?.applyDecorations( // listOf( // Decoration( diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt index 997c1684a3..2a2631a475 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt @@ -24,6 +24,7 @@ import org.readium.r2.shared.util.SuspendingCloseable import org.readium.r2.shared.util.Try import org.readium.r2.shared.util.mediatype.MediaType import org.readium.r2.shared.util.use +import java.util.* sealed class Content { data class Audio( @@ -48,7 +49,10 @@ sealed class Content { val locator: Locator, val language: String?, val text: String, - ) + ) { + val locale: Locale? get() = + language?.let { Locale.forLanguageTag(it.replace("_", "-")) } + } sealed class Style { class Heading(val level: Int) : Style() diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt index 35ddca425a..8dc0886c30 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt @@ -13,11 +13,11 @@ import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.util.Try import java.util.* -internal interface Tokenizer { +interface Tokenizer { suspend fun tokenize(content: String): TextIteratorTry> } -internal fun unitTextContentTokenizer(unit: TextUnit, locale: Locale?, contextLength: Int = 200): Tokenizer = +fun unitTextContentTokenizer(unit: TextUnit, locale: Locale?, contextLength: Int = 200): Tokenizer = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) IcuTokenizer(locale = locale, unit = unit, contextLength = contextLength) else From f465c13f329a8c89131c1796d46c786f149fea5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 23 Mar 2022 19:50:18 +0100 Subject: [PATCH 10/59] Optimize the resolution of Locators when a CSS selector is provided --- .../navigator/src/main/assets/_scripts/src/utils.js | 11 ++++++++++- .../src/main/assets/readium/scripts/readium-fixed.js | 2 +- .../main/assets/readium/scripts/readium-reflowable.js | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/readium/navigator/src/main/assets/_scripts/src/utils.js b/readium/navigator/src/main/assets/_scripts/src/utils.js index d6d6ff50f2..d15181af95 100644 --- a/readium/navigator/src/main/assets/_scripts/src/utils.js +++ b/readium/navigator/src/main/assets/_scripts/src/utils.js @@ -236,7 +236,16 @@ export function rangeFromLocator(locator) { return null; } try { - let anchor = new TextQuoteAnchor(document.body, text.highlight, { + var root; + let locations = locator.locations; + if (locations && locations.cssSelector) { + root = document.querySelector(locations.cssSelector); + } + if (!root) { + root = document.body; + } + + let anchor = new TextQuoteAnchor(root, text.highlight, { prefix: text.before, suffix: text.after, }); diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js index 7db9d2c675..9e1ec329b3 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var anchor = new TextQuoteAnchor(document.body, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nfunction findFirstVisibleElement(rootElement) {\n for (var i = 0; i < rootElement.children.length; i++) {\n var child = rootElement.children[i];\n\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n var visibleElement = findFirstVisibleElement(child);\n\n if (visibleElement) {\n return visibleElement;\n }\n }\n\n if (rootElement !== document.body && rootElement !== document.documentElement) {\n var visible = isElementVisible(rootElement, undefined);\n\n if (visible) {\n return rootElement;\n }\n }\n\n return undefined;\n} // See computeVisibility_() in r2-navigator-js\n\nfunction isElementVisible(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) {\n return true;\n } else if (!document || !document.documentElement || !document.body) {\n return false;\n }\n\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n // TODO: vertical writing mode\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n }\n\n var scrollLeft = rect.left;\n var currentOffset = scrollElement.scrollLeft;\n return rect.left > 0 && rect.left < pageWidth;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleElement: findFirstVisibleElement\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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IndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1maXhlZC5qcz9kOTlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihkb2N1bWVudC5ib2R5LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudChyb290RWxlbWVudCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGQgPSByb290RWxlbWVudC5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdmlzaWJsZUVsZW1lbnQgPSBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudChjaGlsZCk7XG4gICAgaWYgKHZpc2libGVFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdmlzaWJsZUVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHJvb3RFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5ICYmXG4gICAgcm9vdEVsZW1lbnQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICApIHtcbiAgICBjb25zdCB2aXNpYmxlID0gaXNFbGVtZW50VmlzaWJsZShyb290RWxlbWVudCwgdW5kZWZpbmVkKTtcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgcmV0dXJuIHJvb3RFbGVtZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKGVsZW1lbnQsIGRvbVJlY3QgLyogbnVsbGFibGUgKi8pIHtcbiAgaWYgKHJlYWRpdW0uaXNGaXhlZExheW91dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8ICFkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIENhbm5vdCBiZSByZWxpZWQgdXBvbiwgYmVjYXVzZSB3ZWIgYnJvd3NlciBlbmdpbmUgcmVwb3J0cyBpbnZpc2libGUgd2hlbiBvdXQgb2YgdmlldyBpblxuICAgIC8vIHNjcm9sbGVkIGNvbHVtbnMhXG4gICAgLy8gY29uc3QgdmlzaWJpbGl0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2liaWxpdHlcIik7XG4gICAgLy8gaWYgKHZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIH1cbiAgICBjb25zdCBvcGFjaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3BhY2l0eVwiKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gXCIwXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWN0ID0gZG9tUmVjdCB8fCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgLy8gVE9ETzogdmVydGljYWwgd3JpdGluZyBtb2RlXG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IHNjcm9sbExlZnQgPSByZWN0LmxlZnQ7XG4gIGxldCBjdXJyZW50T2Zmc2V0ID0gc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICByZXR1cm4gcmVjdC5sZWZ0ID4gMCAmJiByZWN0LmxlZnQgPCBwYWdlV2lkdGg7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBsb2dFcnJvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyB0b05hdGl2ZVJlY3QgfSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBUZXh0UmFuZ2UgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZVwiO1xuXG4vLyBQb2x5ZmlsbCBmb3IgQW5kcm9pZCBBUEkgMjZcbmltcG9ydCBtYXRjaEFsbCBmcm9tIFwic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbFwiO1xubWF0Y2hBbGwuc2hpbSgpO1xuXG5jb25zdCBkZWJ1ZyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICBjb25zdCB0ZXh0ID0gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldFNlbGVjdGlvblJlY3QoKTtcbiAgcmV0dXJuIHsgdGV4dCwgcmVjdCB9O1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIGxldCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICByZXR1cm4gdG9OYXRpdmVSZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBoaWdobGlnaHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5IaWdobGlnaHQgPSBoaWdobGlnaHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhbkhpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7XG4gIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8oZG9jdW1lbnQuYm9keSk7XG4gIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgY29uc3Qgc25pcHBldExlbmd0aCA9IDIwMDtcblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGJlZm9yZSB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgZmlyc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGJlZm9yZSA9IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBzbmlwcGV0TGVuZ3RoKSwgc3RhcnQpO1xuICBsZXQgZmlyc3RXb3JkU3RhcnQgPSBiZWZvcmUuc2VhcmNoKC9cXFB7TH1cXHB7TH0vZ3UpO1xuICBpZiAoZmlyc3RXb3JkU3RhcnQgIT09IC0xKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlLnNsaWNlKGZpcnN0V29yZFN0YXJ0ICsgMSk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGFmdGVyIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBsYXN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBhZnRlciA9IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgc25pcHBldExlbmd0aCkpO1xuICBsZXQgbGFzdFdvcmRFbmQgPSBBcnJheS5mcm9tKGFmdGVyLm1hdGNoQWxsKC9cXHB7TH1cXFB7TH0vZ3UpKS5wb3AoKTtcbiAgaWYgKGxhc3RXb3JkRW5kICE9PSB1bmRlZmluZWQgJiYgbGFzdFdvcmRFbmQuaW5kZXggPiAxKSB7XG4gICAgYWZ0ZXIgPSBhZnRlci5zbGljZSgwLCBsYXN0V29yZEVuZC5pbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGlnaGxpZ2h0LCBiZWZvcmUsIGFmdGVyIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBCYXNlIHNjcmlwdCB1c2VkIGJ5IGJvdGggcmVmbG93YWJsZSBhbmQgZml4ZWQgbGF5b3V0IHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9nZXN0dXJlc1wiO1xuaW1wb3J0IHtcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb0VuZCxcbiAgc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9UZXh0LFxuICBzZXRQcm9wZXJ0eSxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUFubm90YXRpb24sXG4gIGNyZWF0ZUhpZ2hsaWdodCxcbiAgZGVzdHJveUhpZ2hsaWdodCxcbiAgZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8sXG4gIGdldFNlbGVjdGlvblJlY3QsXG4gIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCxcbiAgc2V0U2Nyb2xsTW9kZSxcbn0gZnJvbSBcIi4vaGlnaGxpZ2h0XCI7XG5pbXBvcnQgeyBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudCB9IGZyb20gXCIuL2RvbVwiO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGVjb3JhdGlvbnMsIHJlZ2lzdGVyVGVtcGxhdGVzIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbi8vIFB1YmxpYyBBUEkgdXNlZCBieSB0aGUgbmF2aWdhdG9yLlxud2luZG93LnJlYWRpdW0gPSB7XG4gIC8vIHV0aWxzXG4gIHNjcm9sbFRvSWQ6IHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb246IHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvVGV4dDogc2Nyb2xsVG9UZXh0LFxuICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodDogc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvU3RhcnQ6IHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvRW5kOiBzY3JvbGxUb0VuZCxcbiAgc2V0UHJvcGVydHk6IHNldFByb3BlcnR5LFxuICByZW1vdmVQcm9wZXJ0eTogcmVtb3ZlUHJvcGVydHksXG5cbiAgLy8gc2VsZWN0aW9uXG4gIGdldEN1cnJlbnRTZWxlY3Rpb246IGdldEN1cnJlbnRTZWxlY3Rpb24sXG5cbiAgLy8gZGVjb3JhdGlvblxuICByZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXM6IHJlZ2lzdGVyVGVtcGxhdGVzLFxuICBnZXREZWNvcmF0aW9uczogZ2V0RGVjb3JhdGlvbnMsXG5cbiAgLy8gRE9NXG4gIGZpbmRGaXJzdFZpc2libGVFbGVtZW50OiBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudCxcbn07XG5cbi8vIExlZ2FjeSBoaWdobGlnaHRzIEFQSS5cbndpbmRvdy5jcmVhdGVBbm5vdGF0aW9uID0gY3JlYXRlQW5ub3RhdGlvbjtcbndpbmRvdy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG53aW5kb3cuZGVzdHJveUhpZ2hsaWdodCA9IGRlc3Ryb3lIaWdobGlnaHQ7XG53aW5kb3cuZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbztcbndpbmRvdy5nZXRTZWxlY3Rpb25SZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdDtcbndpbmRvdy5yZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQgPSByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQ7XG53aW5kb3cuc2V0U2Nyb2xsTW9kZSA9IHNldFNjcm9sbE1vZGU7XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBTY3JpcHQgdXNlZCBmb3IgZml4ZWQgbGF5b3V0cyByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vaW5kZXhcIjtcblxud2luZG93LnJlYWRpdW0uaXNGaXhlZExheW91dCA9IHRydWU7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwicXVlcnlTZWxlY3RvciIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwibG9jYXRpb25zIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJjc3NTZWxlY3RvciIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQiLCJyb290RWxlbWVudCIsInZpc2libGVFbGVtZW50IiwidmlzaWJsZSIsImlzRWxlbWVudFZpc2libGUiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var B=__webpack_module_cache__[Q];if(void 0!==B)return B.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(B,{a:B}),B},__webpack_require__.d=function(Q,B){for(var n in B)__webpack_require__.o(B,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:B[n]})},__webpack_require__.o=function(Q,B){return Object.prototype.hasOwnProperty.call(Q,B)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nfunction findFirstVisibleElement(rootElement) {\n for (var i = 0; i < rootElement.children.length; i++) {\n var child = rootElement.children[i];\n\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n var visibleElement = findFirstVisibleElement(child);\n\n if (visibleElement) {\n return visibleElement;\n }\n }\n\n if (rootElement !== document.body && rootElement !== document.documentElement) {\n var visible = isElementVisible(rootElement, undefined);\n\n if (visible) {\n return rootElement;\n }\n }\n\n return undefined;\n} // See computeVisibility_() in r2-navigator-js\n\nfunction isElementVisible(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) {\n return true;\n } else if (!document || !document.documentElement || !document.body) {\n return false;\n }\n\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n // TODO: vertical writing mode\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n }\n\n var scrollLeft = rect.left;\n var currentOffset = scrollElement.scrollLeft;\n return rect.left > 0 && rect.left < pageWidth;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleElement: findFirstVisibleElement\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFpQ0EsdUJBQWpDO0FBQ0EzWSxNQUFNLENBQUMyaUIsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBM2lCLE1BQU0sQ0FBQzBpQiwyQkFBUCxHQUFxQ0EsMkJBQXJDO0FBQ0ExaUIsTUFBTSxDQUFDOGlCLGFBQVAsR0FBdUJBLGFBQXZCLEM7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE5aUIsTUFBTSxDQUFDc2pCLE9BQVAsQ0FBZTNFLGFBQWYsR0FBK0IsSUFBL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1maXhlZC5qcz9kOTlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQocm9vdEVsZW1lbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZpc2libGVFbGVtZW50ID0gZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQoY2hpbGQpO1xuICAgIGlmICh2aXNpYmxlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIHZpc2libGVFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICByb290RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSAmJlxuICAgIHJvb3RFbGVtZW50ICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3QgdmlzaWJsZSA9IGlzRWxlbWVudFZpc2libGUocm9vdEVsZW1lbnQsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHZpc2libGUpIHtcbiAgICAgIHJldHVybiByb290RWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCAhZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIC8vIFRPRE86IHZlcnRpY2FsIHdyaXRpbmcgbW9kZVxuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBjb25zdCBzY3JvbGxMZWZ0ID0gcmVjdC5sZWZ0O1xuICBsZXQgY3VycmVudE9mZnNldCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgcmV0dXJuIHJlY3QubGVmdCA+IDAgJiYgcmVjdC5sZWZ0IDwgcGFnZVdpZHRoO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudDogZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIGZpeGVkIGxheW91dHMgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzRml4ZWRMYXlvdXQgPSB0cnVlO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVFbGVtZW50Iiwicm9vdEVsZW1lbnQiLCJ2aXNpYmxlRWxlbWVudCIsInZpc2libGUiLCJpc0VsZW1lbnRWaXNpYmxlIiwiZG9tUmVjdCIsInJlYWRpdW0iLCJlbFN0eWxlIiwiZGlzcGxheSIsIm1hdGNoQWxsIiwic2hpbSIsImdldEN1cnJlbnRTZWxlY3Rpb24iLCJnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCIsImNsZWFuSGlnaGxpZ2h0Iiwic25pcHBldExlbmd0aCIsImZpcnN0V29yZFN0YXJ0IiwibGFzdFdvcmRFbmQiLCJwb3AiLCJyZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsOENBQThDO0FBQ2hGLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEMsdURBQXVELHVCQUF1Qjs7QUFFOUU7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxHQUFHO0FBQ0gsZ0RBQWdEO0FBQ2hELEdBQUc7QUFDSCxzREFBc0Q7QUFDdEQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxJQUFlO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFLO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0Isa0JBQWtCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var B=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](B,B.exports,__webpack_require__),B.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var B in t)__webpack_require__.o(t,B)&&!__webpack_require__.o(Q,B)&&Object.defineProperty(Q,B,{enumerable:!0,get:t[B]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js index 594cf2384a..30c0bbd5db 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var anchor = new TextQuoteAnchor(document.body, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nfunction findFirstVisibleElement(rootElement) {\n for (var i = 0; i < rootElement.children.length; i++) {\n var child = rootElement.children[i];\n\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n var visibleElement = findFirstVisibleElement(child);\n\n if (visibleElement) {\n return visibleElement;\n }\n }\n\n if (rootElement !== document.body && rootElement !== document.documentElement) {\n var visible = isElementVisible(rootElement, undefined);\n\n if (visible) {\n return rootElement;\n }\n }\n\n return undefined;\n} // See computeVisibility_() in r2-navigator-js\n\nfunction isElementVisible(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) {\n return true;\n } else if (!document || !document.documentElement || !document.body) {\n return false;\n }\n\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n // TODO: vertical writing mode\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n }\n\n var scrollLeft = rect.left;\n var currentOffset = scrollElement.scrollLeft;\n return rect.left > 0 && rect.left < pageWidth;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleElement: findFirstVisibleElement\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQ3dDLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxZQUFZO0FBQ3hEO0FBQ0EsTUFBSW1rQixJQUFJLEdBQUczbUIsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixNQUF2QixDQUFYO0FBQ0F3aUIsRUFBQUEsSUFBSSxDQUFDdmlCLFlBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsVUFBMUI7QUFDQXVpQixFQUFBQSxJQUFJLENBQUN2aUIsWUFBTCxDQUNFLFNBREYsRUFFRSw4RkFGRjtBQUlBcEUsRUFBQUEsUUFBUSxDQUFDNG1CLElBQVQsQ0FBY3BpQixXQUFkLENBQTBCbWlCLElBQTFCO0FBQ0QsQ0FURCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LXJlZmxvd2FibGUuanM/MzkyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgc2Nyb2xsVG9SZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SZWN0KHJlY3QpIHtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvU3RhcnQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvU3RhcnRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0VuZCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9FbmRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGggKiBmYWN0b3JcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIGxlZnQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbExlZnQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYIC0gcGFnZVdpZHRoO1xuICB2YXIgbWluT2Zmc2V0ID0gaXNSVEwoKSA/IC0oZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aCkgOiAwO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5tYXgob2Zmc2V0LCBtaW5PZmZzZXQpKTtcbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSByaWdodC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUmlnaHQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYICsgcGFnZVdpZHRoO1xuICB2YXIgbWF4T2Zmc2V0ID0gaXNSVEwoKSA/IDAgOiBkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5taW4ob2Zmc2V0LCBtYXhPZmZzZXQpKTtcbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZ2l2ZW4gbGVmdCBvZmZzZXQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGNsb3NlIGVub3VnaCB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuZnVuY3Rpb24gc2Nyb2xsVG9PZmZzZXQob2Zmc2V0KSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvT2Zmc2V0IFwiICsgb2Zmc2V0KTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IFwiQ2FsbGVkIHNjcm9sbFRvT2Zmc2V0KCkgd2l0aCBzY3JvbGwgbW9kZSBlbmFibGVkLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gcGFnaW5hdGVkIG1vZGUuXCI7XG4gIH1cblxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIC8vIEluIHNvbWUgY2FzZSB0aGUgc2Nyb2xsWCBjYW5ub3QgcmVhY2ggdGhlIHBvc2l0aW9uIHJlc3BlY3RpbmcgdG8gaW5uZXJXaWR0aFxuICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpIC8gcGFnZVdpZHRoO1xuICByZXR1cm4gZGlmZiA+IDAuMDE7XG59XG5cbi8vIFNuYXAgdGhlIG9mZnNldCB0byB0aGUgc2NyZWVuIHdpZHRoIChwYWdlIHdpZHRoKS5cbmZ1bmN0aW9uIHNuYXBPZmZzZXQob2Zmc2V0KSB7XG4gIHZhciB2YWx1ZSA9IG9mZnNldCArIChpc1JUTCgpID8gLTEgOiAxKTtcbiAgcmV0dXJuIHZhbHVlIC0gKHZhbHVlICUgcGFnZVdpZHRoKTtcbn1cblxuLy8gU25hcHMgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRoZSBwYWdlIHdpZHRoLlxuZnVuY3Rpb24gc25hcEN1cnJlbnRPZmZzZXQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNuYXBDdXJyZW50T2Zmc2V0XCIpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIC8vIEFkZHMgaGFsZiBhIHBhZ2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNuYXAgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICB2YXIgZGVsdGEgPSBmYWN0b3IgKiAocGFnZVdpZHRoIC8gMik7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoY3VycmVudE9mZnNldCArIGRlbHRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlRnJvbUxvY2F0b3IobG9jYXRvcikge1xuICBsZXQgdGV4dCA9IGxvY2F0b3IudGV4dDtcbiAgaWYgKCF0ZXh0IHx8ICF0ZXh0LmhpZ2hsaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3IoZG9jdW1lbnQuYm9keSwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQocm9vdEVsZW1lbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZpc2libGVFbGVtZW50ID0gZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQoY2hpbGQpO1xuICAgIGlmICh2aXNpYmxlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIHZpc2libGVFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICByb290RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSAmJlxuICAgIHJvb3RFbGVtZW50ICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3QgdmlzaWJsZSA9IGlzRWxlbWVudFZpc2libGUocm9vdEVsZW1lbnQsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHZpc2libGUpIHtcbiAgICAgIHJldHVybiByb290RWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCAhZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIC8vIFRPRE86IHZlcnRpY2FsIHdyaXRpbmcgbW9kZVxuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBjb25zdCBzY3JvbGxMZWZ0ID0gcmVjdC5sZWZ0O1xuICBsZXQgY3VycmVudE9mZnNldCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgcmV0dXJuIHJlY3QubGVmdCA+IDAgJiYgcmVjdC5sZWZ0IDwgcGFnZVdpZHRoO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudDogZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIHJlZmxvd2FibGUgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzUmVmbG93YWJsZSA9IHRydWU7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgLy8gU2V0dXBzIHRoZSBgdmlld3BvcnRgIG1ldGEgdGFnIHRvIGRpc2FibGUgem9vbWluZy5cbiAgbGV0IG1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidmlld3BvcnRcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFxuICAgIFwiY29udGVudFwiLFxuICAgIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHNocmluay10by1maXQ9bm9cIlxuICApO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGEpO1xufSk7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwicXVlcnlTZWxlY3RvciIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwibG9jYXRpb25zIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJjc3NTZWxlY3RvciIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQiLCJyb290RWxlbWVudCIsInZpc2libGVFbGVtZW50IiwidmlzaWJsZSIsImlzRWxlbWVudFZpc2libGUiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyIsImlzUmVmbG93YWJsZSIsIm1ldGEiLCJoZWFkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var B=__webpack_module_cache__[Q];if(void 0!==B)return B.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(B,{a:B}),B},__webpack_require__.d=function(Q,B){for(var n in B)__webpack_require__.o(B,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:B[n]})},__webpack_require__.o=function(Q,B){return Object.prototype.hasOwnProperty.call(Q,B)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nfunction findFirstVisibleElement(rootElement) {\n for (var i = 0; i < rootElement.children.length; i++) {\n var child = rootElement.children[i];\n\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n var visibleElement = findFirstVisibleElement(child);\n\n if (visibleElement) {\n return visibleElement;\n }\n }\n\n if (rootElement !== document.body && rootElement !== document.documentElement) {\n var visible = isElementVisible(rootElement, undefined);\n\n if (visible) {\n return rootElement;\n }\n }\n\n return undefined;\n} // See computeVisibility_() in r2-navigator-js\n\nfunction isElementVisible(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) {\n return true;\n } else if (!document || !document.documentElement || !document.body) {\n return false;\n }\n\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n // TODO: vertical writing mode\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n }\n\n var scrollLeft = rect.left;\n var currentOffset = scrollElement.scrollLeft;\n return rect.left > 0 && rect.left < pageWidth;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleElement: findFirstVisibleElement\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFpQ0EsdUJBQWpDO0FBQ0EzWSxNQUFNLENBQUMyaUIsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBM2lCLE1BQU0sQ0FBQzBpQiwyQkFBUCxHQUFxQ0EsMkJBQXJDO0FBQ0ExaUIsTUFBTSxDQUFDOGlCLGFBQVAsR0FBdUJBLGFBQXZCLEM7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE5aUIsTUFBTSxDQUFDc2pCLE9BQVAsQ0FBZWEsWUFBZixHQUE4QixJQUE5QjtBQUVBMW1CLFFBQVEsQ0FBQ3dDLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxZQUFZO0FBQ3hEO0FBQ0EsTUFBSW1rQixJQUFJLEdBQUczbUIsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixNQUF2QixDQUFYO0FBQ0F3aUIsRUFBQUEsSUFBSSxDQUFDdmlCLFlBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsVUFBMUI7QUFDQXVpQixFQUFBQSxJQUFJLENBQUN2aUIsWUFBTCxDQUNFLFNBREYsRUFFRSw4RkFGRjtBQUlBcEUsRUFBQUEsUUFBUSxDQUFDNG1CLElBQVQsQ0FBY3BpQixXQUFkLENBQTBCbWlCLElBQTFCO0FBQ0QsQ0FURCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LXJlZmxvd2FibGUuanM/MzkyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgc2Nyb2xsVG9SZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SZWN0KHJlY3QpIHtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvU3RhcnQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvU3RhcnRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0VuZCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9FbmRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGggKiBmYWN0b3JcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIGxlZnQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbExlZnQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYIC0gcGFnZVdpZHRoO1xuICB2YXIgbWluT2Zmc2V0ID0gaXNSVEwoKSA/IC0oZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aCkgOiAwO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5tYXgob2Zmc2V0LCBtaW5PZmZzZXQpKTtcbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSByaWdodC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUmlnaHQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYICsgcGFnZVdpZHRoO1xuICB2YXIgbWF4T2Zmc2V0ID0gaXNSVEwoKSA/IDAgOiBkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5taW4ob2Zmc2V0LCBtYXhPZmZzZXQpKTtcbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZ2l2ZW4gbGVmdCBvZmZzZXQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGNsb3NlIGVub3VnaCB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuZnVuY3Rpb24gc2Nyb2xsVG9PZmZzZXQob2Zmc2V0KSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvT2Zmc2V0IFwiICsgb2Zmc2V0KTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IFwiQ2FsbGVkIHNjcm9sbFRvT2Zmc2V0KCkgd2l0aCBzY3JvbGwgbW9kZSBlbmFibGVkLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gcGFnaW5hdGVkIG1vZGUuXCI7XG4gIH1cblxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIC8vIEluIHNvbWUgY2FzZSB0aGUgc2Nyb2xsWCBjYW5ub3QgcmVhY2ggdGhlIHBvc2l0aW9uIHJlc3BlY3RpbmcgdG8gaW5uZXJXaWR0aFxuICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpIC8gcGFnZVdpZHRoO1xuICByZXR1cm4gZGlmZiA+IDAuMDE7XG59XG5cbi8vIFNuYXAgdGhlIG9mZnNldCB0byB0aGUgc2NyZWVuIHdpZHRoIChwYWdlIHdpZHRoKS5cbmZ1bmN0aW9uIHNuYXBPZmZzZXQob2Zmc2V0KSB7XG4gIHZhciB2YWx1ZSA9IG9mZnNldCArIChpc1JUTCgpID8gLTEgOiAxKTtcbiAgcmV0dXJuIHZhbHVlIC0gKHZhbHVlICUgcGFnZVdpZHRoKTtcbn1cblxuLy8gU25hcHMgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRoZSBwYWdlIHdpZHRoLlxuZnVuY3Rpb24gc25hcEN1cnJlbnRPZmZzZXQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNuYXBDdXJyZW50T2Zmc2V0XCIpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIC8vIEFkZHMgaGFsZiBhIHBhZ2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNuYXAgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICB2YXIgZGVsdGEgPSBmYWN0b3IgKiAocGFnZVdpZHRoIC8gMik7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoY3VycmVudE9mZnNldCArIGRlbHRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlRnJvbUxvY2F0b3IobG9jYXRvcikge1xuICBsZXQgdGV4dCA9IGxvY2F0b3IudGV4dDtcbiAgaWYgKCF0ZXh0IHx8ICF0ZXh0LmhpZ2hsaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIHJvb3Q7XG4gICAgbGV0IGxvY2F0aW9ucyA9IGxvY2F0b3IubG9jYXRpb25zO1xuICAgIGlmIChsb2NhdGlvbnMgJiYgbG9jYXRpb25zLmNzc1NlbGVjdG9yKSB7XG4gICAgICByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihsb2NhdGlvbnMuY3NzU2VsZWN0b3IpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIGxldCBhbmNob3IgPSBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuaGlnaGxpZ2h0LCB7XG4gICAgICBwcmVmaXg6IHRleHQuYmVmb3JlLFxuICAgICAgc3VmZml4OiB0ZXh0LmFmdGVyLFxuICAgIH0pO1xuICAgIHJldHVybiBhbmNob3IudG9SYW5nZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8vIFVzZXIgU2V0dGluZ3MuXG5cbi8vIEZvciBzZXR0aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG59XG5cbi8vIEZvciByZW1vdmluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHkoa2V5KSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcbn1cblxuLy8vIFRvb2xraXRcblxuZXhwb3J0IGZ1bmN0aW9uIGxvZygpIHtcbiAgdmFyIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO1xuICBBbmRyb2lkLmxvZyhtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0Vycm9yKG1lc3NhZ2UpIHtcbiAgQW5kcm9pZC5sb2dFcnJvcihtZXNzYWdlLCBcIlwiLCAwKTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGZhbHNlO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgRE9NUmVjdCBpbnRvIGEgSlNPTiBvYmplY3QgdW5kZXJzdGFuZGFibGUgYnkgdGhlIG5hdGl2ZSBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYXRpdmVSZWN0KHJlY3QpIHtcbiAgY29uc3QgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCB3aWR0aCA9IHJlY3Qud2lkdGggKiBwaXhlbFJhdGlvO1xuICBjb25zdCBoZWlnaHQgPSByZWN0LmhlaWdodCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGxlZnQgPSByZWN0LmxlZnQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCB0b3AgPSByZWN0LnRvcCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQ7XG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gIHJhbmdlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcblxuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZyhgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWApO1xuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgbG9nKFxuICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQge1xuICBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCxcbiAgcmVjdENvbnRhaW5zUG9pbnQsXG4gIHRvTmF0aXZlUmVjdCxcbn0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgbG9nLCBsb2dFcnJvciwgcmFuZ2VGcm9tTG9jYXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBzdHlsZXMgPSBuZXcgTWFwKCk7XG5sZXQgZ3JvdXBzID0gbmV3IE1hcCgpO1xudmFyIGxhc3RHcm91cElkID0gMDtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgc3VwcG9ydGVkIERlY29yYXRpb24gVGVtcGxhdGVzLlxuICpcbiAqIEVhY2ggdGVtcGxhdGUgb2JqZWN0IGlzIGluZGV4ZWQgYnkgdGhlIHN0eWxlIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUZW1wbGF0ZXMobmV3U3R5bGVzKSB7XG4gIHZhciBzdHlsZXNoZWV0ID0gXCJcIjtcblxuICBmb3IgKGNvbnN0IFtpZCwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld1N0eWxlcykpIHtcbiAgICBzdHlsZXMuc2V0KGlkLCBzdHlsZSk7XG4gICAgaWYgKHN0eWxlLnN0eWxlc2hlZXQpIHtcbiAgICAgIHN0eWxlc2hlZXQgKz0gc3R5bGUuc3R5bGVzaGVldCArIFwiXFxuXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlc2hlZXQpIHtcbiAgICBsZXQgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgIHN0eWxlRWxlbWVudC5pbm5lckhUTUwgPSBzdHlsZXNoZWV0O1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBEZWNvcmF0aW9uR3JvdXAgZm9yIHRoZSBnaXZlbiBncm91cCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjb3JhdGlvbnMoZ3JvdXBOYW1lKSB7XG4gIHZhciBncm91cCA9IGdyb3Vwcy5nZXQoZ3JvdXBOYW1lKTtcbiAgaWYgKCFncm91cCkge1xuICAgIGxldCBpZCA9IFwicjItZGVjb3JhdGlvbi1cIiArIGxhc3RHcm91cElkKys7XG4gICAgZ3JvdXAgPSBEZWNvcmF0aW9uR3JvdXAoaWQsIGdyb3VwTmFtZSk7XG4gICAgZ3JvdXBzLnNldChncm91cE5hbWUsIGdyb3VwKTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBjbGljayBldmVudHMgb24gYSBEZWNvcmF0aW9uLlxuICogUmV0dXJucyB3aGV0aGVyIGEgZGVjb3JhdGlvbiBtYXRjaGVkIHRoaXMgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkge1xuICBpZiAoZ3JvdXBzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kVGFyZ2V0KCkge1xuICAgIGZvciAoY29uc3QgW2dyb3VwLCBncm91cENvbnRlbnRdIG9mIGdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwQ29udGVudC5pdGVtcy5yZXZlcnNlKCkpIHtcbiAgICAgICAgaWYgKCFpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBsZXQgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9KU09OKCk7XG4gICAgICAgICAgaWYgKHJlY3RDb250YWluc1BvaW50KHJlY3QsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFksIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cCwgaXRlbSwgZWxlbWVudCwgcmVjdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB0YXJnZXQgPSBmaW5kVGFyZ2V0KCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIEFuZHJvaWQub25EZWNvcmF0aW9uQWN0aXZhdGVkKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGlkOiB0YXJnZXQuaXRlbS5kZWNvcmF0aW9uLmlkLFxuICAgICAgZ3JvdXA6IHRhcmdldC5ncm91cCxcbiAgICAgIHJlY3Q6IHRvTmF0aXZlUmVjdCh0YXJnZXQuaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksXG4gICAgICBjbGljazogY2xpY2tFdmVudCxcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEZWNvcmF0aW9uR3JvdXAgb2JqZWN0IGZyb20gYSB1bmlxdWUgSFRNTCBJRCBhbmQgaXRzIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWNvcmF0aW9uR3JvdXAoZ3JvdXBJZCwgZ3JvdXBOYW1lKSB7XG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIgbGFzdEl0ZW1JZCA9IDA7XG4gIHZhciBjb250YWluZXIgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGRlY29yYXRpb24gdG8gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkKGRlY29yYXRpb24pIHtcbiAgICBsZXQgaWQgPSBncm91cElkICsgXCItXCIgKyBsYXN0SXRlbUlkKys7XG5cbiAgICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKGRlY29yYXRpb24ubG9jYXRvcik7XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgbG9nKFwiQ2FuJ3QgbG9jYXRlIERPTSByYW5nZSBmb3IgZGVjb3JhdGlvblwiLCBkZWNvcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IHsgaWQsIGRlY29yYXRpb24sIHJhbmdlIH07XG4gICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICBsYXlvdXQoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZGVjb3JhdGlvbiB3aXRoIGdpdmVuIElEIGZyb20gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlKGRlY29yYXRpb25JZCkge1xuICAgIGxldCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaS5kZWNvcmF0aW9uLmlkID09PSBkZWNvcmF0aW9uSWQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBudWxsO1xuICAgIGlmIChpdGVtLmNvbnRhaW5lcikge1xuICAgICAgaXRlbS5jb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBpdGVtLmNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoYXQgdGhlIGdpdmVuIGRlY29yYXRpb24gd2FzIG1vZGlmaWVkIGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlKGRlY29yYXRpb24pIHtcbiAgICByZW1vdmUoZGVjb3JhdGlvbi5pZCk7XG4gICAgYWRkKGRlY29yYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGRlY29yYXRpb25zIGZyb20gdGhpcyBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZXMgdGhlIGRlY29yYXRpb24gZWxlbWVudHMuXG4gICAqXG4gICAqIFRvIGJlIGNhbGxlZCBhZnRlciByZWZsb3dpbmcgdGhlIHJlc291cmNlLCBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVlc3RMYXlvdXQoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBsYXlvdXQoaXRlbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExheW91dHMgYSBzaW5nbGUgRGVjb3JhdGlvbiBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gbGF5b3V0KGl0ZW0pIHtcbiAgICBsZXQgZ3JvdXBDb250YWluZXIgPSByZXF1aXJlQ29udGFpbmVyKCk7XG5cbiAgICBsZXQgc3R5bGUgPSBzdHlsZXMuZ2V0KGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaWYgKCFzdHlsZSkge1xuICAgICAgbG9nRXJyb3IoYFVua25vd24gZGVjb3JhdGlvbiBzdHlsZTogJHtpdGVtLmRlY29yYXRpb24uc3R5bGV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgaXRlbS5pZCk7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlXCIsIGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaXRlbUNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIGxldCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gcGFyc2VJbnQoXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgXCJjb2x1bW4tY291bnRcIlxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IHBhZ2VXaWR0aCA9IHZpZXdwb3J0V2lkdGggLyAoY29sdW1uQ291bnQgfHwgMSk7XG4gICAgbGV0IHNjcm9sbGluZ0VsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICAgIGxldCB4T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCB5T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnQoZWxlbWVudCwgcmVjdCwgYm91bmRpbmdSZWN0KSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXG4gICAgICBpZiAoc3R5bGUud2lkdGggPT09IFwid3JhcFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtyZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3ZpZXdwb3J0V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHZpZXdwb3J0V2lkdGgpICogdmlld3BvcnRXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcImJvdW5kc1wiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZGluZ1JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Ym91bmRpbmdSZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJwYWdlXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3BhZ2VXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gcGFnZVdpZHRoKSAqIHBhZ2VXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGJvdW5kaW5nUmVjdCA9IGl0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBsZXQgZWxlbWVudFRlbXBsYXRlO1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBpdGVtLmRlY29yYXRpb24uZWxlbWVudC50cmltKCk7XG4gICAgICBlbGVtZW50VGVtcGxhdGUgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihcbiAgICAgICAgYEludmFsaWQgZGVjb3JhdGlvbiBlbGVtZW50IFwiJHtpdGVtLmRlY29yYXRpb24uZWxlbWVudH1cIjogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3hlc1wiKSB7XG4gICAgICBsZXQgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IHRydWU7XG4gICAgICBsZXQgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICAgICAgaXRlbS5yYW5nZSxcbiAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgKTtcblxuICAgICAgY2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5zb3J0KChyMSwgcjIpID0+IHtcbiAgICAgICAgaWYgKHIxLnRvcCA8IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChyMS50b3AgPiByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudChsaW5lLCBjbGllbnRSZWN0LCBib3VuZGluZ1JlY3QpO1xuICAgICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChsaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgY29uc3QgYm91bmRzID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGJvdW5kcy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIHBvc2l0aW9uRWxlbWVudChib3VuZHMsIGJvdW5kaW5nUmVjdCwgYm91bmRpbmdSZWN0KTtcblxuICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQoYm91bmRzKTtcbiAgICB9XG5cbiAgICBncm91cENvbnRhaW5lci5hcHBlbmQoaXRlbUNvbnRhaW5lcik7XG4gICAgaXRlbS5jb250YWluZXIgPSBpdGVtQ29udGFpbmVyO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgaXRlbUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtYWN0aXZhYmxlPScxJ11cIilcbiAgICApO1xuICAgIGlmIChpdGVtLmNsaWNrYWJsZUVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oaXRlbUNvbnRhaW5lci5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIGNvbnRhaW5lciBlbGVtZW50LCBhZnRlciBtYWtpbmcgc3VyZSBpdCBleGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1aXJlQ29udGFpbmVyKCkge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGdyb3VwSWQpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtZ3JvdXBcIiwgZ3JvdXBOYW1lKTtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ3JvdXAgY29udGFpbmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXJDb250YWluZXIoKSB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhZGQsIHJlbW92ZSwgdXBkYXRlLCBjbGVhciwgaXRlbXMsIHJlcXVlc3RMYXlvdXQgfTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2lsbCByZWxheW91dCBhbGwgdGhlIGRlY29yYXRpb25zIHdoZW4gdGhlIGRvY3VtZW50IGJvZHkgaXMgcmVzaXplZC5cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgbGFzdFNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RTaXplLndpZHRoID09PSBib2R5LmNsaWVudFdpZHRoICYmXG4gICAgICAgIGxhc3RTaXplLmhlaWdodCA9PT0gYm9keS5jbGllbnRIZWlnaHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IGJvZHkuY2xpZW50V2lkdGgsXG4gICAgICAgIGhlaWdodDogYm9keS5jbGllbnRIZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAucmVxdWVzdExheW91dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShib2R5KTtcbiAgfSxcbiAgZmFsc2Vcbik7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4gKiBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2ssIGZhbHNlKTtcbn0pO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgLy8gVGhlcmUncyBhbiBvbi1nb2luZyBzZWxlY3Rpb24sIHRoZSB0YXAgd2lsbCBkaXNtaXNzIGl0IHNvIHdlIGRvbid0IGZvcndhcmQgaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgbGV0IGNsaWNrRXZlbnQgPSB7XG4gICAgZGVmYXVsdFByZXZlbnRlZDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZCxcbiAgICB4OiBldmVudC5jbGllbnRYICogcGl4ZWxSYXRpbyxcbiAgICB5OiBldmVudC5jbGllbnRZICogcGl4ZWxSYXRpbyxcbiAgICB0YXJnZXRFbGVtZW50OiBldmVudC50YXJnZXQub3V0ZXJIVE1MLFxuICAgIGludGVyYWN0aXZlRWxlbWVudDogbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChldmVudC50YXJnZXQpLFxuICB9O1xuXG4gIGlmIChoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTZW5kIHRoZSB0YXAgZGF0YSBvdmVyIHRoZSBKUyBicmlkZ2UgZXZlbiBpZiBpdCdzIGJlZW4gaGFuZGxlZCB3aXRoaW4gdGhlIHdlYiB2aWV3LCBzbyB0aGF0XG4gIC8vIGl0IGNhbiBiZSBwcmVzZXJ2ZWQgYW5kIHVzZWQgYnkgdGhlIHRvb2xraXQgaWYgbmVlZGVkLlxuICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uVGFwKEpTT04uc3RyaW5naWZ5KGNsaWNrRXZlbnQpKTtcblxuICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5cbi8vIFNlZS4gaHR0cHM6Ly9naXRodWIuY29tL0pheVBhbm96L2FyY2hpdGVjdHVyZS90cmVlL3RvdWNoLWhhbmRsaW5nL21pc2MvdG91Y2gtaGFuZGxpbmdcbmZ1bmN0aW9uIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgaW50ZXJhY3RpdmVUYWdzID0gW1xuICAgIFwiYVwiLFxuICAgIFwiYXVkaW9cIixcbiAgICBcImJ1dHRvblwiLFxuICAgIFwiY2FudmFzXCIsXG4gICAgXCJkZXRhaWxzXCIsXG4gICAgXCJpbnB1dFwiLFxuICAgIFwibGFiZWxcIixcbiAgICBcIm9wdGlvblwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzdWJtaXRcIixcbiAgICBcInRleHRhcmVhXCIsXG4gICAgXCJ2aWRlb1wiLFxuICBdO1xuICBpZiAoaW50ZXJhY3RpdmVUYWdzLmluZGV4T2YoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGVkaXRhYmxlIGJ5IHRoZSB1c2VyLlxuICBpZiAoXG4gICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKS50b0xvd2VyQ2FzZSgpICE9IFwiZmFsc2VcIlxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3MgcGFyZW50cyByZWN1cnNpdmVseSBiZWNhdXNlIHRoZSB0b3VjaCBtaWdodCBiZSBmb3IgZXhhbXBsZSBvbiBhbiA8ZW0+IGluc2lkZSBhIDxhPi5cbiAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgIHJldHVybiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vL1xuLy8gIGhpZ2hsaWdodC5qc1xuLy8gIHIyLW5hdmlnYXRvci1rb3RsaW5cbi8vXG4vLyAgT3JnYW5pemVkIGJ5IFRhZWh5dW4gS2ltIG9uIDYvMjcvMTkgZnJvbSByMi1uYXZpZ2F0b3ItanMuXG4vL1xuLy8gIENvcHlyaWdodCAyMDE5IFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHdoaWNoIGlzIGRldGFpbGVkXG4vLyAgaW4gdGhlIExJQ0VOU0UgZmlsZSBwcmVzZW50IGluIHRoZSBwcm9qZWN0IHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBzb3VyY2UgY29kZSBpcyBtYWludGFpbmVkLlxuLy9cblxuY29uc3QgUk9PVF9DTEFTU19SRURVQ0VfTU9USU9OID0gXCJyMi1yZWR1Y2UtbW90aW9uXCI7XG5jb25zdCBST09UX0NMQVNTX05PX0ZPT1ROT1RFUyA9IFwicjItbm8tcG9wdXAtZm9vbm90ZXNcIjtcbmNvbnN0IFBPUFVQX0RJQUxPR19DTEFTUyA9IFwicjItcG9wdXAtZGlhbG9nXCI7XG5jb25zdCBGT09UTk9URVNfQ09OVEFJTkVSX0NMQVNTID0gXCJyMi1mb290bm90ZS1jb250YWluZXJcIjtcbmNvbnN0IEZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNsb3NlXCI7XG5jb25zdCBGT09UTk9URV9GT1JDRV9TSE9XID0gXCJyMi1mb290bm90ZS1mb3JjZS1zaG93XCI7XG5jb25zdCBUVFNfSURfUFJFVklPVVMgPSBcInIyLXR0cy1wcmV2aW91c1wiO1xuY29uc3QgVFRTX0lEX05FWFQgPSBcInIyLXR0cy1uZXh0XCI7XG5jb25zdCBUVFNfSURfU0xJREVSID0gXCJyMi10dHMtc2xpZGVyXCI7XG5jb25zdCBUVFNfSURfQUNUSVZFX1dPUkQgPSBcInIyLXR0cy1hY3RpdmUtd29yZFwiO1xuY29uc3QgVFRTX0lEX0NPTlRBSU5FUiA9IFwicjItdHRzLXR4dFwiO1xuY29uc3QgVFRTX0lEX0lORk8gPSBcInIyLXR0cy1pbmZvXCI7XG5jb25zdCBUVFNfTkFWX0JVVFRPTl9DTEFTUyA9IFwicjItdHRzLWJ1dHRvblwiO1xuY29uc3QgVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UID0gXCJyMi10dHMtc3BlYWtpbmctZWxcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOID0gXCJyMi10dHMtc3BlYWtpbmctdHh0XCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9JTkpFQ1RFRF9QQVJFTlQgPSBcInIyLXR0cy1zcGVha2luZy10eHQtcGFyZW50XCI7XG5jb25zdCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUiA9IFwiUjJfSURfSElHSExJR0hUU19DT05UQUlORVJcIjtcbmNvbnN0IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9JRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9BUkVBXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXCI7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5jb25zdCBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSA9IFtcbiAgUE9QVVBfRElBTE9HX0NMQVNTLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTixcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4sXG4gIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQVJFQSxcbiAgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEsXG4gIFwicmVzaXplLXNlbnNvclwiLFxuXTtcbmNvbnN0IENMQVNTX1BBR0lOQVRFRCA9IFwicjItY3NzLXBhZ2luYXRlZFwiO1xuXG4vL2NvbnN0IElTX0RFViA9IChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldlwiKTtcbmNvbnN0IElTX0RFViA9IGZhbHNlO1xuY29uc3QgX2hpZ2hsaWdodHMgPSBbXTtcblxubGV0IF9oaWdobGlnaHRzQ29udGFpbmVyO1xubGV0IF9hbm5vdGF0aW9uQ29udGFpbmVyO1xubGV0IGxhc3RNb3VzZURvd25YID0gLTE7XG5sZXQgbGFzdE1vdXNlRG93blkgPSAtMTtcbmxldCBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSBmYWxzZTtcblxuY29uc3QgVVNFX1NWRyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjM7XG5jb25zdCBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC40NTtcblxuLy9jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSB7XG4gIGJsdWU6IDEwMCxcbiAgZ3JlZW46IDUwLFxuICByZWQ6IDIzMCxcbn07XG5cbmNvbnN0IEFOTk9UQVRJT05fV0lEVEggPSAxNTtcblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKF93aW4sIGhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gIGlmIChcbiAgICBoaWdobGlnaHRCb3VuZGluZy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSA9PSBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLm91dGxpbmUgPSBcIm5vbmVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgXCJ0cmFuc3BhcmVudFwiLFxuICAgIFwiaW1wb3J0YW50XCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYXMsIGhpZ2hsaWdodCkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgaGlnaGxpZ2h0QXJlYXMpIHtcbiAgICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gICAgY29uc3Qgb3BhY2l0eSA9IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGxcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gIGNvbnN0IGlkID0gaXNTVkdcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlkKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCkgPT4ge1xuICAgICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICAgIH0pO1xuICAgIGlmIChoaWdobGlnaHQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICAgIGlmIChpc1NWRykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbFwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICAvLyAgICBfaGlnaGxpZ2h0cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgLy8gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGEuc2VsZWN0aW9uSW5mbykpXG4gIC8vICAgICAgICByZXR1cm4gYS5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGggPCBiLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aFxuICAvLyAgICB9KVxuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcInRvdWNoc3RhcnRcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LmlkLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3VuZEhpZ2hsaWdodC5pZC5pbmNsdWRlcyhcIlIyX0FOTk9UQVRJT05fXCIpKTtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZXVwXCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCB0b3VjaGVkUG9zaXRpb24gPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVkUG9zaXRpb24sXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBsZXQgdG9QcmVzZXJ2ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW107XG4gICAgICAgICAgdG9DaGVjay5wdXNoKHRvUHJlc2VydmUpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRvQ2hlY2ssIHRvQWRkKTtcbiAgICAgICAgICBjaGVja092ZXJsYXBzKHRvQ2hlY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gY2hlY2tPdmVybGFwcyhyZWN0cykge1xuICBjb25zdCBzdGlsbE92ZXJsYXBpbmdSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJlY3QxIG9mIHJlY3RzKSB7XG4gICAgZm9yIChjb25zdCByZWN0MiBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhczEgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QxKSA+PSAwO1xuICAgICAgY29uc3QgaGFzMiA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDIpID49IDA7XG4gICAgICBpZiAoIWhhczEgfHwgIWhhczIpIHtcbiAgICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgICBpZiAoIWhhczEpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWhhczIpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiBvdmVybGFwIC0tLVwiKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMSBUT1A6JHtyZWN0MS50b3B9IEJPVFRPTToke3JlY3QxLmJvdHRvbX0gTEVGVDoke3JlY3QxLmxlZnR9IFJJR0hUOiR7cmVjdDEucmlnaHR9IFdJRFRIOiR7cmVjdDEud2lkdGh9IEhFSUdIVDoke3JlY3QxLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMiBUT1A6JHtyZWN0Mi50b3B9IEJPVFRPTToke3JlY3QyLmJvdHRvbX0gTEVGVDoke3JlY3QyLmxlZnR9IFJJR0hUOiR7cmVjdDIucmlnaHR9IFdJRFRIOiR7cmVjdDIud2lkdGh9IEhFSUdIVDoke3JlY3QyLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB4T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWChyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB4T3ZlcmxhcDogJHt4T3ZlcmxhcH1gKTtcbiAgICAgICAgICBjb25zdCB5T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWShyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB5T3ZlcmxhcDogJHt5T3ZlcmxhcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5sb2coYENMSUVOVCBSRUNUOiBvdmVybGFwcyAke3N0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIH1cbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgY29uc3QgcmVjdCA9IHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAocmFuZ2UsIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMpIHtcbiAgY29uc3QgcmFuZ2VDbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG4gIHJldHVybiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gICAgcmFuZ2VDbGllbnRSZWN0cyxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgY2xpZW50UmVjdHMsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY2hlY2tPdmVybGFwcyhuZXdSZWN0cyk7XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGVkKGRvY3VtZW50KSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX1BBR0lOQVRFRClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCkge1xuICBpZiAoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgaWYgKCFib2R5RXZlbnRMaXN0ZW5lcnNTZXQpIHtcbiAgICAgIGJvZHlFdmVudExpc3RlbmVyc1NldCA9IHRydWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vkb3duXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGxhc3RNb3VzZURvd25YID0gZXYuY2xpZW50WDtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWSA9IGV2LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNldXBcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blggLSBldi5jbGllbnRYKSA8IDMgJiZcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25ZIC0gZXYuY2xpZW50WSkgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlbW92ZVwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJ0b3VjaGVuZFwiLFxuICAgICAgICBmdW5jdGlvbiB0b3VjaEVuZChlKSB7XG4gICAgICAgICAgcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUik7XG5cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChfaGlnaGxpZ2h0c0NvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gX2hpZ2hsaWdodHNDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGhpZGVBbGxoaWdobGlnaHRzKCkge1xuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveUFsbGhpZ2hsaWdodHMoKSB7XG4gIGhpZGVBbGxoaWdobGlnaHRzKCk7XG4gIF9oaWdobGlnaHRzLnNwbGljZSgwLCBfaGlnaGxpZ2h0cy5sZW5ndGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzdHJveUhpZ2hsaWdodChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBsZXQgX2RvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGhpZ2hsaWdodCAmJiBpID49IDAgJiYgaSA8IF9oaWdobGlnaHRzLmxlbmd0aCkge1xuICAgIF9oaWdobGlnaHRzLnNwbGljZShpLCAxKTtcbiAgfVxuICBjb25zdCBoaWdobGlnaHRDb250YWluZXIgPSBfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaGlnaGxpZ2h0Q29udGFpbmVyKSB7XG4gICAgaGlnaGxpZ2h0Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2ZpVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChlbGVtZW50LCBjaGlsZCkge1xuICBsZXQgZm91bmQgPSAtMTtcbiAgbGV0IHRleHROb2RlSW5kZXggPSAtMTtcbiAgbGV0IHByZXZpb3VzV2FzRWxlbWVudCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBjb25zdCBpc1RleHQgPSBpc0NmaVRleHROb2RlKGNoaWxkTm9kZSk7XG4gICAgaWYgKGlzVGV4dCB8fCBwcmV2aW91c1dhc0VsZW1lbnQpIHtcbiAgICAgIHRleHROb2RlSW5kZXggKz0gMjtcbiAgICB9XG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgaWYgKGNoaWxkTm9kZSA9PT0gY2hpbGQpIHtcbiAgICAgICAgZm91bmQgPSB0ZXh0Tm9kZUluZGV4O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcHJldmlvdXNXYXNFbGVtZW50ID0gY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChub2RlMSwgbm9kZTIpIHtcbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMSA9PT0gbm9kZTIpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMS5jb250YWlucyhub2RlMikpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMi5jb250YWlucyhub2RlMSkpIHtcbiAgICByZXR1cm4gbm9kZTI7XG4gIH1cbiAgY29uc3Qgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBsZXQgcGFyZW50ID0gbm9kZTEucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgY29uc3Qgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBwYXJlbnQgPSBub2RlMi5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBsZXQgY29tbW9uQW5jZXN0b3IgPSBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoXG4gICAgKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH1cbiAgKTtcbiAgaWYgKCFjb21tb25BbmNlc3Rvcikge1xuICAgIGNvbW1vbkFuY2VzdG9yID0gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKChub2RlMkVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMkVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbW9uQW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIGZ1bGxRdWFsaWZpZWRTZWxlY3Rvcihub2RlKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZU5hbWU7XG4gIH1cbiAgLy9yZXR1cm4gY3NzUGF0aChub2RlLCBqdXN0U2VsZWN0b3IpO1xuICByZXR1cm4gY3NzUGF0aChub2RlLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIENPTExBUFNFRC5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYXdUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuVGV4dCA9IHJhd1RleHQudHJpbSgpLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhblRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFRFWFQgRU1QVFkuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZUluZm8gPSBjb252ZXJ0UmFuZ2UocmFuZ2UsIGZ1bGxRdWFsaWZpZWRTZWxlY3RvciwgY29tcHV0ZUNGSSk7XG4gIGlmICghcmFuZ2VJbmZvKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFJBTkdFIElORk8gRkFJTD8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoSVNfREVWICYmIERFQlVHX1ZJU1VBTFMpIHtcbiAgICBjb25zdCByZXN0b3JlZFJhbmdlID0gY29udmVydFJhbmdlSW5mbyh3aW4uZG9jdW1lbnQsIHJhbmdlSW5mbyk7XG4gICAgaWYgKHJlc3RvcmVkUmFuZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCA9PT0gcmFuZ2Uuc3RhcnRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQgPT09IHJhbmdlLmVuZE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRUQgT0tBWSAoZGV2IGNoZWNrKS5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFIEZBSUwgKGRldiBjaGVjaykuXCIpO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJTRUxFQ1RJT05cIixcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIk9SREVSRUQgUkFOR0UgRlJPTSBTRUxFQ1RJT05cIixcbiAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlJFU1RPUkVEIFJBTkdFXCIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0FOTk9UIFJFU1RPUkUgU0VMRUNUSU9OIFJBTkdFID8/IVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbyksXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiByYXdUZXh0LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrQmxhY2tsaXN0ZWQoZWwpIHtcbiAgbGV0IGJsYWNrbGlzdGVkSWQ7XG4gIGNvbnN0IGlkID0gZWwuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG4gIGlmIChpZCAmJiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSS5pbmRleE9mKGlkKSA+PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIElEOiBcIiArIGlkKTtcbiAgICBibGFja2xpc3RlZElkID0gaWQ7XG4gIH1cbiAgbGV0IGJsYWNrbGlzdGVkQ2xhc3M7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSkge1xuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoaXRlbSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBDTEFTUzogXCIgKyBpdGVtKTtcbiAgICAgIGJsYWNrbGlzdGVkQ2xhc3MgPSBpdGVtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChibGFja2xpc3RlZElkIHx8IGJsYWNrbGlzdGVkQ2xhc3MpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzUGF0aChub2RlLCBvcHRpbWl6ZWQpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBzdGVwcyA9IFtdO1xuICBsZXQgY29udGV4dE5vZGUgPSBub2RlO1xuICB3aGlsZSAoY29udGV4dE5vZGUpIHtcbiAgICBjb25zdCBzdGVwID0gX2Nzc1BhdGhTdGVwKGNvbnRleHROb2RlLCAhIW9wdGltaXplZCwgY29udGV4dE5vZGUgPT09IG5vZGUpO1xuICAgIGlmICghc3RlcCkge1xuICAgICAgYnJlYWs7IC8vIEVycm9yIC0gYmFpbCBvdXQgZWFybHkuXG4gICAgfVxuICAgIHN0ZXBzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgaWYgKHN0ZXAub3B0aW1pemVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29udGV4dE5vZGUgPSBjb250ZXh0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIHN0ZXBzLnJldmVyc2UoKTtcbiAgcmV0dXJuIHN0ZXBzLmpvaW4oXCIgPiBcIik7XG59XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9tYXN0ZXIvU291cmNlL2RldnRvb2xzL2Zyb250X2VuZC9jb21wb25lbnRzL0RPTVByZXNlbnRhdGlvblV0aWxzLmpzIzMxNlxuZnVuY3Rpb24gX2Nzc1BhdGhTdGVwKG5vZGUsIG9wdGltaXplZCwgaXNUYXJnZXROb2RlKSB7XG4gIGZ1bmN0aW9uIHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMobmQpIHtcbiAgICBjb25zdCBjbGFzc0F0dHJpYnV0ZSA9IG5kLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIGlmICghY2xhc3NBdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NBdHRyaWJ1dGVcbiAgICAgIC5zcGxpdCgvXFxzKy9nKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcCgobm0pID0+IHtcbiAgICAgICAgLy8gVGhlIHByZWZpeCBpcyByZXF1aXJlZCB0byBzdG9yZSBcIl9fcHJvdG9fX1wiIGluIGEgb2JqZWN0LWJhc2VkIG1hcC5cbiAgICAgICAgcmV0dXJuIFwiJFwiICsgbm07XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlkU2VsZWN0b3IoaWRkKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZCk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRlbnQpIHtcbiAgICBpZiAoaXNDU1NJZGVudGlmaWVyKGlkZW50KSkge1xuICAgICAgcmV0dXJuIGlkZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEVzY2FwZUZpcnN0ID0gL14oPzpbMC05XXwtWzAtOS1dPykvLnRlc3QoaWRlbnQpO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlkZW50Lmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGlkZW50LnJlcGxhY2UoLy4vZywgZnVuY3Rpb24gKGMsIGlpKSB7XG4gICAgICByZXR1cm4gKHNob3VsZEVzY2FwZUZpcnN0ICYmIGlpID09PSAwKSB8fCAhaXNDU1NJZGVudENoYXIoYylcbiAgICAgICAgPyBlc2NhcGVBc2NpaUNoYXIoYywgaWkgPT09IGxhc3RJbmRleClcbiAgICAgICAgOiBjO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlQXNjaWlDaGFyKGMsIGlzTGFzdCkge1xuICAgIHJldHVybiBcIlxcXFxcIiArIHRvSGV4Qnl0ZShjKSArIChpc0xhc3QgPyBcIlwiIDogXCIgXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9IZXhCeXRlKGMpIHtcbiAgICBsZXQgaGV4Qnl0ZSA9IGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gICAgaWYgKGhleEJ5dGUubGVuZ3RoID09PSAxKSB7XG4gICAgICBoZXhCeXRlID0gXCIwXCIgKyBoZXhCeXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGV4Qnl0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRDaGFyKGMpIHtcbiAgICBpZiAoL1thLXpBLVowLTlfLV0vLnRlc3QoYykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApID49IDB4YTA7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50aWZpZXIodmFsdWUpIHtcbiAgICByZXR1cm4gL14tP1thLXpBLVpfXVthLXpBLVowLTlfLV0qJC8udGVzdCh2YWx1ZSk7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBlbGVtZW50ID0gbm9kZTtcblxuICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cbiAgaWYgKG9wdGltaXplZCkge1xuICAgIGlmIChpZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogaWRTZWxlY3RvcihpZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImJvZHlcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJoZWFkXCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaHRtbFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBsb3dlckNhc2VOYW1lLCAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBub2RlTmFtZSA9IGxvd2VyQ2FzZU5hbWU7IC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7XG4gIGlmIChpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUgKyBpZFNlbGVjdG9yKGlkKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50IHx8IHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhlbGVtZW50KTtcblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICBpZiAocHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmVlZHNDbGFzc05hbWVzID0gZmFsc2U7XG4gIGxldCBuZWVkc050aENoaWxkID0gZmFsc2U7XG4gIGxldCBvd25JbmRleCA9IC0xO1xuICBsZXQgZWxlbWVudEluZGV4ID0gLTE7XG4gIGNvbnN0IHNpYmxpbmdzID0gcGFyZW50LmNoaWxkcmVuO1xuXG4gIGZvciAoXG4gICAgbGV0IGkgPSAwO1xuICAgIChvd25JbmRleCA9PT0gLTEgfHwgIW5lZWRzTnRoQ2hpbGQpICYmIGkgPCBzaWJsaW5ncy5sZW5ndGg7XG4gICAgKytpXG4gICkge1xuICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICBpZiAoc2libGluZy5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBlbGVtZW50SW5kZXggKz0gMTtcbiAgICBpZiAoc2libGluZyA9PT0gbm9kZSkge1xuICAgICAgb3duSW5kZXggPSBlbGVtZW50SW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNpYmxpbmcubm9kZU5hbWVJbkNvcnJlY3RDYXNlKClcbiAgICBjb25zdCBzaWJsaW5nTmFtZSA9XG4gICAgICAoc2libGluZy5sb2NhbE5hbWUgJiYgc2libGluZy5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIHNpYmxpbmcubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc2libGluZ05hbWUgIT09IG5vZGVOYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmVlZHNDbGFzc05hbWVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IG93bkNsYXNzTmFtZXMgPSBbXTtcbiAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBvd25DbGFzc05hbWVzLnB1c2goYXJySXRlbSk7XG4gICAgfSk7XG4gICAgbGV0IG93bkNsYXNzTmFtZUNvdW50ID0gb3duQ2xhc3NOYW1lcy5sZW5ndGg7XG5cbiAgICBpZiAob3duQ2xhc3NOYW1lQ291bnQgPT09IDApIHtcbiAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhzaWJsaW5nKTtcbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIGlmIChzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc2libGluZ0NsYXNzIG9mIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIGNvbnN0IGluZCA9IG93bkNsYXNzTmFtZXMuaW5kZXhPZihzaWJsaW5nQ2xhc3MpO1xuICAgICAgaWYgKGluZCA8IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG93bkNsYXNzTmFtZXMuc3BsaWNlKGluZCwgMSk7IC8vIGRlbGV0ZSBvd25DbGFzc05hbWVzW3NpYmxpbmdDbGFzc107XG5cbiAgICAgIGlmICghLS1vd25DbGFzc05hbWVDb3VudCkge1xuICAgICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdCA9IG5vZGVOYW1lO1xuICBpZiAoXG4gICAgaXNUYXJnZXROb2RlICYmXG4gICAgbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIilcbiAgKSB7XG4gICAgcmVzdWx0ICs9ICdbdHlwZT1cIicgKyBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgKyAnXCJdJztcbiAgfVxuICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgIHJlc3VsdCArPSBcIjpudGgtY2hpbGQoXCIgKyAob3duSW5kZXggKyAxKSArIFwiKVwiO1xuICB9IGVsc2UgaWYgKG5lZWRzQ2xhc3NOYW1lcykge1xuICAgIGZvciAoY29uc3QgcHJlZml4ZWROYW1lIG9mIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICByZXN1bHQgKz0gXCIuXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQocHJlZml4ZWROYW1lLnN1YnN0cigxKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpbWl6ZWQ6IGZhbHNlLFxuICAgIHZhbHVlOiByZXN1bHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDRkkobm9kZSkge1xuICAvLyBUT0RPOiBoYW5kbGUgY2hhcmFjdGVyIHBvc2l0aW9uIGluc2lkZSB0ZXh0IG5vZGVcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBjZmkgPSBcIlwiO1xuXG4gIGxldCBjdXJyZW50RWxlbWVudCA9IG5vZGU7XG4gIHdoaWxlIChcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlICYmXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgKSB7XG4gICAgY29uc3QgYmxhY2tsaXN0ZWQgPSBjaGVja0JsYWNrbGlzdGVkKGN1cnJlbnRFbGVtZW50KTtcbiAgICBpZiAoIWJsYWNrbGlzdGVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbjtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudEluZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuW2ldKSB7XG4gICAgICAgICAgY3VycmVudEVsZW1lbnRJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudEluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXggPSAoY3VycmVudEVsZW1lbnRJbmRleCArIDEpICogMjtcbiAgICAgICAgY2ZpID1cbiAgICAgICAgICBjZmlJbmRleCArXG4gICAgICAgICAgKGN1cnJlbnRFbGVtZW50LmlkID8gXCJbXCIgKyBjdXJyZW50RWxlbWVudC5pZCArIFwiXVwiIDogXCJcIikgK1xuICAgICAgICAgIChjZmkubGVuZ3RoID8gXCIvXCIgKyBjZmkgOiBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIFwiL1wiICsgY2ZpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlSGlnaGxpZ2h0KGxvY2F0aW9ucywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbiwgdHlwZSkge1xuICBjb25zdCByYW5nZUluZm8gPSBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb25zKTtcbiAgY29uc3QgdW5pcXVlU3RyID0gYCR7cmFuZ2VJbmZvLmNmaX0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5zdGFydE9mZnNldH0ke3JhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLmVuZE9mZnNldH1gO1xuXG4gIGNvbnN0IGhhc2ggPSByZXF1aXJlKFwiaGFzaC5qc1wiKTtcbiAgY29uc3Qgc2hhMjU2SGV4ID0gaGFzaC5zaGEyNTYoKS51cGRhdGUodW5pcXVlU3RyKS5kaWdlc3QoXCJoZXhcIik7XG5cbiAgdmFyIGlkO1xuICBpZiAodHlwZSA9PSBJRF9ISUdITElHSFRTX0NPTlRBSU5FUikge1xuICAgIGlkID0gXCJSMl9ISUdITElHSFRfXCIgKyBzaGEyNTZIZXg7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBcIlIyX0FOTk9UQVRJT05fXCIgKyBzaGEyNTZIZXg7XG4gIH1cblxuICBkZXN0cm95SGlnaGxpZ2h0KGlkKTtcblxuICBjb25zdCBoaWdobGlnaHQgPSB7XG4gICAgY29sb3I6IGNvbG9yID8gY29sb3IgOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgaWQsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIHJhbmdlSW5mbyxcbiAgfTtcbiAgX2hpZ2hsaWdodHMucHVzaChoaWdobGlnaHQpO1xuICBjcmVhdGVIaWdobGlnaHREb20oXG4gICAgd2luZG93LFxuICAgIGhpZ2hsaWdodCxcbiAgICB0eXBlID09IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uKSB7XG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIHNlbGVjdGlvbkluZm8sXG4gICAgY29sb3IsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uKGlkKSB7XG4gIGxldCBpID0gLTE7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChpID09IF9oaWdobGlnaHRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gIHZhciBsb2NhdGlvbnMgPSB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24oaGlnaGxpZ2h0LnJhbmdlSW5mbyksXG4gIH07XG5cbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgbG9jYXRpb25zLFxuICAgIGhpZ2hsaWdodC5jb2xvcixcbiAgICB0cnVlLFxuICAgIElEX0FOTk9UQVRJT05fQ09OVEFJTkVSXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodERvbSh3aW4sIGhpZ2hsaWdodCwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2NhbGUgPVxuICAgIDEgL1xuICAgICh3aW4uUkVBRElVTTIgJiYgd2luLlJFQURJVU0yLmlzRml4ZWRMYXlvdXRcbiAgICAgID8gd2luLlJFQURJVU0yLmZ4bFZpZXdwb3J0U2NhbGVcbiAgICAgIDogMSk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBoaWdobGlnaHRzQ29udGFpbmVyID0gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpO1xuICBjb25zdCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBoaWdobGlnaHQuaWQpO1xuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUik7XG5cbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgaGlnaGxpZ2h0UGFyZW50LnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBpZiAoaGlnaGxpZ2h0LnBvaW50ZXJJbnRlcmFjdGlvbikge1xuICAgIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIsIFwiMVwiKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgbGV0IGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnO1xuICBjb25zdCByb3VuZGVkQ29ybmVyID0gMztcbiAgY29uc3QgdW5kZXJsaW5lVGhpY2tuZXNzID0gMjtcbiAgY29uc3Qgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgPSAzO1xuICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gIGxldCBleHRyYSA9IFwiXCI7XG4gIGNvbnN0IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCA9XG4gICAgZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGhpZ2hsaWdodC5pZCk7XG5cbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBsZXQgYW5ub3RhdGlvbk9mZnNldDtcblxuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPVxuICAgICAgcGFyc2VJbnQoXG4gICAgICAgIChyYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSB4T2Zmc2V0KSAvIHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICApICsgMTtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPSBwYXJzZUludChcbiAgICAgIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAvIHdpbmRvdy5pbm5lcldpZHRoICsgMVxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAodXNlU1ZHKSB7XG4gICAgICBjb25zdCBib3JkZXJUaGlja25lc3MgPSAwO1xuICAgICAgaWYgKCFoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdSZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgXCJyZWN0XCJcbiAgICAgICk7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgZmlsbDogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pICFpbXBvcnRhbnQ7IGZpbGwtb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50OyBzdHJva2Utd2lkdGg6IDA7YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNjYWxlID0gc2NhbGU7XG5cbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnhcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnlcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QubGVmdCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInlcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QudG9wIC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmhlaWdodCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC53aWR0aCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdSZWN0KTtcbiAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCA+IHJvdW5kZWRDb3JuZXIgPyByb3VuZGVkQ29ybmVyIDogMDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgbGluZU9mZnNldCkgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAtXG4gICAgICAgICAgICAgIGxpbmVPZmZzZXQpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeSA9XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC1cbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgICAgaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcblxuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGgpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9IGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgeSA9IChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArIGxpbmVPZmZzZXQpICogc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICBjb25zdCByZ2IgPSBNYXRoLnJvdW5kKDB4ZmZmZmZmICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIGNvbnN0IHIgPSByZ2IgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAocmdiID4+IDgpICYgMjU1O1xuICAgICAgICBjb25zdCBiID0gcmdiICYgMjU1O1xuICAgICAgICBleHRyYSA9IGBvdXRsaW5lLWNvbG9yOiByZ2IoJHtyfSwgJHtnfSwgJHtifSk7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICAgIGV4dHJhICs9IGBib3JkZXItYm90dG9tOiAke3VuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlfXB4IHNvbGlkIHJnYmEoJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5yZWRcbiAgICAgICAgICB9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnRgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICBoaWdobGlnaHRBcmVhLnNjYWxlID0gc2NhbGU7XG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC50b3AgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWEpO1xuICAgICAgaWYgKCFERUJVR19WSVNVQUxTICYmIGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIC8vaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDtgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS53aWR0aCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3Qud2lkdGggKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmxlZnQgPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmxlZnQgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5oZWlnaHQgLyAyIC1cbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYUxpbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX1hNTF9OQU1FU1BBQ0UsIFwic3ZnXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc2V0QXR0cmlidXRlKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpO1xuICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWRyk7XG4gIH1cblxuICBjb25zdCBoaWdobGlnaHRCb3VuZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSk7XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnNjYWxlID0gc2NhbGU7XG5cbiAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgb3V0bGluZS1jb2xvcjogbWFnZW50YTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YFxuICAgICk7XG4gIH1cblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgIHRvcDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9O1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC50b3AgKiBzY2FsZX1weGA7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRCb3VuZGluZyk7XG4gIGhpZ2hsaWdodHNDb250YWluZXIuYXBwZW5kKGhpZ2hsaWdodFBhcmVudCk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodFBhcmVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlKHJhbmdlLCBnZXRDc3NTZWxlY3RvciwgY29tcHV0ZUVsZW1lbnRDRkkpIHtcbiAgY29uc3Qgc3RhcnRJc0VsZW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lclxuICAgIDogcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFzdGFydENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgaWYgKHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50XG4gICk7XG4gIGNvbnN0IGVuZElzRWxlbWVudCA9IHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnQgPSBlbmRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lclxuICAgIDogcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFlbmRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBlbmRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihyYW5nZS5lbmRDb250YWluZXIpO1xuICBpZiAoZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBjb21tb25FbGVtZW50QW5jZXN0b3IgPSBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQoXG4gICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICk7XG4gIGlmICghY29tbW9uRWxlbWVudEFuY2VzdG9yKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gTk8gUkFOR0UgQ09NTU9OIEFOQ0VTVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpIHtcbiAgICBjb25zdCByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCA9XG4gICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgPyByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lclxuICAgICAgICA6IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgJiZcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICkge1xuICAgICAgaWYgKGNvbW1vbkVsZW1lbnRBbmNlc3RvciAhPT0gcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCI+Pj4+Pj4gQ09NTU9OIEFOQ0VTVE9SIENPTlRBSU5FUiBESUZGPz8hXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3Rvcihjb21tb25FbGVtZW50QW5jZXN0b3IpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IocmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgcm9vdEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShjb21tb25FbGVtZW50QW5jZXN0b3IpO1xuICBjb25zdCBzdGFydEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShzdGFydENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBlbmRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGxldCBjZmk7XG4gIGlmIChyb290RWxlbWVudENmaSAmJiBzdGFydEVsZW1lbnRDZmkgJiYgZW5kRWxlbWVudENmaSkge1xuICAgIGxldCBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmk7XG4gICAgaWYgKCFzdGFydElzRWxlbWVudCkge1xuICAgICAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBzdGFydEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5zdGFydE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0IDwgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5zdGFydE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmk7XG4gICAgaWYgKCFlbmRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApO1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIGVuZEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA8IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2UuZW5kT2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLmVuZE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNmaSA9XG4gICAgICByb290RWxlbWVudENmaSArXG4gICAgICBcIixcIiArXG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIikgK1xuICAgICAgXCIsXCIgK1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogcmFuZ2UuZW5kT2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiByYW5nZS5zdGFydE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGlkKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFjbGllbnRSZWN0cykgcmV0dXJuO1xuXG4gIHZhciB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gIHZhciBtYXhIZWlnaHQgPSB0b3BDbGllbnRSZWN0LmhlaWdodDtcbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKGNsaWVudFJlY3QudG9wIDwgdG9wQ2xpZW50UmVjdC50b3ApIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0O1xuICAgIGlmIChjbGllbnRSZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICB2YXIgbmV3VG9wID0gdG9wQ2xpZW50UmVjdC50b3A7XG5cbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGJvdW5kaW5nQXJlYXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgICAgICk7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIC8vZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGJvdW5kaW5nQXJlYXMuc25hcHNob3RMZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBib3VuZGluZ0FyZWFzLmxlbmd0aCB8IDA7XG4gICAgICAgIGkgPCBsZW47XG4gICAgICAgIGkgPSAoaSArIDEpIHwgMFxuICAgICAgKSB7XG4gICAgICAgIHZhciBib3VuZGluZ0FyZWEgPSBib3VuZGluZ0FyZWFzW2ldO1xuICAgICAgICBpZiAoTWF0aC5hYnMoYm91bmRpbmdBcmVhLnJlY3QudG9wIC0gKG5ld1RvcCAtIHlPZmZzZXQpKSA8IDMpIHtcbiAgICAgICAgICBuZXdUb3AgKz0gYm91bmRpbmdBcmVhLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGZvdW5kKTtcbiAgfVxuXG4gIHRvcENsaWVudFJlY3QudG9wID0gbmV3VG9wO1xuICB0b3BDbGllbnRSZWN0LmhlaWdodCA9IG1heEhlaWdodDtcblxuICByZXR1cm4gdG9wQ2xpZW50UmVjdDtcbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG5cbiAgcmV0dXJuIGNsaWVudFJlY3RzO1xufVxuXG5mdW5jdGlvbiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBwYXJ0aWFsQ2ZpOiByYW5nZUluZm8uY2ZpLFxuICAgIGRvbVJhbmdlOiB7XG4gICAgICBzdGFydDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uZW5kT2Zmc2V0LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgY2ZpOiBsb2NhdGlvbi5wYXJ0aWFsQ2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgdmFyIHNpemUgPSB7XG4gICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgIGxlZnQ6IGNsaWVudFJlY3RzWzBdLmxlZnQsXG4gICAgd2lkdGg6IGNsaWVudFJlY3RzWzBdLndpZHRoLFxuICAgIHRvcDogY2xpZW50UmVjdHNbMF0udG9wLFxuICAgIGhlaWdodDogY2xpZW50UmVjdHNbMF0uaGVpZ2h0LFxuICB9O1xuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhhbmRsZUJvdW5kcyA9IHtcbiAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0LFxuICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICB0b3A6IGNsaWVudFJlY3QudG9wLFxuICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCb3VuZHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2Nyb2xsTW9kZShmbGFnKSB7XG4gIGlmICghZmxhZykge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX1BBR0lOQVRFRCk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfVxufVxuXG4vKlxuIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7IC8vIElFID49IDk7IG90aGVyIGJyb3dzZXJzXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgLy9hbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTsgLy9oZXJlIHlvdSBkcmF3IHlvdXIgb3duIG1lbnVcbiAgICAgICAgICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy9sZXQgZ2V0Q3NzU2VsZWN0b3IgPSBmdWxsUXVhbGlmaWVkU2VsZWN0b3I7XG4gICAgICAgICAgICBcblx0XHRcdGxldCBzdHIgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRsZXQgc2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCk7XG5cdFx0XHRsZXQgcG9zID0gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8se3JlZDoxMCxncmVlbjo1MCxibHVlOjIzMH0sdHJ1ZSk7XG5cdFx0XHRsZXQgcmV0MiA9IGNyZWF0ZUFubm90YXRpb24ocG9zLmlkKTtcblx0XHRcdFxuICB9LCBmYWxzZSk7XG4gICAgfSBlbHNlIHsgLy8gSUUgPCA5XG4gICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbmNvbnRleHRtZW51JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTtcbiAgICAgICAgICAgIHdpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4qL1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMiBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgaXNTY3JvbGxNb2RlRW5hYmxlZCwgcGFnZVdpZHRoIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaXJzdFZpc2libGVFbGVtZW50KHJvb3RFbGVtZW50KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGlmIChjaGlsZC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2aXNpYmxlRWxlbWVudCA9IGZpbmRGaXJzdFZpc2libGVFbGVtZW50KGNoaWxkKTtcbiAgICBpZiAodmlzaWJsZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB2aXNpYmxlRWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgcm9vdEVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkgJiZcbiAgICByb290RWxlbWVudCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICkge1xuICAgIGNvbnN0IHZpc2libGUgPSBpc0VsZW1lbnRWaXNpYmxlKHJvb3RFbGVtZW50LCB1bmRlZmluZWQpO1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICByZXR1cm4gcm9vdEVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIFNlZSBjb21wdXRlVmlzaWJpbGl0eV8oKSBpbiByMi1uYXZpZ2F0b3ItanNcbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoZWxlbWVudCwgZG9tUmVjdCAvKiBudWxsYWJsZSAqLykge1xuICBpZiAocmVhZGl1bS5pc0ZpeGVkTGF5b3V0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgIWRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBlbFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgaWYgKGVsU3R5bGUpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKTtcbiAgICBpZiAoZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICAvLyBUT0RPOiB2ZXJ0aWNhbCB3cml0aW5nIG1vZGVcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgY29uc3Qgc2Nyb2xsTGVmdCA9IHJlY3QubGVmdDtcbiAgbGV0IGN1cnJlbnRPZmZzZXQgPSBzY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gIHJldHVybiByZWN0LmxlZnQgPiAwICYmIHJlY3QubGVmdCA8IHBhZ2VXaWR0aDtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGxvZ0Vycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IHRvTmF0aXZlUmVjdCB9IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IFRleHRSYW5nZSB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlXCI7XG5cbi8vIFBvbHlmaWxsIGZvciBBbmRyb2lkIEFQSSAyNlxuaW1wb3J0IG1hdGNoQWxsIGZyb20gXCJzdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsXCI7XG5tYXRjaEFsbC5zaGltKCk7XG5cbmNvbnN0IGRlYnVnID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb24oKSB7XG4gIGNvbnN0IHRleHQgPSBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdCgpO1xuICByZXR1cm4geyB0ZXh0LCByZWN0IH07XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIHJldHVybiB0b05hdGl2ZVJlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhbkhpZ2hsaWdodCA9IGhpZ2hsaWdodFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxuL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDtcbiAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhkb2N1bWVudC5ib2R5KTtcbiAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICBjb25zdCBzbmlwcGV0TGVuZ3RoID0gMjAwO1xuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYmVmb3JlIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBmaXJzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYmVmb3JlID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIHNuaXBwZXRMZW5ndGgpLCBzdGFydCk7XG4gIGxldCBmaXJzdFdvcmRTdGFydCA9IGJlZm9yZS5zZWFyY2goL1xcUHtMfVxccHtMfS9ndSk7XG4gIGlmIChmaXJzdFdvcmRTdGFydCAhPT0gLTEpIHtcbiAgICBiZWZvcmUgPSBiZWZvcmUuc2xpY2UoZmlyc3RXb3JkU3RhcnQgKyAxKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYWZ0ZXIgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGxhc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGFmdGVyID0gdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBzbmlwcGV0TGVuZ3RoKSk7XG4gIGxldCBsYXN0V29yZEVuZCA9IEFycmF5LmZyb20oYWZ0ZXIubWF0Y2hBbGwoL1xccHtMfVxcUHtMfS9ndSkpLnBvcCgpO1xuICBpZiAobGFzdFdvcmRFbmQgIT09IHVuZGVmaW5lZCAmJiBsYXN0V29yZEVuZC5pbmRleCA+IDEpIHtcbiAgICBhZnRlciA9IGFmdGVyLnNsaWNlKDAsIGxhc3RXb3JkRW5kLmluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4geyBoaWdobGlnaHQsIGJlZm9yZSwgYWZ0ZXIgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIEJhc2Ugc2NyaXB0IHVzZWQgYnkgYm90aCByZWZsb3dhYmxlIGFuZCBmaXhlZCBsYXlvdXQgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2dlc3R1cmVzXCI7XG5pbXBvcnQge1xuICByZW1vdmVQcm9wZXJ0eSxcbiAgc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvRW5kLFxuICBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb1RleHQsXG4gIHNldFByb3BlcnR5LFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5ub3RhdGlvbixcbiAgY3JlYXRlSGlnaGxpZ2h0LFxuICBkZXN0cm95SGlnaGxpZ2h0LFxuICBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbyxcbiAgZ2V0U2VsZWN0aW9uUmVjdCxcbiAgcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElELFxuICBzZXRTY3JvbGxNb2RlLFxufSBmcm9tIFwiLi9oaWdobGlnaHRcIjtcbmltcG9ydCB7IGZpbmRGaXJzdFZpc2libGVFbGVtZW50IH0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXREZWNvcmF0aW9ucywgcmVnaXN0ZXJUZW1wbGF0ZXMgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxuLy8gUHVibGljIEFQSSB1c2VkIGJ5IHRoZSBuYXZpZ2F0b3IuXG53aW5kb3cucmVhZGl1bSA9IHtcbiAgLy8gdXRpbHNcbiAgc2Nyb2xsVG9JZDogc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbjogc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9UZXh0OiBzY3JvbGxUb1RleHQsXG4gIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0OiBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9TdGFydDogc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9FbmQ6IHNjcm9sbFRvRW5kLFxuICBzZXRQcm9wZXJ0eTogc2V0UHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnR5OiByZW1vdmVQcm9wZXJ0eSxcblxuICAvLyBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbjogZ2V0Q3VycmVudFNlbGVjdGlvbixcblxuICAvLyBkZWNvcmF0aW9uXG4gIHJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlczogcmVnaXN0ZXJUZW1wbGF0ZXMsXG4gIGdldERlY29yYXRpb25zOiBnZXREZWNvcmF0aW9ucyxcblxuICAvLyBET01cbiAgZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQ6IGZpbmRGaXJzdFZpc2libGVFbGVtZW50LFxufTtcblxuLy8gTGVnYWN5IGhpZ2hsaWdodHMgQVBJLlxud2luZG93LmNyZWF0ZUFubm90YXRpb24gPSBjcmVhdGVBbm5vdGF0aW9uO1xud2luZG93LmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbndpbmRvdy5kZXN0cm95SGlnaGxpZ2h0ID0gZGVzdHJveUhpZ2hsaWdodDtcbndpbmRvdy5nZXRDdXJyZW50U2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvO1xud2luZG93LmdldFNlbGVjdGlvblJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0O1xud2luZG93LnJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCA9IHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRDtcbndpbmRvdy5zZXRTY3JvbGxNb2RlID0gc2V0U2Nyb2xsTW9kZTtcbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIFNjcmlwdCB1c2VkIGZvciByZWZsb3dhYmxlIHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9pbmRleFwiO1xuXG53aW5kb3cucmVhZGl1bS5pc1JlZmxvd2FibGUgPSB0cnVlO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFNldHVwcyB0aGUgYHZpZXdwb3J0YCBtZXRhIHRhZyB0byBkaXNhYmxlIHpvb21pbmcuXG4gIGxldCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpO1xuICBtZXRhLnNldEF0dHJpYnV0ZShcbiAgICBcImNvbnRlbnRcIixcbiAgICBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCBzaHJpbmstdG8tZml0PW5vXCJcbiAgKTtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChtZXRhKTtcbn0pO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVFbGVtZW50Iiwicm9vdEVsZW1lbnQiLCJ2aXNpYmxlRWxlbWVudCIsInZpc2libGUiLCJpc0VsZW1lbnRWaXNpYmxlIiwiZG9tUmVjdCIsInJlYWRpdW0iLCJlbFN0eWxlIiwiZGlzcGxheSIsIm1hdGNoQWxsIiwic2hpbSIsImdldEN1cnJlbnRTZWxlY3Rpb24iLCJnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCIsImNsZWFuSGlnaGxpZ2h0Iiwic25pcHBldExlbmd0aCIsImZpcnN0V29yZFN0YXJ0IiwibGFzdFdvcmRFbmQiLCJwb3AiLCJyZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXMiLCJpc1JlZmxvd2FibGUiLCJtZXRhIiwiaGVhZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var B=__webpack_module_cache__[Q];if(void 0!==B)return B.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(B,{a:B}),B},__webpack_require__.d=function(Q,B){for(var n in B)__webpack_require__.o(B,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:B[n]})},__webpack_require__.o=function(Q,B){return Object.prototype.hasOwnProperty.call(Q,B)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file From f85efdedc3dd472873bd91007549b74e3af8d65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Fri, 25 Mar 2022 20:39:34 +0100 Subject: [PATCH 11/59] Remove the dependency to the navigator in `TextToSpeechController` --- .../navigator/tts/TextToSpeechController.kt | 36 ++++--------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt index 8c69346a3e..b8c62f026b 100644 --- a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt +++ b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt @@ -6,7 +6,7 @@ package org.readium.navigator.tts -import android.app.Activity +import android.content.Context import android.graphics.Color import android.speech.tts.TextToSpeech import android.speech.tts.TextToSpeech.* @@ -14,10 +14,6 @@ import android.speech.tts.UtteranceProgressListener import android.speech.tts.Voice import androidx.annotation.ColorInt import kotlinx.coroutines.* -import org.readium.r2.navigator.DecorableNavigator -import org.readium.r2.navigator.Decoration -import org.readium.r2.navigator.ExperimentalDecorator -import org.readium.r2.navigator.Navigator import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.services.content.* @@ -37,11 +33,9 @@ sealed class TextToSpeechException private constructor( class LanguageMissingData(val locale: Locale) : TextToSpeechException("The language ${locale.toLanguageTag()} requires additional files by the TTS engine") } -@OptIn(ExperimentalDecorator::class) class TextToSpeechController( - val activity: Activity, + val context: Context, val publication: Publication, - val navigator: Navigator, val listener: Listener, config: Configuration = Configuration( defaultLocale = publication.metadata.locale ?: Locale.getDefault() @@ -54,6 +48,8 @@ class TextToSpeechController( ) interface Listener { + fun onSpeakUtterrance(text: String, locale: Locale, locator: Locator) + fun onSpeakUtteranceRange(locator: Locator) fun onError(exception: TextToSpeechException) } @@ -62,7 +58,7 @@ class TextToSpeechController( private var textIterator: ContentIterator? = null private val ttsListener = TtsListener() - private val tts: TextToSpeech = TextToSpeech(activity, ttsListener).apply { + private val tts: TextToSpeech = TextToSpeech(context.applicationContext, ttsListener).apply { setOnUtteranceProgressListener(ttsListener) } @@ -109,10 +105,6 @@ class TextToSpeechController( playNextUtterance() return } - navigator.go(span.locator) - (navigator as? DecorableNavigator)?.applyDecorations(listOf( - Decoration(id = "tts", locator = span.locator, style = Decoration.Style.Highlight(tint = config.highlightTint)) - ), group = "tts") val locale = span.language?.let { Locale.forLanguageTag(it.replace("_", "-")) } ?: config.defaultLocale @@ -120,6 +112,7 @@ class TextToSpeechController( val localeResult = tts.setLanguage(locale) if (localeResult >= LANG_AVAILABLE) { tts.speak(span.text, QUEUE_FLUSH, null, count++.toString()) + listener.onSpeakUtterrance(span.text, locale, span.locator) } else { if (localeResult == LANG_MISSING_DATA) { listener.onError(TextToSpeechException.LanguageMissingData(locale)) @@ -193,25 +186,10 @@ class TextToSpeechController( scope.launch { playNextUtterance() } } - private var wordJob: Job? = null - override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { var locator = currentSpan?.locator ?: return locator = locator.copy(text = locator.text.substring(start, end)) - navigator.go(locator) - -// wordJob?.cancel() -// wordJob = scope.launch { -// (navigator as? DecorableNavigator)?.applyDecorations( -// listOf( -// Decoration( -// id = "tts", -// locator = locator, -// style = Decoration.Style.Underline(tint = Color.RED) -// ) -// ), group = "tts2" -// ) -// } + listener.onSpeakUtteranceRange(locator) } } } From 10e2704365f8c127345089fd2c5fe20002c6957a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 29 Mar 2022 09:17:16 +0200 Subject: [PATCH 12/59] Make the default locale optional --- .../readium/navigator/tts/TextToSpeechController.kt | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt index b8c62f026b..b697d8d7a7 100644 --- a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt +++ b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt @@ -7,12 +7,10 @@ package org.readium.navigator.tts import android.content.Context -import android.graphics.Color import android.speech.tts.TextToSpeech import android.speech.tts.TextToSpeech.* import android.speech.tts.UtteranceProgressListener import android.speech.tts.Voice -import androidx.annotation.ColorInt import kotlinx.coroutines.* import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication @@ -22,8 +20,6 @@ import org.readium.r2.shared.util.Try import org.readium.r2.shared.util.getOrElse import java.util.* -typealias TextToSpeechTry = Try - sealed class TextToSpeechException private constructor( override val message: String, cause: Throwable? = null @@ -37,13 +33,10 @@ class TextToSpeechController( val context: Context, val publication: Publication, val listener: Listener, - config: Configuration = Configuration( - defaultLocale = publication.metadata.locale ?: Locale.getDefault() - ) + config: Configuration = Configuration(), ) : SuspendingCloseable { data class Configuration( - val defaultLocale: Locale, - @ColorInt val highlightTint: Int = Color.RED, + val defaultLocale: Locale? = null, val rate: Double = 1.0 ) @@ -108,6 +101,8 @@ class TextToSpeechController( val locale = span.language?.let { Locale.forLanguageTag(it.replace("_", "-")) } ?: config.defaultLocale + ?: publication.metadata.locale + ?: Locale.getDefault() val localeResult = tts.setLanguage(locale) if (localeResult >= LANG_AVAILABLE) { From 04a00d8024e0ab34496bc7ca81c43278175d1237 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Fri, 1 Apr 2022 18:21:38 +0200 Subject: [PATCH 13/59] Add isSpeaking, playPause() --- .../navigator/tts/TextToSpeechController.kt | 135 +++++++++++++----- 1 file changed, 97 insertions(+), 38 deletions(-) diff --git a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt index b697d8d7a7..947c674905 100644 --- a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt +++ b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt @@ -12,6 +12,11 @@ import android.speech.tts.TextToSpeech.* import android.speech.tts.UtteranceProgressListener import android.speech.tts.Voice import kotlinx.coroutines.* +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.services.content.* @@ -41,8 +46,9 @@ class TextToSpeechController( ) interface Listener { - fun onSpeakUtterrance(text: String, locale: Locale, locator: Locator) - fun onSpeakUtteranceRange(locator: Locator) + fun onSpeakUtterrance(text: String, locale: Locale, locator: Locator) {} + fun onSpeakUtteranceRange(locator: Locator) {} + fun onSpeakingChange(isSpeaking: Boolean) {} fun onError(exception: TextToSpeechException) } @@ -53,6 +59,7 @@ class TextToSpeechController( private val ttsListener = TtsListener() private val tts: TextToSpeech = TextToSpeech(context.applicationContext, ttsListener).apply { setOnUtteranceProgressListener(ttsListener) + setSpeechRate(config.rate.toFloat()) } var config: Configuration = config @@ -61,6 +68,11 @@ class TextToSpeechController( tts.setSpeechRate(value.rate.toFloat()) } + val defaultLocale: Locale get() = + config.defaultLocale + ?: publication.metadata.locale + ?: tts.defaultVoice.locale + var voice: Voice get() = tts.voice set(value) { tts.voice = value } @@ -68,12 +80,37 @@ class TextToSpeechController( val voices: Map> get() = tts.voices.groupBy(Voice::getLocale) + val defaultVoice: Voice + get() = tts.defaultVoice + + val _isSpeaking = MutableStateFlow(false) + val isSpeaking: StateFlow = _isSpeaking.asStateFlow() + fun play(start: Locator? = null) = scope.launch { - initializeIterator(start) - playNextUtterance() + val span = currentSpan + _isSpeaking.value = true + if (span != null) { + if (playSpan(span)) { + return@launch + } + } else { + initializeIterator(start) + } + next() + } + + fun pause() { + _isSpeaking.value = false + tts.stop() + } + + fun playPause() { + if (isSpeaking.value) pause() + else play() } override suspend fun close() { + pause() textIterator?.close() scope.cancel() tts.shutdown() @@ -87,38 +124,29 @@ class TextToSpeechController( private var currentSpan: Content.Text.Span? = null private var spans = mutableListOf() - private suspend fun playNextUtterance() { + private fun next() { + scope.launch { + if (!playNextUtterance()) { + _isSpeaking.value = false + } + } + } + + private suspend fun playNextUtterance(): Boolean { while (!initialized) { delay(100) } val span = spans.removeFirstOrNull() currentSpan = span if (span != null) { - if (!span.text.any { it.isLetterOrDigit() }) { - playNextUtterance() - return - } - - val locale = span.language?.let { Locale.forLanguageTag(it.replace("_", "-")) } - ?: config.defaultLocale - ?: publication.metadata.locale - ?: Locale.getDefault() - - val localeResult = tts.setLanguage(locale) - if (localeResult >= LANG_AVAILABLE) { - tts.speak(span.text, QUEUE_FLUSH, null, count++.toString()) - listener.onSpeakUtterrance(span.text, locale, span.locator) + if (playSpan(span)) { + return true } else { - if (localeResult == LANG_MISSING_DATA) { - listener.onError(TextToSpeechException.LanguageMissingData(locale)) - } else { - listener.onError(TextToSpeechException.LanguageNotSupported(locale)) - } - playNextUtterance() + return playNextUtterance() } } else { - val iter = textIterator ?: return + val iter = textIterator ?: return false val text = iter.next().getOrElse { listener.onError( @@ -127,17 +155,41 @@ class TextToSpeechController( it ) ) - return - } ?: return + null + } ?: return false if (text is Content.Text) { spans = text.spans .flatMap { tokenize(it).getOrThrow() } .toMutableList() } - playNextUtterance() + return playNextUtterance() + } + } + + private fun playSpan(span: Content.Text.Span?): Boolean { + span ?: return false + if (!span.text.any { it.isLetterOrDigit() }) { + return false } + val locale = span.language?.let { Locale.forLanguageTag(it.replace("_", "-")) } + ?: defaultLocale + + val localeResult = tts.setLanguage(locale) + + if (localeResult < LANG_AVAILABLE) { + if (localeResult == LANG_MISSING_DATA) { + listener.onError(TextToSpeechException.LanguageMissingData(locale)) + } else { + listener.onError(TextToSpeechException.LanguageNotSupported(locale)) + } + return false + } + + tts.speak(span.text, QUEUE_FLUSH, null, count++.toString()) + listener.onSpeakUtterrance(span.text, locale, span.locator) + return true } private suspend fun tokenize(span: Content.Text.Span): Try, Exception> = @@ -152,20 +204,22 @@ class TextToSpeechController( } } - fun pause() { - tts.stop() + fun skipForward() { + next() } - fun skipForward() = scope.launch { - playNextUtterance() + fun skipBackward() { } - fun skipBackward() { + private var initialized = false + init { + isSpeaking + .onEach { listener.onSpeakingChange(it) } + .launchIn(scope) } - private var initialized = false - private inner class TtsListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { + private inner class TtsListener : OnInitListener, UtteranceProgressListener() { override fun onInit(status: Int) { initialized = true } @@ -174,11 +228,16 @@ class TextToSpeechController( } override fun onDone(utteranceId: String?) { - scope.launch { playNextUtterance() } + next() } override fun onError(utteranceId: String?) { - scope.launch { playNextUtterance() } + next() + } + + override fun onError(utteranceId: String?, errorCode: Int) { + // FIXME: Report error + next() } override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { From 9c3448765699d7364281fd11532def6817bfe35d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 4 Apr 2022 22:17:25 +0200 Subject: [PATCH 14/59] Optimize first element detection --- .../src/main/assets/_scripts/package.json | 5 +- .../src/main/assets/_scripts/src/dom.js | 75 ++++++++++++------- .../src/main/assets/_scripts/src/index.js | 4 +- .../src/main/assets/_scripts/src/utils.js | 2 +- .../src/main/assets/_scripts/yarn.lock | 25 +++++++ .../assets/readium/scripts/readium-fixed.js | 2 +- .../readium/scripts/readium-reflowable.js | 2 +- 7 files changed, 81 insertions(+), 34 deletions(-) diff --git a/readium/navigator/src/main/assets/_scripts/package.json b/readium/navigator/src/main/assets/_scripts/package.json index 9b22beaf89..0cbea619aa 100644 --- a/readium/navigator/src/main/assets/_scripts/package.json +++ b/readium/navigator/src/main/assets/_scripts/package.json @@ -11,7 +11,9 @@ "checkformat": "prettier --check '**/*.js'", "format": "prettier --list-different --write '**/*.js'" }, - "browserslist": [ "Android >= 4" ], + "browserslist": [ + "Android >= 4" + ], "devDependencies": { "@babel/core": "^7.16.0", "@babel/preset-env": "^7.16.0", @@ -23,6 +25,7 @@ }, "dependencies": { "approx-string-match": "^1.1.0", + "css-selector-generator": "^3.6.0", "hash.js": "^1.1.7", "string.prototype.matchall": "^4.0.5" } diff --git a/readium/navigator/src/main/assets/_scripts/src/dom.js b/readium/navigator/src/main/assets/_scripts/src/dom.js index 81dc6d7c8b..196a024ff6 100644 --- a/readium/navigator/src/main/assets/_scripts/src/dom.js +++ b/readium/navigator/src/main/assets/_scripts/src/dom.js @@ -5,40 +5,62 @@ // import { log as logNative, isScrollModeEnabled, pageWidth } from "./utils"; +import { getCssSelector } from "css-selector-generator"; -export function findFirstVisibleElement(rootElement) { - for (var i = 0; i < rootElement.children.length; i++) { +export function findFirstVisibleLocator() { + const element = findFirstVisibleBlockElement(); + if (!element) { + return undefined; + } + + return { + locations: { + cssSelector: getCssSelector(element), + }, + text: { + highlight: element.textContent, + }, + }; +} + +function findFirstVisibleBlockElement() { + return findElement( + document.body, + (element) => window.getComputedStyle(element).display != "block" + ); +} + +function findElement(rootElement, shouldIgnore) { + var foundElement = undefined; + for (var i = rootElement.children.length - 1; i >= 0; i--) { const child = rootElement.children[i]; - if (child.nodeType !== Node.ELEMENT_NODE) { - continue; - } - const visibleElement = findFirstVisibleElement(child); - if (visibleElement) { - return visibleElement; + const element = findElement(child, shouldIgnore); + if (element) { + return element; } } - if ( - rootElement !== document.body && - rootElement !== document.documentElement - ) { - const visible = isElementVisible(rootElement, undefined); - if (visible) { - return rootElement; - } + if (isElementVisible(rootElement, undefined, shouldIgnore)) { + return rootElement; } - return undefined; } // See computeVisibility_() in r2-navigator-js -function isElementVisible(element, domRect /* nullable */) { - if (readium.isFixedLayout) { +function isElementVisible(element, domRect /* nullable */, shouldIgnore) { + if ( + readium.isFixedLayout || + element === document.body || + element === document.documentElement + ) { return true; - } else if (!document || !document.documentElement || !document.body) { - return false; } - if (element === document.body || element === document.documentElement) { - return true; + if ( + !document || + !document.documentElement || + !document.body || + (shouldIgnore && shouldIgnore(element)) + ) { + return false; } const elStyle = getComputedStyle(element); @@ -63,11 +85,8 @@ function isElementVisible(element, domRect /* nullable */) { const scrollElement = document.scrollingElement; if (isScrollModeEnabled()) { - // TODO: vertical writing mode return rect.top >= 0 && rect.top <= document.documentElement.clientHeight; + } else { + return rect.left < pageWidth; } - - const scrollLeft = rect.left; - let currentOffset = scrollElement.scrollLeft; - return rect.left > 0 && rect.left < pageWidth; } diff --git a/readium/navigator/src/main/assets/_scripts/src/index.js b/readium/navigator/src/main/assets/_scripts/src/index.js index 881ee504d2..0ba35d52ce 100644 --- a/readium/navigator/src/main/assets/_scripts/src/index.js +++ b/readium/navigator/src/main/assets/_scripts/src/index.js @@ -27,7 +27,7 @@ import { rectangleForHighlightWithID, setScrollMode, } from "./highlight"; -import { findFirstVisibleElement } from "./dom"; +import { findFirstVisibleLocator } from "./dom"; import { getCurrentSelection } from "./selection"; import { getDecorations, registerTemplates } from "./decorator"; @@ -52,7 +52,7 @@ window.readium = { getDecorations: getDecorations, // DOM - findFirstVisibleElement: findFirstVisibleElement, + findFirstVisibleLocator: findFirstVisibleLocator, }; // Legacy highlights API. diff --git a/readium/navigator/src/main/assets/_scripts/src/utils.js b/readium/navigator/src/main/assets/_scripts/src/utils.js index d15181af95..3fc1b1c9a2 100644 --- a/readium/navigator/src/main/assets/_scripts/src/utils.js +++ b/readium/navigator/src/main/assets/_scripts/src/utils.js @@ -95,7 +95,7 @@ export function isScrollModeEnabled() { ); } -function isRTL() { +export function isRTL() { return document.body.dir.toLowerCase() == "rtl"; } diff --git a/readium/navigator/src/main/assets/_scripts/yarn.lock b/readium/navigator/src/main/assets/_scripts/yarn.lock index be4eeb0d29..8d4f3d2fdf 100644 --- a/readium/navigator/src/main/assets/_scripts/yarn.lock +++ b/readium/navigator/src/main/assets/_scripts/yarn.lock @@ -1300,6 +1300,13 @@ caniuse-lite@^1.0.30001280: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz#8573685bdae4d733ef18f78d44ba0ca5fe9e896b" integrity sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg== +cartesian@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cartesian/-/cartesian-1.0.1.tgz#ae3fc8a63e2ba7e2c4989ce696207457bcae65af" + integrity sha1-rj/Ipj4rp+LEmJzmliB0V7yuZa8= + dependencies: + xtend "^4.0.1" + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1404,6 +1411,14 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +css-selector-generator@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-selector-generator/-/css-selector-generator-3.6.0.tgz#06293fb3d9303cc4b55f2d8e40aa6b85bf1c405b" + integrity sha512-t1wTGaASlIyCd5nYA0sptNgn97bkAWlZlVSvQKXbR9xhWANDvTu9blgAFyZ8db8xGyTzUIDYjngjAmwmMNM+KQ== + dependencies: + cartesian "^1.0.1" + iselement "^1.1.4" + debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" @@ -2008,6 +2023,11 @@ is-weakref@^1.0.1: dependencies: call-bind "^1.0.0" +iselement@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/iselement/-/iselement-1.1.4.tgz#7e55b52a8ebca50a7e2e80e5b8d2840f32353146" + integrity sha1-flW1Ko68pQp+LoDluNKEDzI1MUY= + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -2878,6 +2898,11 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js index 9e1ec329b3..bb6eb18cc4 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nfunction findFirstVisibleElement(rootElement) {\n for (var i = 0; i < rootElement.children.length; i++) {\n var child = rootElement.children[i];\n\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n var visibleElement = findFirstVisibleElement(child);\n\n if (visibleElement) {\n return visibleElement;\n }\n }\n\n if (rootElement !== document.body && rootElement !== document.documentElement) {\n var visible = isElementVisible(rootElement, undefined);\n\n if (visible) {\n return rootElement;\n }\n }\n\n return undefined;\n} // See computeVisibility_() in r2-navigator-js\n\nfunction isElementVisible(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) {\n return true;\n } else if (!document || !document.documentElement || !document.body) {\n return false;\n }\n\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n // TODO: vertical writing mode\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n }\n\n var scrollLeft = rect.left;\n var currentOffset = scrollElement.scrollLeft;\n return rect.left > 0 && rect.left < pageWidth;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleElement: findFirstVisibleElement\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFpQ0EsdUJBQWpDO0FBQ0EzWSxNQUFNLENBQUMyaUIsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBM2lCLE1BQU0sQ0FBQzBpQiwyQkFBUCxHQUFxQ0EsMkJBQXJDO0FBQ0ExaUIsTUFBTSxDQUFDOGlCLGFBQVAsR0FBdUJBLGFBQXZCLEM7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE5aUIsTUFBTSxDQUFDc2pCLE9BQVAsQ0FBZTNFLGFBQWYsR0FBK0IsSUFBL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1maXhlZC5qcz9kOTlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQocm9vdEVsZW1lbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHZpc2libGVFbGVtZW50ID0gZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQoY2hpbGQpO1xuICAgIGlmICh2aXNpYmxlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIHZpc2libGVFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICByb290RWxlbWVudCAhPT0gZG9jdW1lbnQuYm9keSAmJlxuICAgIHJvb3RFbGVtZW50ICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgKSB7XG4gICAgY29uc3QgdmlzaWJsZSA9IGlzRWxlbWVudFZpc2libGUocm9vdEVsZW1lbnQsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHZpc2libGUpIHtcbiAgICAgIHJldHVybiByb290RWxlbWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCAhZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIC8vIFRPRE86IHZlcnRpY2FsIHdyaXRpbmcgbW9kZVxuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBjb25zdCBzY3JvbGxMZWZ0ID0gcmVjdC5sZWZ0O1xuICBsZXQgY3VycmVudE9mZnNldCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgcmV0dXJuIHJlY3QubGVmdCA+IDAgJiYgcmVjdC5sZWZ0IDwgcGFnZVdpZHRoO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlRWxlbWVudDogZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIGZpeGVkIGxheW91dHMgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzRml4ZWRMYXlvdXQgPSB0cnVlO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVFbGVtZW50Iiwicm9vdEVsZW1lbnQiLCJ2aXNpYmxlRWxlbWVudCIsInZpc2libGUiLCJpc0VsZW1lbnRWaXNpYmxlIiwiZG9tUmVjdCIsInJlYWRpdW0iLCJlbFN0eWxlIiwiZGlzcGxheSIsIm1hdGNoQWxsIiwic2hpbSIsImdldEN1cnJlbnRTZWxlY3Rpb24iLCJnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCIsImNsZWFuSGlnaGxpZ2h0Iiwic25pcHBldExlbmd0aCIsImZpcnN0V29yZFN0YXJ0IiwibGFzdFdvcmRFbmQiLCJwb3AiLCJyZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var B=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](B,B.exports,__webpack_require__),B.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var B in t)__webpack_require__.o(t,B)&&!__webpack_require__.o(Q,B)&&Object.defineProperty(Q,B,{enumerable:!0,get:t[B]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findFirstVisibleBlockElement();\n\n if (!element) {\n return undefined;\n }\n\n return {\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findFirstVisibleBlockElement() {\n return findElement(document.body, function (element) {\n return window.getComputedStyle(element).display != "block";\n });\n}\n\nfunction findElement(rootElement, shouldIgnore) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var element = findElement(child, shouldIgnore);\n\n if (element) {\n return element;\n }\n }\n\n if (isElementVisible(rootElement, undefined, shouldIgnore)) {\n return rootElement;\n }\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction isElementVisible(element, domRect\n/* nullable */\n, shouldIgnore) {\n if (readium.isFixedLayout || element === document.body || element === document.documentElement) {\n return true;\n }\n\n if (!document || !document.documentElement || !document.body || shouldIgnore && shouldIgnore(element)) {\n return false;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n return rect.left < pageWidth;\n }\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bGEsaUJBaEJkO0FBaUJmUSxFQUFBQSxjQUFjLEVBQUVBLGNBakJEO0FBbUJmO0FBQ0F1WSxFQUFBQSx1QkFBdUIsRUFBRUEsdUJBQXVCQTtBQXBCakMsQ0FBakIsRUF1QkE7O0FBQ0FoakIsTUFBTSxDQUFDd2UsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBeGUsTUFBTSxDQUFDc2UsZUFBUCxHQUF5QkEsZUFBekI7QUFDQXRlLE1BQU0sQ0FBQ29YLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQXBYLE1BQU0sQ0FBQzJZLHVCQUFQLEdBQWlDQSx1QkFBakM7QUFDQTNZLE1BQU0sQ0FBQzJpQixnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0EzaUIsTUFBTSxDQUFDMGlCLDJCQUFQLEdBQXFDQSwyQkFBckM7QUFDQTFpQixNQUFNLENBQUM4aUIsYUFBUCxHQUF1QkEsYUFBdkIsQzs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTlpQixNQUFNLENBQUN3akIsT0FBUCxDQUFlN0UsYUFBZixHQUErQixJQUEvQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LWZpeGVkLmpzP2Q5OWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcHJveFNlYXJjaCBmcm9tICdhcHByb3gtc3RyaW5nLW1hdGNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHByb3gtc3RyaW5nLW1hdGNoJykuTWF0Y2h9IFN0cmluZ01hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBNYXRjaFxuICogQHByb3Age251bWJlcn0gc3RhcnQgLSBTdGFydCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gZW5kIC0gRW5kIG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBzY29yZSAtXG4gKiAgIFNjb3JlIGZvciB0aGUgbWF0Y2ggYmV0d2VlbiAwIGFuZCAxLjAsIHdoZXJlIDEuMCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNoXG4gKiAgIGZvciB0aGUgcXVvdGUgYW5kIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoZXMgZm9yIGBzdHJgIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhFcnJvcnNcbiAqIEByZXR1cm4ge1N0cmluZ01hdGNoW119XG4gKi9cbmZ1bmN0aW9uIHNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycykge1xuICAvLyBEbyBhIGZhc3Qgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLiBUaGUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGxpYnJhcnlcbiAgLy8gZG9lc24ndCBjdXJyZW50bHkgaW5jb3Jwb3JhdGUgdGhpcyBvcHRpbWl6YXRpb24gaXRzZWxmLlxuICBsZXQgbWF0Y2hQb3MgPSAwO1xuICBsZXQgZXhhY3RNYXRjaGVzID0gW107XG4gIHdoaWxlIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICBtYXRjaFBvcyA9IHRleHQuaW5kZXhPZihzdHIsIG1hdGNoUG9zKTtcbiAgICBpZiAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgICBleGFjdE1hdGNoZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtYXRjaFBvcyxcbiAgICAgICAgZW5kOiBtYXRjaFBvcyArIHN0ci5sZW5ndGgsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgIH0pO1xuICAgICAgbWF0Y2hQb3MgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4YWN0TWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGV4YWN0TWF0Y2hlcztcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBubyBleGFjdCBtYXRjaGVzLCBkbyBhIG1vcmUgZXhwZW5zaXZlIHNlYXJjaCBmb3IgbWF0Y2hlc1xuICAvLyB3aXRoIGVycm9ycy5cbiAgcmV0dXJuIGFwcHJveFNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGB0ZXh0YCBhbmQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gdGV4dE1hdGNoU2NvcmUodGV4dCwgc3RyKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gYHNjb3JlTWF0Y2hgIHdpbGwgbmV2ZXIgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKi9cbiAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgc3RyLCBzdHIubGVuZ3RoKTtcblxuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgcmV0dXJuIDEgLSAobWF0Y2hlc1swXS5lcnJvcnMgLyBzdHIubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoIGZvciBgcXVvdGVgIGluIGB0ZXh0YC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBpZiBubyBtYXRjaCBleGNlZWRpbmcgdGhlIG1pbmltdW0gcXVhbGl0eSB0aHJlc2hvbGQgd2FzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRG9jdW1lbnQgdGV4dCB0byBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdW90ZSAtIFN0cmluZyB0byBmaW5kIHdpdGhpbiBgdGV4dGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IC1cbiAqICAgQ29udGV4dCBpbiB3aGljaCB0aGUgcXVvdGUgb3JpZ2luYWxseSBhcHBlYXJlZC4gVGhpcyBpcyB1c2VkIHRvIGNob29zZSB0aGVcbiAqICAgYmVzdCBtYXRjaC5cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF0gLSBFeHBlY3RlZCB0ZXh0IGJlZm9yZSB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF0gLSBFeHBlY3RlZCB0ZXh0IGFmdGVyIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge251bWJlcn0gW2NvbnRleHQuaGludF0gLSBFeHBlY3RlZCBvZmZzZXQgb2YgbWF0Y2ggd2l0aGluIHRleHRcbiAqIEByZXR1cm4ge01hdGNofG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1b3RlKHRleHQsIHF1b3RlLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKHF1b3RlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hvb3NlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gYWxsb3cgZm9yIHRoZSBpbml0aWFsIHNlYXJjaC5cbiAgLy8gVGhpcyBjaG9pY2UgaW52b2x2ZXMgYSB0cmFkZW9mZiBiZXR3ZWVuOlxuICAvL1xuICAvLyAgLSBSZWNhbGwgKHByb3BvcnRpb24gb2YgXCJnb29kXCIgbWF0Y2hlcyBmb3VuZClcbiAgLy8gIC0gUHJlY2lzaW9uIChwcm9wb3J0aW9uIG9mIG1hdGNoZXMgZm91bmQgd2hpY2ggYXJlIFwiZ29vZFwiKVxuICAvLyAgLSBDb3N0IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgb2YgcHJvY2Vzc2luZyB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgWzFdXG4gIC8vXG4gIC8vIFsxXSBTcGVjaWZpY2FsbHksIHRoZSBleHBlY3RlZC10aW1lIGNvbXBsZXhpdHkgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGlzXG4gIC8vICAgICBgTygobWF4RXJyb3JzIC8gMzIpICogdGV4dC5sZW5ndGgpYC4gU2VlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBkb2NzLlxuICBjb25zdCBtYXhFcnJvcnMgPSBNYXRoLm1pbigyNTYsIHF1b3RlLmxlbmd0aCAvIDIpO1xuXG4gIC8vIEZpbmQgY2xvc2VzdCBtYXRjaGVzIGZvciBgcXVvdGVgIGluIGB0ZXh0YCBiYXNlZCBvbiBlZGl0IGRpc3RhbmNlLlxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHF1b3RlLCBtYXhFcnJvcnMpO1xuXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgYSBtYXRjaCBjYW5kaWRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nTWF0Y2h9IG1hdGNoXG4gICAqL1xuICBjb25zdCBzY29yZU1hdGNoID0gbWF0Y2ggPT4ge1xuICAgIGNvbnN0IHF1b3RlV2VpZ2h0ID0gNTA7IC8vIFNpbWlsYXJpdHkgb2YgbWF0Y2hlZCB0ZXh0IHRvIHF1b3RlLlxuICAgIGNvbnN0IHByZWZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYmVmb3JlIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5wcmVmaXhgLlxuICAgIGNvbnN0IHN1ZmZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYWZ0ZXIgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnN1ZmZpeGAuXG4gICAgY29uc3QgcG9zV2VpZ2h0ID0gMjsgLy8gUHJveGltaXR5IHRvIGV4cGVjdGVkIGxvY2F0aW9uLiBVc2VkIGFzIGEgdGllLWJyZWFrZXIuXG5cbiAgICBjb25zdCBxdW90ZVNjb3JlID0gMSAtIG1hdGNoLmVycm9ycyAvIHF1b3RlLmxlbmd0aDtcblxuICAgIGNvbnN0IHByZWZpeFNjb3JlID0gY29udGV4dC5wcmVmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShNYXRoLm1heCgwLCBtYXRjaC5zdGFydCAtIGNvbnRleHQucHJlZml4Lmxlbmd0aCksIG1hdGNoLnN0YXJ0KSxcbiAgICAgICAgICBjb250ZXh0LnByZWZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcbiAgICBjb25zdCBzdWZmaXhTY29yZSA9IGNvbnRleHQuc3VmZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UobWF0Y2guZW5kLCBtYXRjaC5lbmQgKyBjb250ZXh0LnN1ZmZpeC5sZW5ndGgpLFxuICAgICAgICAgIGNvbnRleHQuc3VmZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuXG4gICAgbGV0IHBvc1Njb3JlID0gMS4wO1xuICAgIGlmICh0eXBlb2YgY29udGV4dC5oaW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMobWF0Y2guc3RhcnQgLSBjb250ZXh0LmhpbnQpO1xuICAgICAgcG9zU2NvcmUgPSAxLjAgLSBvZmZzZXQgLyB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTY29yZSA9XG4gICAgICBxdW90ZVdlaWdodCAqIHF1b3RlU2NvcmUgK1xuICAgICAgcHJlZml4V2VpZ2h0ICogcHJlZml4U2NvcmUgK1xuICAgICAgc3VmZml4V2VpZ2h0ICogc3VmZml4U2NvcmUgK1xuICAgICAgcG9zV2VpZ2h0ICogcG9zU2NvcmU7XG4gICAgY29uc3QgbWF4U2NvcmUgPSBxdW90ZVdlaWdodCArIHByZWZpeFdlaWdodCArIHN1ZmZpeFdlaWdodCArIHBvc1dlaWdodDtcbiAgICBjb25zdCBub3JtYWxpemVkU2NvcmUgPSByYXdTY29yZSAvIG1heFNjb3JlO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTY29yZTtcbiAgfTtcblxuICAvLyBSYW5rIG1hdGNoZXMgYmFzZWQgb24gc2ltaWxhcml0eSBvZiBhY3R1YWwgYW5kIGV4cGVjdGVkIHN1cnJvdW5kaW5nIHRleHRcbiAgLy8gYW5kIGFjdHVhbC9leHBlY3RlZCBvZmZzZXQgaW4gdGhlIGRvY3VtZW50IHRleHQuXG4gIGNvbnN0IHNjb3JlZE1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+ICh7XG4gICAgc3RhcnQ6IG0uc3RhcnQsXG4gICAgZW5kOiBtLmVuZCxcbiAgICBzY29yZTogc2NvcmVNYXRjaChtKSxcbiAgfSkpO1xuXG4gIC8vIENob29zZSBtYXRjaCB3aXRoIGhpZ2hlc3Qgc2NvcmUuXG4gIHNjb3JlZE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICByZXR1cm4gc2NvcmVkTWF0Y2hlc1swXTtcbn1cbiIsIi8qKlxuICogUmV0dXJuIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGV4dCBub2RlcyBjb250YWluZWQgaW4gYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBub2RlVGV4dExlbmd0aChub2RlKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIC8vIG5iLiBgdGV4dENvbnRlbnRgIGV4Y2x1ZGVzIHRleHQgaW4gY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAvLyB3aGVuIGNhbGxlZCBvbiBhIHBhcmVudCBlbGVtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0IHRoYXQgaGVyZS5cblxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobm9kZS50ZXh0Q29udGVudCkubGVuZ3RoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IG9mIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIHdoaWxlIChzaWJsaW5nKSB7XG4gICAgbGVuZ3RoICs9IG5vZGVUZXh0TGVuZ3RoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIG9yIG1vcmUgY2hhcmFjdGVyIG9mZnNldHMgd2l0aGluIGFuIGVsZW1lbnQgdG8gKHRleHQgbm9kZSwgcG9zaXRpb24pXG4gKiBwYWlycy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyW119IG9mZnNldHMgLSBPZmZzZXRzLCB3aGljaCBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfVtdfVxuICovXG5mdW5jdGlvbiByZXNvbHZlT2Zmc2V0cyhlbGVtZW50LCAuLi5vZmZzZXRzKSB7XG4gIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICBjb25zdCBub2RlSXRlciA9IC8qKiBAdHlwZSB7RG9jdW1lbnR9ICovIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgKS5jcmVhdGVOb2RlSXRlcmF0b3IoZWxlbWVudCwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgbGV0IHRleHROb2RlO1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICAvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgYG5leHRPZmZzZXRgdGggY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0XG4gIC8vIG9mIGBlbGVtZW50YC5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Tm9kZSkge1xuICAgIHRleHROb2RlID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAoY3VycmVudE5vZGUpO1xuICAgIGlmIChsZW5ndGggKyB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IG5leHRPZmZzZXQpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IG5leHRPZmZzZXQgLSBsZW5ndGggfSk7XG4gICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gICAgICBsZW5ndGggKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLy8gQm91bmRhcnkgY2FzZS5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0Tm9kZSAmJiBsZW5ndGggPT09IG5leHRPZmZzZXQpIHtcbiAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCB9KTtcbiAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICB9XG5cbiAgaWYgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgZXhjZWVkcyB0ZXh0IGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBsZXQgUkVTT0xWRV9GT1JXQVJEUyA9IDE7XG5leHBvcnQgbGV0IFJFU09MVkVfQkFDS1dBUkRTID0gMjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9mZnNldCB3aXRoaW4gdGhlIHRleHQgY29udGVudCBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoaXMgcG9zaXRpb24gY2FuIGJlIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZGVzY2VuZGFudCBub2RlIGluIHRoZSBjdXJyZW50XG4gKiBET00gc3VidHJlZSBvZiB0aGUgZWxlbWVudCB1c2luZyB0aGUgYHJlc29sdmVgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgdGV4dCBwb3NpdGlvbiBgb2Zmc2V0YCB3aXRoaW5cbiAgICogdGhlIHRleHQgY29udGVudCBvZiBgZWxlbWVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPZmZzZXQgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8qKiBFbGVtZW50IHRoYXQgYG9mZnNldGAgaXMgcmVsYXRpdmUgdG8uICovXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIC8qKiBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50J3MgYHRleHRDb250ZW50YC4gKi9cbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcG9zaXRpb24gd2l0aCBvZmZzZXQgcmVsYXRpdmUgdG8gYSBnaXZlbiBhbmNlc3RvclxuICAgKiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudCAtIEFuY2VzdG9yIG9mIGB0aGlzLmVsZW1lbnRgXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHJlbGF0aXZlVG8ocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuY29udGFpbnModGhpcy5lbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGN1cnJlbnQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgd2hpbGUgKGVsICE9PSBwYXJlbnQpIHtcbiAgICAgIG9mZnNldCArPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChlbCk7XG4gICAgICBlbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHBvc2l0aW9uIHRvIGEgc3BlY2lmaWMgdGV4dCBub2RlIGFuZCBvZmZzZXQgd2l0aGluIHRoYXQgbm9kZS5cbiAgICpcbiAgICogVGhyb3dzIGlmIGB0aGlzLm9mZnNldGAgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSW4gdGhlXG4gICAqIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaGFzIG5vIHRleHQgYW5kIGB0aGlzLm9mZnNldGAgaXMgMCwgdGhlIGBkaXJlY3Rpb25gXG4gICAqIG9wdGlvbiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucy5cbiAgICpcbiAgICogT2Zmc2V0cyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbm9kZXMgYXJlIHJlc29sdmVkIHRvIHRoZSBzdGFydCBvZiB0aGVcbiAgICogbm9kZSB0aGF0IGJlZ2lucyBhdCB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICBAcGFyYW0ge1JFU09MVkVfRk9SV0FSRFN8UkVTT0xWRV9CQUNLV0FSRFN9IFtvcHRpb25zLmRpcmVjdGlvbl0gLVxuICAgKiAgICAgU3BlY2lmaWVzIGluIHdoaWNoIGRpcmVjdGlvbiB0byBzZWFyY2ggZm9yIHRoZSBuZWFyZXN0IHRleHQgbm9kZSBpZlxuICAgKiAgICAgYHRoaXMub2Zmc2V0YCBpcyBgMGAgYW5kIGB0aGlzLmVsZW1lbnRgIGhhcyBubyB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkXG4gICAqICAgICBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfX1cbiAgICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAgICovXG4gIHJlc29sdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXNvbHZlT2Zmc2V0cyh0aGlzLmVsZW1lbnQsIHRoaXMub2Zmc2V0KVswXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMCAmJiBvcHRpb25zLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHR3ID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Um9vdE5vZGUoKSxcbiAgICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVFxuICAgICAgICApO1xuICAgICAgICB0dy5jdXJyZW50Tm9kZSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9yd2FyZHMgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUkVTT0xWRV9GT1JXQVJEUztcbiAgICAgICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7VGV4dHxudWxsfSAqLyAoXG4gICAgICAgICAgZm9yd2FyZHMgPyB0dy5uZXh0Tm9kZSgpIDogdHcucHJldmlvdXNOb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRleHQsIG9mZnNldDogZm9yd2FyZHMgPyAwIDogdGV4dC5kYXRhLmxlbmd0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgYG9mZnNldGB0aCBjaGFyYWN0ZXIgd2l0aGluXG4gICAqIGBub2RlYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21DaGFyT2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbi5mcm9tUG9pbnQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCBvZmZzZXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGlzIG5vdCBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIHN0YXJ0IG9yIGVuZCBwb2ludCAobm9kZSwgb2Zmc2V0KS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGV4dCBvciBFbGVtZW50IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIE9mZnNldCB3aXRoaW4gdGhlIG5vZGUuXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tUG9pbnQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IC8qKiBAdHlwZSB7VGV4dH0gKi8gKG5vZGUpLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBoYXMgbm8gcGFyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSArIG9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihub2RlLnBhcmVudEVsZW1lbnQsIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggYmVmb3JlIHRoZSBgb2Zmc2V0YHRoIGNoaWxkIG9mIGVsZW1lbnQuXG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgICAgIHRleHRPZmZzZXQgKz0gbm9kZVRleHRMZW5ndGgobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IGluIGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZ2lvbiBvZiBhIGRvY3VtZW50IGFzIGEgKHN0YXJ0LCBlbmQpIHBhaXIgb2YgYFRleHRQb3NpdGlvbmAgcG9pbnRzLlxuICpcbiAqIFJlcHJlc2VudGluZyBhIHJhbmdlIGluIHRoaXMgd2F5IGFsbG93cyBmb3IgY2hhbmdlcyBpbiB0aGUgRE9NIGNvbnRlbnQgb2YgdGhlXG4gKiByYW5nZSB3aGljaCBkb24ndCBhZmZlY3QgaXRzIHRleHQgY29udGVudCwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHRleHQgY29udGVudFxuICogb2YgdGhlIHJhbmdlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRSYW5nZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW1tdXRhYmxlIGBUZXh0UmFuZ2VgIGZyb20gYSBgc3RhcnRgIGFuZCBgZW5kYCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IHN0YXJ0XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gYVxuICAgKiBnaXZlbiBhbmNlc3Rvci4gU2VlIGBUZXh0UG9zaXRpb24ucmVsYXRpdmVUb2AuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgcmVsYXRpdmVUbyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlVG8oZWxlbWVudCksXG4gICAgICB0aGlzLmVuZC5yZWxhdGl2ZVRvKGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgVGV4dFJhbmdlYCB0byBhIERPTSByYW5nZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBET00gUmFuZ2Ugd2lsbCBhbHdheXMgc3RhcnQgYW5kIGVuZCBpbiBhIGBUZXh0YCBub2RlLlxuICAgKiBIZW5jZSBgVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkudG9SYW5nZSgpYCBjYW4gYmUgdXNlZCB0byBcInNocmlua1wiIGFcbiAgICogcmFuZ2UgdG8gdGhlIHRleHQgaXQgY29udGFpbnMuXG4gICAqXG4gICAqIE1heSB0aHJvdyBpZiB0aGUgYHN0YXJ0YCBvciBgZW5kYCBwb3NpdGlvbnMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cbiAgdG9SYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCA9PT0gdGhpcy5lbmQuZWxlbWVudCAmJlxuICAgICAgdGhpcy5zdGFydC5vZmZzZXQgPD0gdGhpcy5lbmQub2Zmc2V0XG4gICAgKSB7XG4gICAgICAvLyBGYXN0IHBhdGggZm9yIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGluIHNhbWUgZWxlbWVudC5cbiAgICAgIFtzdGFydCwgZW5kXSA9IHJlc29sdmVPZmZzZXRzKFxuICAgICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQsXG4gICAgICAgIHRoaXMuc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmVuZC5vZmZzZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5zdGFydC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0ZPUldBUkRTIH0pO1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9CQUNLV0FSRFMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gZXhpc3RpbmcgRE9NIGBSYW5nZWAgdG8gYSBgVGV4dFJhbmdlYFxuICAgKlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKiBAcmV0dXJuIHtUZXh0UmFuZ2V9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KFxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICByYW5nZS5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgYFRleHRSYW5nZWAgZnJvbSB0aGUgYHN0YXJ0YHRoIHRvIGBlbmRgdGggY2hhcmFjdGVycyBpbiBgcm9vdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgc3RhdGljIGZyb21PZmZzZXRzKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgc3RhcnQpLFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBlbmQpXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGNsYXNzZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBET00gYFJhbmdlYFxuICogb2JqZWN0cyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlbGVjdG9ycy4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhXG4gKiBzZXQgb2YgYW5jaG9yaW5nIGxpYnJhcmllcy4gSXQgc2VydmVzIHR3byBtYWluIHB1cnBvc2VzOlxuICpcbiAqICAxLiBQcm92aWRpbmcgYSBjb25zaXN0ZW50IGludGVyZmFjZSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFuY2hvcnMuXG4gKiAgMi4gSW5zdWxhdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIEFQSSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGFuY2hvcmluZ1xuICogICAgIGxpYnJhcmllcy5cbiAqL1xuXG5pbXBvcnQgeyBtYXRjaFF1b3RlIH0gZnJvbSAnLi9tYXRjaC1xdW90ZSc7XG5pbXBvcnQgeyBUZXh0UmFuZ2UsIFRleHRQb3NpdGlvbiB9IGZyb20gJy4vdGV4dC1yYW5nZSc7XG5pbXBvcnQgeyBub2RlRnJvbVhQYXRoLCB4cGF0aEZyb21Ob2RlIH0gZnJvbSAnLi94cGF0aCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuUmFuZ2VTZWxlY3Rvcn0gUmFuZ2VTZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFBvc2l0aW9uU2VsZWN0b3J9IFRleHRQb3NpdGlvblNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UXVvdGVTZWxlY3Rvcn0gVGV4dFF1b3RlU2VsZWN0b3JcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUmFuZ2VBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgcmFuZ2UpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhbmNob3IgZnJvbSBhIHNlcmlhbGl6ZWQgYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2VTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3Iuc3RhcnRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghc3RhcnRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgc3RhcnRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLmVuZENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFlbmRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZW5kQ29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5lbmRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpLnRvUmFuZ2UoKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7UmFuZ2VTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgLy8gXCJTaHJpbmtcIiB0aGUgcmFuZ2Ugc28gdGhhdCBpdCB0aWdodGx5IHdyYXBzIGl0cyB0ZXh0LiBUaGlzIGVuc3VyZXMgbW9yZVxuICAgIC8vIHByZWRpY3RhYmxlIG91dHB1dCBmb3IgYSBnaXZlbiB0ZXh0IHNlbGVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkUmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHRoaXMucmFuZ2UpLnRvUmFuZ2UoKTtcblxuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2Uobm9ybWFsaXplZFJhbmdlKTtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLnN0YXJ0LmVsZW1lbnQsIHRoaXMucm9vdCk7XG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2UuZW5kLmVsZW1lbnQsIHRoaXMucm9vdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JhbmdlU2VsZWN0b3InLFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzdGFydE9mZnNldDogdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIGVuZE9mZnNldDogdGV4dFJhbmdlLmVuZC5vZmZzZXQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRQb3NpdGlvblNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbkFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKFxuICAgICAgcm9vdCxcbiAgICAgIHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICB0ZXh0UmFuZ2UuZW5kLm9mZnNldFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvblNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHJvb3QsIHNlbGVjdG9yLnN0YXJ0LCBzZWxlY3Rvci5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvblNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRQb3NpdGlvblNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICB9O1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gVGV4dFJhbmdlLmZyb21PZmZzZXRzKHRoaXMucm9vdCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLnRvUmFuZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFF1b3RlTWF0Y2hPcHRpb25zXG4gKiBAcHJvcCB7bnVtYmVyfSBbaGludF0gLSBFeHBlY3RlZCBwb3NpdGlvbiBvZiBtYXRjaCBpbiB0ZXh0LiBTZWUgYG1hdGNoUXVvdGVgLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFF1b3RlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFF1b3RlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhhY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XVxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBleGFjdCwgY29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmV4YWN0ID0gZXhhY3Q7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgVGV4dFF1b3RlQW5jaG9yYCBmcm9tIGEgcmFuZ2UuXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgYHJhbmdlYCBkb2VzIG5vdCBjb250YWluIGFueSB0ZXh0IG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICAgIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBxdW90ZSB0byBjYXB0dXJlIGFzIGNvbnRleHQuIFdlIGN1cnJlbnRseVxuICAgIC8vIGFsd2F5cyB1c2UgYSBmaXhlZCBhbW91bnQsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhpcyBjb2RlIHdhcyBhd2FyZVxuICAgIC8vIG9mIGxvZ2ljYWwgYm91bmRhcmllcyBpbiB0aGUgZG9jdW1lbnQgKHBhcmFncmFwaCwgYXJ0aWNsZSBldGMuKSB0byBhdm9pZFxuICAgIC8vIGNhcHR1cmluZyB0ZXh0IHVucmVsYXRlZCB0byB0aGUgcXVvdGUuXG4gICAgLy9cbiAgICAvLyBJbiByZWd1bGFyIHByb3NlIHRoZSBpZGVhbCBjb250ZW50IHdvdWxkIG9mdGVuIGJlIHRoZSBzdXJyb3VuZGluZyBzZW50ZW5jZS5cbiAgICAvLyBUaGlzIGlzIGEgbmF0dXJhbCB1bml0IG9mIG1lYW5pbmcgd2hpY2ggZW5hYmxlcyBkaXNwbGF5aW5nIHF1b3RlcyBpblxuICAgIC8vIGNvbnRleHQgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBpcyBub3QgYXZhaWxhYmxlLiBXZSBjb3VsZCB1c2UgYEludGwuU2VnbWVudGVyYFxuICAgIC8vIGZvciB0aGlzIHdoZW4gYXZhaWxhYmxlLlxuICAgIGNvbnN0IGNvbnRleHRMZW4gPSAzMjtcblxuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCksIHtcbiAgICAgIHByZWZpeDogdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIGNvbnRleHRMZW4pLCBzdGFydCksXG4gICAgICBzdWZmaXg6IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgY29udGV4dExlbikpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRRdW90ZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHsgcHJlZml4LCBzdWZmaXggfSA9IHNlbGVjdG9yO1xuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHNlbGVjdG9yLmV4YWN0LCB7IHByZWZpeCwgc3VmZml4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRRdW90ZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRRdW90ZVNlbGVjdG9yJyxcbiAgICAgIGV4YWN0OiB0aGlzLmV4YWN0LFxuICAgICAgcHJlZml4OiB0aGlzLmNvbnRleHQucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLmNvbnRleHQuc3VmZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1JhbmdlKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnRvUG9zaXRpb25BbmNob3Iob3B0aW9ucykudG9SYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hRdW90ZSh0ZXh0LCB0aGlzLmV4YWN0LCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICBoaW50OiBvcHRpb25zLmhpbnQsXG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdW90ZSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IodGhpcy5yb290LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgVGV4dFF1b3RlQW5jaG9yIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzXCI7XG5cbi8vIENhdGNoIEpTIGVycm9ycyB0byBsb2cgdGhlbSBpbiB0aGUgYXBwLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwiZXJyb3JcIixcbiAgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgQW5kcm9pZC5sb2dFcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5maWxlbmFtZSwgZXZlbnQubGluZW5vKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8vIE5vdGlmeSBuYXRpdmUgY29kZSB0aGF0IHRoZSBwYWdlIGhhcyBsb2FkZWQuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gICAgICBzbmFwQ3VycmVudE9mZnNldCgpO1xuICAgIH0pO1xuICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8qKlxuICogSGF2aW5nIGFuIG9kZCBudW1iZXIgb2YgY29sdW1ucyB3aGVuIGRpc3BsYXlpbmcgdHdvIGNvbHVtbnMgcGVyIHNjcmVlbiBjYXVzZXMgc25hcHBpbmcgYW5kIHBhZ2VcbiAqIHR1cm5pbmcgaXNzdWVzLiBUbyBmaXggdGhpcywgd2UgaW5zZXJ0IGEgYmxhbmsgdmlydHVhbCBjb2x1bW4gYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpIHtcbiAgY29uc3QgaWQgPSBcInJlYWRpdW0tdmlydHVhbC1wYWdlXCI7XG4gIHZhciB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHx8IGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkgIT0gMikge1xuICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGNvbENvdW50ID0gZG9jdW1lbnRXaWR0aCAvIHBhZ2VXaWR0aDtcbiAgICB2YXIgaGFzT2RkQ29sQ291bnQgPSAoTWF0aC5yb3VuZChjb2xDb3VudCAqIDIpIC8gMikgJSAxID4gMC4xO1xuICAgIGlmIChoYXNPZGRDb2xDb3VudCkge1xuICAgICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2aXJ0dWFsQ29sLnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgICAgdmlydHVhbENvbC5zdHlsZS5icmVha0JlZm9yZSA9IFwiY29sdW1uXCI7XG4gICAgICAgIHZpcnR1YWxDb2wuaW5uZXJIVE1MID0gXCImIzgyMDM7XCI7IC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aXJ0dWFsQ29sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHZhciBwYWdlV2lkdGggPSAxO1xuXG5mdW5jdGlvbiBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCkge1xuICAvLyBXZSBjYW4ndCByZWx5IG9uIHdpbmRvdy5pbm5lcldpZHRoIGZvciB0aGUgcGFnZVdpZHRoIG9uIEFuZHJvaWQsIGJlY2F1c2UgaWYgdGhlXG4gIC8vIGRldmljZSBwaXhlbCByYXRpbyBpcyBub3QgYW4gaW50ZWdlciwgd2UgZ2V0IHJvdW5kaW5nIGlzc3VlcyBvZmZzZXR0aW5nIHRoZSBwYWdlcy5cbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3JlYWRpdW0tY3NzL2lzc3Vlcy85N1xuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcjItbmF2aWdhdG9yLWtvdGxpbi9pc3N1ZXMvMTQ2XG4gIHZhciB3aWR0aCA9IEFuZHJvaWQuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICBwYWdlV2lkdGggPSB3aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBzZXRQcm9wZXJ0eShcbiAgICBcIi0tUlNfX3ZpZXdwb3J0V2lkdGhcIixcbiAgICBcImNhbGMoXCIgKyB3aWR0aCArIFwicHggLyBcIiArIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICsgXCIpXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkge1xuICByZXR1cm4gcGFyc2VJbnQoXG4gICAgd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbi1jb3VudFwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1VU0VSX19zY3JvbGxcIilcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpID09IFwicmVhZGl1bS1zY3JvbGwtb25cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Q3NzU2VsZWN0b3IgfSBmcm9tIFwiY3NzLXNlbGVjdG9yLWdlbmVyYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IoKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50KCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uczoge1xuICAgICAgY3NzU2VsZWN0b3I6IGdldENzc1NlbGVjdG9yKGVsZW1lbnQpLFxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiBlbGVtZW50LnRleHRDb250ZW50LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRGaXJzdFZpc2libGVCbG9ja0VsZW1lbnQoKSB7XG4gIHJldHVybiBmaW5kRWxlbWVudChcbiAgICBkb2N1bWVudC5ib2R5LFxuICAgIChlbGVtZW50KSA9PiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXNwbGF5ICE9IFwiYmxvY2tcIlxuICApO1xufVxuXG5mdW5jdGlvbiBmaW5kRWxlbWVudChyb290RWxlbWVudCwgc2hvdWxkSWdub3JlKSB7XG4gIHZhciBmb3VuZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgY29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50KGNoaWxkLCBzaG91bGRJZ25vcmUpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNFbGVtZW50VmlzaWJsZShyb290RWxlbWVudCwgdW5kZWZpbmVkLCBzaG91bGRJZ25vcmUpKSB7XG4gICAgcmV0dXJuIHJvb3RFbGVtZW50O1xuICB9XG59XG5cbi8vIFNlZSBjb21wdXRlVmlzaWJpbGl0eV8oKSBpbiByMi1uYXZpZ2F0b3ItanNcbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoZWxlbWVudCwgZG9tUmVjdCAvKiBudWxsYWJsZSAqLywgc2hvdWxkSWdub3JlKSB7XG4gIGlmIChcbiAgICByZWFkaXVtLmlzRml4ZWRMYXlvdXQgfHxcbiAgICBlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8XG4gICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChcbiAgICAhZG9jdW1lbnQgfHxcbiAgICAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8XG4gICAgIWRvY3VtZW50LmJvZHkgfHxcbiAgICAoc2hvdWxkSWdub3JlICYmIHNob3VsZElnbm9yZShlbGVtZW50KSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIENhbm5vdCBiZSByZWxpZWQgdXBvbiwgYmVjYXVzZSB3ZWIgYnJvd3NlciBlbmdpbmUgcmVwb3J0cyBpbnZpc2libGUgd2hlbiBvdXQgb2YgdmlldyBpblxuICAgIC8vIHNjcm9sbGVkIGNvbHVtbnMhXG4gICAgLy8gY29uc3QgdmlzaWJpbGl0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2liaWxpdHlcIik7XG4gICAgLy8gaWYgKHZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIH1cbiAgICBjb25zdCBvcGFjaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3BhY2l0eVwiKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gXCIwXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWN0ID0gZG9tUmVjdCB8fCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVjdC5sZWZ0IDwgcGFnZVdpZHRoO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBsb2dFcnJvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyB0b05hdGl2ZVJlY3QgfSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBUZXh0UmFuZ2UgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZVwiO1xuXG4vLyBQb2x5ZmlsbCBmb3IgQW5kcm9pZCBBUEkgMjZcbmltcG9ydCBtYXRjaEFsbCBmcm9tIFwic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbFwiO1xubWF0Y2hBbGwuc2hpbSgpO1xuXG5jb25zdCBkZWJ1ZyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICBjb25zdCB0ZXh0ID0gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldFNlbGVjdGlvblJlY3QoKTtcbiAgcmV0dXJuIHsgdGV4dCwgcmVjdCB9O1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIGxldCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICByZXR1cm4gdG9OYXRpdmVSZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBoaWdobGlnaHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5IaWdobGlnaHQgPSBoaWdobGlnaHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhbkhpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7XG4gIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8oZG9jdW1lbnQuYm9keSk7XG4gIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgY29uc3Qgc25pcHBldExlbmd0aCA9IDIwMDtcblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGJlZm9yZSB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgZmlyc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGJlZm9yZSA9IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBzbmlwcGV0TGVuZ3RoKSwgc3RhcnQpO1xuICBsZXQgZmlyc3RXb3JkU3RhcnQgPSBiZWZvcmUuc2VhcmNoKC9cXFB7TH1cXHB7TH0vZ3UpO1xuICBpZiAoZmlyc3RXb3JkU3RhcnQgIT09IC0xKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlLnNsaWNlKGZpcnN0V29yZFN0YXJ0ICsgMSk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGFmdGVyIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBsYXN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBhZnRlciA9IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgc25pcHBldExlbmd0aCkpO1xuICBsZXQgbGFzdFdvcmRFbmQgPSBBcnJheS5mcm9tKGFmdGVyLm1hdGNoQWxsKC9cXHB7TH1cXFB7TH0vZ3UpKS5wb3AoKTtcbiAgaWYgKGxhc3RXb3JkRW5kICE9PSB1bmRlZmluZWQgJiYgbGFzdFdvcmRFbmQuaW5kZXggPiAxKSB7XG4gICAgYWZ0ZXIgPSBhZnRlci5zbGljZSgwLCBsYXN0V29yZEVuZC5pbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGlnaGxpZ2h0LCBiZWZvcmUsIGFmdGVyIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBCYXNlIHNjcmlwdCB1c2VkIGJ5IGJvdGggcmVmbG93YWJsZSBhbmQgZml4ZWQgbGF5b3V0IHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9nZXN0dXJlc1wiO1xuaW1wb3J0IHtcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb0VuZCxcbiAgc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9UZXh0LFxuICBzZXRQcm9wZXJ0eSxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUFubm90YXRpb24sXG4gIGNyZWF0ZUhpZ2hsaWdodCxcbiAgZGVzdHJveUhpZ2hsaWdodCxcbiAgZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8sXG4gIGdldFNlbGVjdGlvblJlY3QsXG4gIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCxcbiAgc2V0U2Nyb2xsTW9kZSxcbn0gZnJvbSBcIi4vaGlnaGxpZ2h0XCI7XG5pbXBvcnQgeyBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvciB9IGZyb20gXCIuL2RvbVwiO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGVjb3JhdGlvbnMsIHJlZ2lzdGVyVGVtcGxhdGVzIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbi8vIFB1YmxpYyBBUEkgdXNlZCBieSB0aGUgbmF2aWdhdG9yLlxud2luZG93LnJlYWRpdW0gPSB7XG4gIC8vIHV0aWxzXG4gIHNjcm9sbFRvSWQ6IHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb246IHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvVGV4dDogc2Nyb2xsVG9UZXh0LFxuICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodDogc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvU3RhcnQ6IHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvRW5kOiBzY3JvbGxUb0VuZCxcbiAgc2V0UHJvcGVydHk6IHNldFByb3BlcnR5LFxuICByZW1vdmVQcm9wZXJ0eTogcmVtb3ZlUHJvcGVydHksXG5cbiAgLy8gc2VsZWN0aW9uXG4gIGdldEN1cnJlbnRTZWxlY3Rpb246IGdldEN1cnJlbnRTZWxlY3Rpb24sXG5cbiAgLy8gZGVjb3JhdGlvblxuICByZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXM6IHJlZ2lzdGVyVGVtcGxhdGVzLFxuICBnZXREZWNvcmF0aW9uczogZ2V0RGVjb3JhdGlvbnMsXG5cbiAgLy8gRE9NXG4gIGZpbmRGaXJzdFZpc2libGVMb2NhdG9yOiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcixcbn07XG5cbi8vIExlZ2FjeSBoaWdobGlnaHRzIEFQSS5cbndpbmRvdy5jcmVhdGVBbm5vdGF0aW9uID0gY3JlYXRlQW5ub3RhdGlvbjtcbndpbmRvdy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG53aW5kb3cuZGVzdHJveUhpZ2hsaWdodCA9IGRlc3Ryb3lIaWdobGlnaHQ7XG53aW5kb3cuZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbztcbndpbmRvdy5nZXRTZWxlY3Rpb25SZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdDtcbndpbmRvdy5yZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQgPSByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQ7XG53aW5kb3cuc2V0U2Nyb2xsTW9kZSA9IHNldFNjcm9sbE1vZGU7XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBTY3JpcHQgdXNlZCBmb3IgZml4ZWQgbGF5b3V0cyByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vaW5kZXhcIjtcblxud2luZG93LnJlYWRpdW0uaXNGaXhlZExheW91dCA9IHRydWU7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwibG9jYXRpb25zIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IiLCJmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50IiwiZmluZEVsZW1lbnQiLCJkaXNwbGF5Iiwicm9vdEVsZW1lbnQiLCJzaG91bGRJZ25vcmUiLCJpc0VsZW1lbnRWaXNpYmxlIiwiZG9tUmVjdCIsInJlYWRpdW0iLCJlbFN0eWxlIiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js index 30c0bbd5db..9873674700 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\n\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nfunction findFirstVisibleElement(rootElement) {\n for (var i = 0; i < rootElement.children.length; i++) {\n var child = rootElement.children[i];\n\n if (child.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n var visibleElement = findFirstVisibleElement(child);\n\n if (visibleElement) {\n return visibleElement;\n }\n }\n\n if (rootElement !== document.body && rootElement !== document.documentElement) {\n var visible = isElementVisible(rootElement, undefined);\n\n if (visible) {\n return rootElement;\n }\n }\n\n return undefined;\n} // See computeVisibility_() in r2-navigator-js\n\nfunction isElementVisible(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) {\n return true;\n } else if (!document || !document.documentElement || !document.body) {\n return false;\n }\n\n if (element === document.body || element === document.documentElement) {\n return true;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n // TODO: vertical writing mode\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n }\n\n var scrollLeft = rect.left;\n var currentOffset = scrollElement.scrollLeft;\n return rect.left > 0 && rect.left < pageWidth;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleElement: findFirstVisibleElement\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFpQ0EsdUJBQWpDO0FBQ0EzWSxNQUFNLENBQUMyaUIsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBM2lCLE1BQU0sQ0FBQzBpQiwyQkFBUCxHQUFxQ0EsMkJBQXJDO0FBQ0ExaUIsTUFBTSxDQUFDOGlCLGFBQVAsR0FBdUJBLGFBQXZCLEM7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE5aUIsTUFBTSxDQUFDc2pCLE9BQVAsQ0FBZWEsWUFBZixHQUE4QixJQUE5QjtBQUVBMW1CLFFBQVEsQ0FBQ3dDLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxZQUFZO0FBQ3hEO0FBQ0EsTUFBSW1rQixJQUFJLEdBQUczbUIsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixNQUF2QixDQUFYO0FBQ0F3aUIsRUFBQUEsSUFBSSxDQUFDdmlCLFlBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsVUFBMUI7QUFDQXVpQixFQUFBQSxJQUFJLENBQUN2aUIsWUFBTCxDQUNFLFNBREYsRUFFRSw4RkFGRjtBQUlBcEUsRUFBQUEsUUFBUSxDQUFDNG1CLElBQVQsQ0FBY3BpQixXQUFkLENBQTBCbWlCLElBQTFCO0FBQ0QsQ0FURCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LXJlZmxvd2FibGUuanM/MzkyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgc2Nyb2xsVG9SZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SZWN0KHJlY3QpIHtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvU3RhcnQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvU3RhcnRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0VuZCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9FbmRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGggKiBmYWN0b3JcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIGxlZnQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbExlZnQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYIC0gcGFnZVdpZHRoO1xuICB2YXIgbWluT2Zmc2V0ID0gaXNSVEwoKSA/IC0oZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aCkgOiAwO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5tYXgob2Zmc2V0LCBtaW5PZmZzZXQpKTtcbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSByaWdodC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUmlnaHQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYICsgcGFnZVdpZHRoO1xuICB2YXIgbWF4T2Zmc2V0ID0gaXNSVEwoKSA/IDAgOiBkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5taW4ob2Zmc2V0LCBtYXhPZmZzZXQpKTtcbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZ2l2ZW4gbGVmdCBvZmZzZXQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGNsb3NlIGVub3VnaCB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuZnVuY3Rpb24gc2Nyb2xsVG9PZmZzZXQob2Zmc2V0KSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvT2Zmc2V0IFwiICsgb2Zmc2V0KTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IFwiQ2FsbGVkIHNjcm9sbFRvT2Zmc2V0KCkgd2l0aCBzY3JvbGwgbW9kZSBlbmFibGVkLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gcGFnaW5hdGVkIG1vZGUuXCI7XG4gIH1cblxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIC8vIEluIHNvbWUgY2FzZSB0aGUgc2Nyb2xsWCBjYW5ub3QgcmVhY2ggdGhlIHBvc2l0aW9uIHJlc3BlY3RpbmcgdG8gaW5uZXJXaWR0aFxuICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpIC8gcGFnZVdpZHRoO1xuICByZXR1cm4gZGlmZiA+IDAuMDE7XG59XG5cbi8vIFNuYXAgdGhlIG9mZnNldCB0byB0aGUgc2NyZWVuIHdpZHRoIChwYWdlIHdpZHRoKS5cbmZ1bmN0aW9uIHNuYXBPZmZzZXQob2Zmc2V0KSB7XG4gIHZhciB2YWx1ZSA9IG9mZnNldCArIChpc1JUTCgpID8gLTEgOiAxKTtcbiAgcmV0dXJuIHZhbHVlIC0gKHZhbHVlICUgcGFnZVdpZHRoKTtcbn1cblxuLy8gU25hcHMgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRoZSBwYWdlIHdpZHRoLlxuZnVuY3Rpb24gc25hcEN1cnJlbnRPZmZzZXQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNuYXBDdXJyZW50T2Zmc2V0XCIpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIC8vIEFkZHMgaGFsZiBhIHBhZ2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNuYXAgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICB2YXIgZGVsdGEgPSBmYWN0b3IgKiAocGFnZVdpZHRoIC8gMik7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoY3VycmVudE9mZnNldCArIGRlbHRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlRnJvbUxvY2F0b3IobG9jYXRvcikge1xuICBsZXQgdGV4dCA9IGxvY2F0b3IudGV4dDtcbiAgaWYgKCF0ZXh0IHx8ICF0ZXh0LmhpZ2hsaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIHJvb3Q7XG4gICAgbGV0IGxvY2F0aW9ucyA9IGxvY2F0b3IubG9jYXRpb25zO1xuICAgIGlmIChsb2NhdGlvbnMgJiYgbG9jYXRpb25zLmNzc1NlbGVjdG9yKSB7XG4gICAgICByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihsb2NhdGlvbnMuY3NzU2VsZWN0b3IpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIGxldCBhbmNob3IgPSBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuaGlnaGxpZ2h0LCB7XG4gICAgICBwcmVmaXg6IHRleHQuYmVmb3JlLFxuICAgICAgc3VmZml4OiB0ZXh0LmFmdGVyLFxuICAgIH0pO1xuICAgIHJldHVybiBhbmNob3IudG9SYW5nZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8vIFVzZXIgU2V0dGluZ3MuXG5cbi8vIEZvciBzZXR0aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG59XG5cbi8vIEZvciByZW1vdmluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHkoa2V5KSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcbn1cblxuLy8vIFRvb2xraXRcblxuZXhwb3J0IGZ1bmN0aW9uIGxvZygpIHtcbiAgdmFyIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO1xuICBBbmRyb2lkLmxvZyhtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0Vycm9yKG1lc3NhZ2UpIHtcbiAgQW5kcm9pZC5sb2dFcnJvcihtZXNzYWdlLCBcIlwiLCAwKTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGZhbHNlO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgRE9NUmVjdCBpbnRvIGEgSlNPTiBvYmplY3QgdW5kZXJzdGFuZGFibGUgYnkgdGhlIG5hdGl2ZSBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYXRpdmVSZWN0KHJlY3QpIHtcbiAgY29uc3QgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCB3aWR0aCA9IHJlY3Qud2lkdGggKiBwaXhlbFJhdGlvO1xuICBjb25zdCBoZWlnaHQgPSByZWN0LmhlaWdodCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGxlZnQgPSByZWN0LmxlZnQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCB0b3AgPSByZWN0LnRvcCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQ7XG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gIHJhbmdlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcblxuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZyhgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWApO1xuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgbG9nKFxuICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQge1xuICBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCxcbiAgcmVjdENvbnRhaW5zUG9pbnQsXG4gIHRvTmF0aXZlUmVjdCxcbn0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgbG9nLCBsb2dFcnJvciwgcmFuZ2VGcm9tTG9jYXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBzdHlsZXMgPSBuZXcgTWFwKCk7XG5sZXQgZ3JvdXBzID0gbmV3IE1hcCgpO1xudmFyIGxhc3RHcm91cElkID0gMDtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgc3VwcG9ydGVkIERlY29yYXRpb24gVGVtcGxhdGVzLlxuICpcbiAqIEVhY2ggdGVtcGxhdGUgb2JqZWN0IGlzIGluZGV4ZWQgYnkgdGhlIHN0eWxlIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUZW1wbGF0ZXMobmV3U3R5bGVzKSB7XG4gIHZhciBzdHlsZXNoZWV0ID0gXCJcIjtcblxuICBmb3IgKGNvbnN0IFtpZCwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld1N0eWxlcykpIHtcbiAgICBzdHlsZXMuc2V0KGlkLCBzdHlsZSk7XG4gICAgaWYgKHN0eWxlLnN0eWxlc2hlZXQpIHtcbiAgICAgIHN0eWxlc2hlZXQgKz0gc3R5bGUuc3R5bGVzaGVldCArIFwiXFxuXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlc2hlZXQpIHtcbiAgICBsZXQgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgIHN0eWxlRWxlbWVudC5pbm5lckhUTUwgPSBzdHlsZXNoZWV0O1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBEZWNvcmF0aW9uR3JvdXAgZm9yIHRoZSBnaXZlbiBncm91cCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjb3JhdGlvbnMoZ3JvdXBOYW1lKSB7XG4gIHZhciBncm91cCA9IGdyb3Vwcy5nZXQoZ3JvdXBOYW1lKTtcbiAgaWYgKCFncm91cCkge1xuICAgIGxldCBpZCA9IFwicjItZGVjb3JhdGlvbi1cIiArIGxhc3RHcm91cElkKys7XG4gICAgZ3JvdXAgPSBEZWNvcmF0aW9uR3JvdXAoaWQsIGdyb3VwTmFtZSk7XG4gICAgZ3JvdXBzLnNldChncm91cE5hbWUsIGdyb3VwKTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBjbGljayBldmVudHMgb24gYSBEZWNvcmF0aW9uLlxuICogUmV0dXJucyB3aGV0aGVyIGEgZGVjb3JhdGlvbiBtYXRjaGVkIHRoaXMgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkge1xuICBpZiAoZ3JvdXBzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kVGFyZ2V0KCkge1xuICAgIGZvciAoY29uc3QgW2dyb3VwLCBncm91cENvbnRlbnRdIG9mIGdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwQ29udGVudC5pdGVtcy5yZXZlcnNlKCkpIHtcbiAgICAgICAgaWYgKCFpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBsZXQgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9KU09OKCk7XG4gICAgICAgICAgaWYgKHJlY3RDb250YWluc1BvaW50KHJlY3QsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFksIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cCwgaXRlbSwgZWxlbWVudCwgcmVjdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB0YXJnZXQgPSBmaW5kVGFyZ2V0KCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIEFuZHJvaWQub25EZWNvcmF0aW9uQWN0aXZhdGVkKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGlkOiB0YXJnZXQuaXRlbS5kZWNvcmF0aW9uLmlkLFxuICAgICAgZ3JvdXA6IHRhcmdldC5ncm91cCxcbiAgICAgIHJlY3Q6IHRvTmF0aXZlUmVjdCh0YXJnZXQuaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksXG4gICAgICBjbGljazogY2xpY2tFdmVudCxcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEZWNvcmF0aW9uR3JvdXAgb2JqZWN0IGZyb20gYSB1bmlxdWUgSFRNTCBJRCBhbmQgaXRzIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWNvcmF0aW9uR3JvdXAoZ3JvdXBJZCwgZ3JvdXBOYW1lKSB7XG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIgbGFzdEl0ZW1JZCA9IDA7XG4gIHZhciBjb250YWluZXIgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGRlY29yYXRpb24gdG8gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkKGRlY29yYXRpb24pIHtcbiAgICBsZXQgaWQgPSBncm91cElkICsgXCItXCIgKyBsYXN0SXRlbUlkKys7XG5cbiAgICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKGRlY29yYXRpb24ubG9jYXRvcik7XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgbG9nKFwiQ2FuJ3QgbG9jYXRlIERPTSByYW5nZSBmb3IgZGVjb3JhdGlvblwiLCBkZWNvcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IHsgaWQsIGRlY29yYXRpb24sIHJhbmdlIH07XG4gICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICBsYXlvdXQoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZGVjb3JhdGlvbiB3aXRoIGdpdmVuIElEIGZyb20gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlKGRlY29yYXRpb25JZCkge1xuICAgIGxldCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaS5kZWNvcmF0aW9uLmlkID09PSBkZWNvcmF0aW9uSWQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBudWxsO1xuICAgIGlmIChpdGVtLmNvbnRhaW5lcikge1xuICAgICAgaXRlbS5jb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBpdGVtLmNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoYXQgdGhlIGdpdmVuIGRlY29yYXRpb24gd2FzIG1vZGlmaWVkIGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlKGRlY29yYXRpb24pIHtcbiAgICByZW1vdmUoZGVjb3JhdGlvbi5pZCk7XG4gICAgYWRkKGRlY29yYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGRlY29yYXRpb25zIGZyb20gdGhpcyBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZXMgdGhlIGRlY29yYXRpb24gZWxlbWVudHMuXG4gICAqXG4gICAqIFRvIGJlIGNhbGxlZCBhZnRlciByZWZsb3dpbmcgdGhlIHJlc291cmNlLCBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVlc3RMYXlvdXQoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBsYXlvdXQoaXRlbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExheW91dHMgYSBzaW5nbGUgRGVjb3JhdGlvbiBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gbGF5b3V0KGl0ZW0pIHtcbiAgICBsZXQgZ3JvdXBDb250YWluZXIgPSByZXF1aXJlQ29udGFpbmVyKCk7XG5cbiAgICBsZXQgc3R5bGUgPSBzdHlsZXMuZ2V0KGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaWYgKCFzdHlsZSkge1xuICAgICAgbG9nRXJyb3IoYFVua25vd24gZGVjb3JhdGlvbiBzdHlsZTogJHtpdGVtLmRlY29yYXRpb24uc3R5bGV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgaXRlbS5pZCk7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlXCIsIGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaXRlbUNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIGxldCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gcGFyc2VJbnQoXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgXCJjb2x1bW4tY291bnRcIlxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IHBhZ2VXaWR0aCA9IHZpZXdwb3J0V2lkdGggLyAoY29sdW1uQ291bnQgfHwgMSk7XG4gICAgbGV0IHNjcm9sbGluZ0VsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICAgIGxldCB4T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCB5T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnQoZWxlbWVudCwgcmVjdCwgYm91bmRpbmdSZWN0KSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXG4gICAgICBpZiAoc3R5bGUud2lkdGggPT09IFwid3JhcFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtyZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3ZpZXdwb3J0V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHZpZXdwb3J0V2lkdGgpICogdmlld3BvcnRXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcImJvdW5kc1wiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZGluZ1JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Ym91bmRpbmdSZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJwYWdlXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3BhZ2VXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gcGFnZVdpZHRoKSAqIHBhZ2VXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGJvdW5kaW5nUmVjdCA9IGl0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBsZXQgZWxlbWVudFRlbXBsYXRlO1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBpdGVtLmRlY29yYXRpb24uZWxlbWVudC50cmltKCk7XG4gICAgICBlbGVtZW50VGVtcGxhdGUgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihcbiAgICAgICAgYEludmFsaWQgZGVjb3JhdGlvbiBlbGVtZW50IFwiJHtpdGVtLmRlY29yYXRpb24uZWxlbWVudH1cIjogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3hlc1wiKSB7XG4gICAgICBsZXQgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IHRydWU7XG4gICAgICBsZXQgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICAgICAgaXRlbS5yYW5nZSxcbiAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgKTtcblxuICAgICAgY2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5zb3J0KChyMSwgcjIpID0+IHtcbiAgICAgICAgaWYgKHIxLnRvcCA8IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChyMS50b3AgPiByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudChsaW5lLCBjbGllbnRSZWN0LCBib3VuZGluZ1JlY3QpO1xuICAgICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChsaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgY29uc3QgYm91bmRzID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGJvdW5kcy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIHBvc2l0aW9uRWxlbWVudChib3VuZHMsIGJvdW5kaW5nUmVjdCwgYm91bmRpbmdSZWN0KTtcblxuICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQoYm91bmRzKTtcbiAgICB9XG5cbiAgICBncm91cENvbnRhaW5lci5hcHBlbmQoaXRlbUNvbnRhaW5lcik7XG4gICAgaXRlbS5jb250YWluZXIgPSBpdGVtQ29udGFpbmVyO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgaXRlbUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtYWN0aXZhYmxlPScxJ11cIilcbiAgICApO1xuICAgIGlmIChpdGVtLmNsaWNrYWJsZUVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oaXRlbUNvbnRhaW5lci5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIGNvbnRhaW5lciBlbGVtZW50LCBhZnRlciBtYWtpbmcgc3VyZSBpdCBleGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1aXJlQ29udGFpbmVyKCkge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGdyb3VwSWQpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtZ3JvdXBcIiwgZ3JvdXBOYW1lKTtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ3JvdXAgY29udGFpbmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXJDb250YWluZXIoKSB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhZGQsIHJlbW92ZSwgdXBkYXRlLCBjbGVhciwgaXRlbXMsIHJlcXVlc3RMYXlvdXQgfTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2lsbCByZWxheW91dCBhbGwgdGhlIGRlY29yYXRpb25zIHdoZW4gdGhlIGRvY3VtZW50IGJvZHkgaXMgcmVzaXplZC5cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgbGFzdFNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RTaXplLndpZHRoID09PSBib2R5LmNsaWVudFdpZHRoICYmXG4gICAgICAgIGxhc3RTaXplLmhlaWdodCA9PT0gYm9keS5jbGllbnRIZWlnaHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IGJvZHkuY2xpZW50V2lkdGgsXG4gICAgICAgIGhlaWdodDogYm9keS5jbGllbnRIZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAucmVxdWVzdExheW91dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShib2R5KTtcbiAgfSxcbiAgZmFsc2Vcbik7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4gKiBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2ssIGZhbHNlKTtcbn0pO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgLy8gVGhlcmUncyBhbiBvbi1nb2luZyBzZWxlY3Rpb24sIHRoZSB0YXAgd2lsbCBkaXNtaXNzIGl0IHNvIHdlIGRvbid0IGZvcndhcmQgaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgbGV0IGNsaWNrRXZlbnQgPSB7XG4gICAgZGVmYXVsdFByZXZlbnRlZDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZCxcbiAgICB4OiBldmVudC5jbGllbnRYICogcGl4ZWxSYXRpbyxcbiAgICB5OiBldmVudC5jbGllbnRZICogcGl4ZWxSYXRpbyxcbiAgICB0YXJnZXRFbGVtZW50OiBldmVudC50YXJnZXQub3V0ZXJIVE1MLFxuICAgIGludGVyYWN0aXZlRWxlbWVudDogbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChldmVudC50YXJnZXQpLFxuICB9O1xuXG4gIGlmIChoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTZW5kIHRoZSB0YXAgZGF0YSBvdmVyIHRoZSBKUyBicmlkZ2UgZXZlbiBpZiBpdCdzIGJlZW4gaGFuZGxlZCB3aXRoaW4gdGhlIHdlYiB2aWV3LCBzbyB0aGF0XG4gIC8vIGl0IGNhbiBiZSBwcmVzZXJ2ZWQgYW5kIHVzZWQgYnkgdGhlIHRvb2xraXQgaWYgbmVlZGVkLlxuICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uVGFwKEpTT04uc3RyaW5naWZ5KGNsaWNrRXZlbnQpKTtcblxuICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5cbi8vIFNlZS4gaHR0cHM6Ly9naXRodWIuY29tL0pheVBhbm96L2FyY2hpdGVjdHVyZS90cmVlL3RvdWNoLWhhbmRsaW5nL21pc2MvdG91Y2gtaGFuZGxpbmdcbmZ1bmN0aW9uIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgaW50ZXJhY3RpdmVUYWdzID0gW1xuICAgIFwiYVwiLFxuICAgIFwiYXVkaW9cIixcbiAgICBcImJ1dHRvblwiLFxuICAgIFwiY2FudmFzXCIsXG4gICAgXCJkZXRhaWxzXCIsXG4gICAgXCJpbnB1dFwiLFxuICAgIFwibGFiZWxcIixcbiAgICBcIm9wdGlvblwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzdWJtaXRcIixcbiAgICBcInRleHRhcmVhXCIsXG4gICAgXCJ2aWRlb1wiLFxuICBdO1xuICBpZiAoaW50ZXJhY3RpdmVUYWdzLmluZGV4T2YoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGVkaXRhYmxlIGJ5IHRoZSB1c2VyLlxuICBpZiAoXG4gICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKS50b0xvd2VyQ2FzZSgpICE9IFwiZmFsc2VcIlxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3MgcGFyZW50cyByZWN1cnNpdmVseSBiZWNhdXNlIHRoZSB0b3VjaCBtaWdodCBiZSBmb3IgZXhhbXBsZSBvbiBhbiA8ZW0+IGluc2lkZSBhIDxhPi5cbiAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgIHJldHVybiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vL1xuLy8gIGhpZ2hsaWdodC5qc1xuLy8gIHIyLW5hdmlnYXRvci1rb3RsaW5cbi8vXG4vLyAgT3JnYW5pemVkIGJ5IFRhZWh5dW4gS2ltIG9uIDYvMjcvMTkgZnJvbSByMi1uYXZpZ2F0b3ItanMuXG4vL1xuLy8gIENvcHlyaWdodCAyMDE5IFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHdoaWNoIGlzIGRldGFpbGVkXG4vLyAgaW4gdGhlIExJQ0VOU0UgZmlsZSBwcmVzZW50IGluIHRoZSBwcm9qZWN0IHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBzb3VyY2UgY29kZSBpcyBtYWludGFpbmVkLlxuLy9cblxuY29uc3QgUk9PVF9DTEFTU19SRURVQ0VfTU9USU9OID0gXCJyMi1yZWR1Y2UtbW90aW9uXCI7XG5jb25zdCBST09UX0NMQVNTX05PX0ZPT1ROT1RFUyA9IFwicjItbm8tcG9wdXAtZm9vbm90ZXNcIjtcbmNvbnN0IFBPUFVQX0RJQUxPR19DTEFTUyA9IFwicjItcG9wdXAtZGlhbG9nXCI7XG5jb25zdCBGT09UTk9URVNfQ09OVEFJTkVSX0NMQVNTID0gXCJyMi1mb290bm90ZS1jb250YWluZXJcIjtcbmNvbnN0IEZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNsb3NlXCI7XG5jb25zdCBGT09UTk9URV9GT1JDRV9TSE9XID0gXCJyMi1mb290bm90ZS1mb3JjZS1zaG93XCI7XG5jb25zdCBUVFNfSURfUFJFVklPVVMgPSBcInIyLXR0cy1wcmV2aW91c1wiO1xuY29uc3QgVFRTX0lEX05FWFQgPSBcInIyLXR0cy1uZXh0XCI7XG5jb25zdCBUVFNfSURfU0xJREVSID0gXCJyMi10dHMtc2xpZGVyXCI7XG5jb25zdCBUVFNfSURfQUNUSVZFX1dPUkQgPSBcInIyLXR0cy1hY3RpdmUtd29yZFwiO1xuY29uc3QgVFRTX0lEX0NPTlRBSU5FUiA9IFwicjItdHRzLXR4dFwiO1xuY29uc3QgVFRTX0lEX0lORk8gPSBcInIyLXR0cy1pbmZvXCI7XG5jb25zdCBUVFNfTkFWX0JVVFRPTl9DTEFTUyA9IFwicjItdHRzLWJ1dHRvblwiO1xuY29uc3QgVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UID0gXCJyMi10dHMtc3BlYWtpbmctZWxcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOID0gXCJyMi10dHMtc3BlYWtpbmctdHh0XCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9JTkpFQ1RFRF9QQVJFTlQgPSBcInIyLXR0cy1zcGVha2luZy10eHQtcGFyZW50XCI7XG5jb25zdCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUiA9IFwiUjJfSURfSElHSExJR0hUU19DT05UQUlORVJcIjtcbmNvbnN0IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9JRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9BUkVBXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXCI7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5jb25zdCBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSA9IFtcbiAgUE9QVVBfRElBTE9HX0NMQVNTLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTixcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4sXG4gIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQVJFQSxcbiAgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEsXG4gIFwicmVzaXplLXNlbnNvclwiLFxuXTtcbmNvbnN0IENMQVNTX1BBR0lOQVRFRCA9IFwicjItY3NzLXBhZ2luYXRlZFwiO1xuXG4vL2NvbnN0IElTX0RFViA9IChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldlwiKTtcbmNvbnN0IElTX0RFViA9IGZhbHNlO1xuY29uc3QgX2hpZ2hsaWdodHMgPSBbXTtcblxubGV0IF9oaWdobGlnaHRzQ29udGFpbmVyO1xubGV0IF9hbm5vdGF0aW9uQ29udGFpbmVyO1xubGV0IGxhc3RNb3VzZURvd25YID0gLTE7XG5sZXQgbGFzdE1vdXNlRG93blkgPSAtMTtcbmxldCBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSBmYWxzZTtcblxuY29uc3QgVVNFX1NWRyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjM7XG5jb25zdCBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC40NTtcblxuLy9jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSB7XG4gIGJsdWU6IDEwMCxcbiAgZ3JlZW46IDUwLFxuICByZWQ6IDIzMCxcbn07XG5cbmNvbnN0IEFOTk9UQVRJT05fV0lEVEggPSAxNTtcblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKF93aW4sIGhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gIGlmIChcbiAgICBoaWdobGlnaHRCb3VuZGluZy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSA9PSBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLm91dGxpbmUgPSBcIm5vbmVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgXCJ0cmFuc3BhcmVudFwiLFxuICAgIFwiaW1wb3J0YW50XCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYXMsIGhpZ2hsaWdodCkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgaGlnaGxpZ2h0QXJlYXMpIHtcbiAgICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gICAgY29uc3Qgb3BhY2l0eSA9IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGxcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gIGNvbnN0IGlkID0gaXNTVkdcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlkKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCkgPT4ge1xuICAgICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICAgIH0pO1xuICAgIGlmIChoaWdobGlnaHQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICAgIGlmIChpc1NWRykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbFwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICAvLyAgICBfaGlnaGxpZ2h0cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgLy8gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGEuc2VsZWN0aW9uSW5mbykpXG4gIC8vICAgICAgICByZXR1cm4gYS5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGggPCBiLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aFxuICAvLyAgICB9KVxuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcInRvdWNoc3RhcnRcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LmlkLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3VuZEhpZ2hsaWdodC5pZC5pbmNsdWRlcyhcIlIyX0FOTk9UQVRJT05fXCIpKTtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZXVwXCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCB0b3VjaGVkUG9zaXRpb24gPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVkUG9zaXRpb24sXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBsZXQgdG9QcmVzZXJ2ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW107XG4gICAgICAgICAgdG9DaGVjay5wdXNoKHRvUHJlc2VydmUpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRvQ2hlY2ssIHRvQWRkKTtcbiAgICAgICAgICBjaGVja092ZXJsYXBzKHRvQ2hlY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gY2hlY2tPdmVybGFwcyhyZWN0cykge1xuICBjb25zdCBzdGlsbE92ZXJsYXBpbmdSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJlY3QxIG9mIHJlY3RzKSB7XG4gICAgZm9yIChjb25zdCByZWN0MiBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhczEgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QxKSA+PSAwO1xuICAgICAgY29uc3QgaGFzMiA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDIpID49IDA7XG4gICAgICBpZiAoIWhhczEgfHwgIWhhczIpIHtcbiAgICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgICBpZiAoIWhhczEpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWhhczIpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiBvdmVybGFwIC0tLVwiKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMSBUT1A6JHtyZWN0MS50b3B9IEJPVFRPTToke3JlY3QxLmJvdHRvbX0gTEVGVDoke3JlY3QxLmxlZnR9IFJJR0hUOiR7cmVjdDEucmlnaHR9IFdJRFRIOiR7cmVjdDEud2lkdGh9IEhFSUdIVDoke3JlY3QxLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMiBUT1A6JHtyZWN0Mi50b3B9IEJPVFRPTToke3JlY3QyLmJvdHRvbX0gTEVGVDoke3JlY3QyLmxlZnR9IFJJR0hUOiR7cmVjdDIucmlnaHR9IFdJRFRIOiR7cmVjdDIud2lkdGh9IEhFSUdIVDoke3JlY3QyLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB4T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWChyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB4T3ZlcmxhcDogJHt4T3ZlcmxhcH1gKTtcbiAgICAgICAgICBjb25zdCB5T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWShyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB5T3ZlcmxhcDogJHt5T3ZlcmxhcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5sb2coYENMSUVOVCBSRUNUOiBvdmVybGFwcyAke3N0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIH1cbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgY29uc3QgcmVjdCA9IHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAocmFuZ2UsIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMpIHtcbiAgY29uc3QgcmFuZ2VDbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG4gIHJldHVybiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gICAgcmFuZ2VDbGllbnRSZWN0cyxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgY2xpZW50UmVjdHMsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY2hlY2tPdmVybGFwcyhuZXdSZWN0cyk7XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGVkKGRvY3VtZW50KSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX1BBR0lOQVRFRClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCkge1xuICBpZiAoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgaWYgKCFib2R5RXZlbnRMaXN0ZW5lcnNTZXQpIHtcbiAgICAgIGJvZHlFdmVudExpc3RlbmVyc1NldCA9IHRydWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vkb3duXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGxhc3RNb3VzZURvd25YID0gZXYuY2xpZW50WDtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWSA9IGV2LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNldXBcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blggLSBldi5jbGllbnRYKSA8IDMgJiZcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25ZIC0gZXYuY2xpZW50WSkgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlbW92ZVwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJ0b3VjaGVuZFwiLFxuICAgICAgICBmdW5jdGlvbiB0b3VjaEVuZChlKSB7XG4gICAgICAgICAgcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUik7XG5cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChfaGlnaGxpZ2h0c0NvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gX2hpZ2hsaWdodHNDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGhpZGVBbGxoaWdobGlnaHRzKCkge1xuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveUFsbGhpZ2hsaWdodHMoKSB7XG4gIGhpZGVBbGxoaWdobGlnaHRzKCk7XG4gIF9oaWdobGlnaHRzLnNwbGljZSgwLCBfaGlnaGxpZ2h0cy5sZW5ndGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzdHJveUhpZ2hsaWdodChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBsZXQgX2RvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGhpZ2hsaWdodCAmJiBpID49IDAgJiYgaSA8IF9oaWdobGlnaHRzLmxlbmd0aCkge1xuICAgIF9oaWdobGlnaHRzLnNwbGljZShpLCAxKTtcbiAgfVxuICBjb25zdCBoaWdobGlnaHRDb250YWluZXIgPSBfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaGlnaGxpZ2h0Q29udGFpbmVyKSB7XG4gICAgaGlnaGxpZ2h0Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2ZpVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChlbGVtZW50LCBjaGlsZCkge1xuICBsZXQgZm91bmQgPSAtMTtcbiAgbGV0IHRleHROb2RlSW5kZXggPSAtMTtcbiAgbGV0IHByZXZpb3VzV2FzRWxlbWVudCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBjb25zdCBpc1RleHQgPSBpc0NmaVRleHROb2RlKGNoaWxkTm9kZSk7XG4gICAgaWYgKGlzVGV4dCB8fCBwcmV2aW91c1dhc0VsZW1lbnQpIHtcbiAgICAgIHRleHROb2RlSW5kZXggKz0gMjtcbiAgICB9XG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgaWYgKGNoaWxkTm9kZSA9PT0gY2hpbGQpIHtcbiAgICAgICAgZm91bmQgPSB0ZXh0Tm9kZUluZGV4O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcHJldmlvdXNXYXNFbGVtZW50ID0gY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChub2RlMSwgbm9kZTIpIHtcbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMSA9PT0gbm9kZTIpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMS5jb250YWlucyhub2RlMikpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMi5jb250YWlucyhub2RlMSkpIHtcbiAgICByZXR1cm4gbm9kZTI7XG4gIH1cbiAgY29uc3Qgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBsZXQgcGFyZW50ID0gbm9kZTEucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgY29uc3Qgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBwYXJlbnQgPSBub2RlMi5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBsZXQgY29tbW9uQW5jZXN0b3IgPSBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoXG4gICAgKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH1cbiAgKTtcbiAgaWYgKCFjb21tb25BbmNlc3Rvcikge1xuICAgIGNvbW1vbkFuY2VzdG9yID0gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKChub2RlMkVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMkVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbW9uQW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIGZ1bGxRdWFsaWZpZWRTZWxlY3Rvcihub2RlKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZU5hbWU7XG4gIH1cbiAgLy9yZXR1cm4gY3NzUGF0aChub2RlLCBqdXN0U2VsZWN0b3IpO1xuICByZXR1cm4gY3NzUGF0aChub2RlLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIENPTExBUFNFRC5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYXdUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuVGV4dCA9IHJhd1RleHQudHJpbSgpLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhblRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFRFWFQgRU1QVFkuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZUluZm8gPSBjb252ZXJ0UmFuZ2UocmFuZ2UsIGZ1bGxRdWFsaWZpZWRTZWxlY3RvciwgY29tcHV0ZUNGSSk7XG4gIGlmICghcmFuZ2VJbmZvKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFJBTkdFIElORk8gRkFJTD8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoSVNfREVWICYmIERFQlVHX1ZJU1VBTFMpIHtcbiAgICBjb25zdCByZXN0b3JlZFJhbmdlID0gY29udmVydFJhbmdlSW5mbyh3aW4uZG9jdW1lbnQsIHJhbmdlSW5mbyk7XG4gICAgaWYgKHJlc3RvcmVkUmFuZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCA9PT0gcmFuZ2Uuc3RhcnRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQgPT09IHJhbmdlLmVuZE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRUQgT0tBWSAoZGV2IGNoZWNrKS5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFIEZBSUwgKGRldiBjaGVjaykuXCIpO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJTRUxFQ1RJT05cIixcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIk9SREVSRUQgUkFOR0UgRlJPTSBTRUxFQ1RJT05cIixcbiAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlJFU1RPUkVEIFJBTkdFXCIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0FOTk9UIFJFU1RPUkUgU0VMRUNUSU9OIFJBTkdFID8/IVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbyksXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiByYXdUZXh0LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrQmxhY2tsaXN0ZWQoZWwpIHtcbiAgbGV0IGJsYWNrbGlzdGVkSWQ7XG4gIGNvbnN0IGlkID0gZWwuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG4gIGlmIChpZCAmJiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSS5pbmRleE9mKGlkKSA+PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIElEOiBcIiArIGlkKTtcbiAgICBibGFja2xpc3RlZElkID0gaWQ7XG4gIH1cbiAgbGV0IGJsYWNrbGlzdGVkQ2xhc3M7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSkge1xuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoaXRlbSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBDTEFTUzogXCIgKyBpdGVtKTtcbiAgICAgIGJsYWNrbGlzdGVkQ2xhc3MgPSBpdGVtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChibGFja2xpc3RlZElkIHx8IGJsYWNrbGlzdGVkQ2xhc3MpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzUGF0aChub2RlLCBvcHRpbWl6ZWQpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBzdGVwcyA9IFtdO1xuICBsZXQgY29udGV4dE5vZGUgPSBub2RlO1xuICB3aGlsZSAoY29udGV4dE5vZGUpIHtcbiAgICBjb25zdCBzdGVwID0gX2Nzc1BhdGhTdGVwKGNvbnRleHROb2RlLCAhIW9wdGltaXplZCwgY29udGV4dE5vZGUgPT09IG5vZGUpO1xuICAgIGlmICghc3RlcCkge1xuICAgICAgYnJlYWs7IC8vIEVycm9yIC0gYmFpbCBvdXQgZWFybHkuXG4gICAgfVxuICAgIHN0ZXBzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgaWYgKHN0ZXAub3B0aW1pemVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29udGV4dE5vZGUgPSBjb250ZXh0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIHN0ZXBzLnJldmVyc2UoKTtcbiAgcmV0dXJuIHN0ZXBzLmpvaW4oXCIgPiBcIik7XG59XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9tYXN0ZXIvU291cmNlL2RldnRvb2xzL2Zyb250X2VuZC9jb21wb25lbnRzL0RPTVByZXNlbnRhdGlvblV0aWxzLmpzIzMxNlxuZnVuY3Rpb24gX2Nzc1BhdGhTdGVwKG5vZGUsIG9wdGltaXplZCwgaXNUYXJnZXROb2RlKSB7XG4gIGZ1bmN0aW9uIHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMobmQpIHtcbiAgICBjb25zdCBjbGFzc0F0dHJpYnV0ZSA9IG5kLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIGlmICghY2xhc3NBdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NBdHRyaWJ1dGVcbiAgICAgIC5zcGxpdCgvXFxzKy9nKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcCgobm0pID0+IHtcbiAgICAgICAgLy8gVGhlIHByZWZpeCBpcyByZXF1aXJlZCB0byBzdG9yZSBcIl9fcHJvdG9fX1wiIGluIGEgb2JqZWN0LWJhc2VkIG1hcC5cbiAgICAgICAgcmV0dXJuIFwiJFwiICsgbm07XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlkU2VsZWN0b3IoaWRkKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZCk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRlbnQpIHtcbiAgICBpZiAoaXNDU1NJZGVudGlmaWVyKGlkZW50KSkge1xuICAgICAgcmV0dXJuIGlkZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEVzY2FwZUZpcnN0ID0gL14oPzpbMC05XXwtWzAtOS1dPykvLnRlc3QoaWRlbnQpO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlkZW50Lmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGlkZW50LnJlcGxhY2UoLy4vZywgZnVuY3Rpb24gKGMsIGlpKSB7XG4gICAgICByZXR1cm4gKHNob3VsZEVzY2FwZUZpcnN0ICYmIGlpID09PSAwKSB8fCAhaXNDU1NJZGVudENoYXIoYylcbiAgICAgICAgPyBlc2NhcGVBc2NpaUNoYXIoYywgaWkgPT09IGxhc3RJbmRleClcbiAgICAgICAgOiBjO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlQXNjaWlDaGFyKGMsIGlzTGFzdCkge1xuICAgIHJldHVybiBcIlxcXFxcIiArIHRvSGV4Qnl0ZShjKSArIChpc0xhc3QgPyBcIlwiIDogXCIgXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9IZXhCeXRlKGMpIHtcbiAgICBsZXQgaGV4Qnl0ZSA9IGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gICAgaWYgKGhleEJ5dGUubGVuZ3RoID09PSAxKSB7XG4gICAgICBoZXhCeXRlID0gXCIwXCIgKyBoZXhCeXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGV4Qnl0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRDaGFyKGMpIHtcbiAgICBpZiAoL1thLXpBLVowLTlfLV0vLnRlc3QoYykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApID49IDB4YTA7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50aWZpZXIodmFsdWUpIHtcbiAgICByZXR1cm4gL14tP1thLXpBLVpfXVthLXpBLVowLTlfLV0qJC8udGVzdCh2YWx1ZSk7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBlbGVtZW50ID0gbm9kZTtcblxuICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cbiAgaWYgKG9wdGltaXplZCkge1xuICAgIGlmIChpZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogaWRTZWxlY3RvcihpZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImJvZHlcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJoZWFkXCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaHRtbFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBsb3dlckNhc2VOYW1lLCAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBub2RlTmFtZSA9IGxvd2VyQ2FzZU5hbWU7IC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7XG4gIGlmIChpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUgKyBpZFNlbGVjdG9yKGlkKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50IHx8IHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhlbGVtZW50KTtcblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICBpZiAocHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmVlZHNDbGFzc05hbWVzID0gZmFsc2U7XG4gIGxldCBuZWVkc050aENoaWxkID0gZmFsc2U7XG4gIGxldCBvd25JbmRleCA9IC0xO1xuICBsZXQgZWxlbWVudEluZGV4ID0gLTE7XG4gIGNvbnN0IHNpYmxpbmdzID0gcGFyZW50LmNoaWxkcmVuO1xuXG4gIGZvciAoXG4gICAgbGV0IGkgPSAwO1xuICAgIChvd25JbmRleCA9PT0gLTEgfHwgIW5lZWRzTnRoQ2hpbGQpICYmIGkgPCBzaWJsaW5ncy5sZW5ndGg7XG4gICAgKytpXG4gICkge1xuICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICBpZiAoc2libGluZy5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBlbGVtZW50SW5kZXggKz0gMTtcbiAgICBpZiAoc2libGluZyA9PT0gbm9kZSkge1xuICAgICAgb3duSW5kZXggPSBlbGVtZW50SW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNpYmxpbmcubm9kZU5hbWVJbkNvcnJlY3RDYXNlKClcbiAgICBjb25zdCBzaWJsaW5nTmFtZSA9XG4gICAgICAoc2libGluZy5sb2NhbE5hbWUgJiYgc2libGluZy5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIHNpYmxpbmcubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc2libGluZ05hbWUgIT09IG5vZGVOYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmVlZHNDbGFzc05hbWVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IG93bkNsYXNzTmFtZXMgPSBbXTtcbiAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBvd25DbGFzc05hbWVzLnB1c2goYXJySXRlbSk7XG4gICAgfSk7XG4gICAgbGV0IG93bkNsYXNzTmFtZUNvdW50ID0gb3duQ2xhc3NOYW1lcy5sZW5ndGg7XG5cbiAgICBpZiAob3duQ2xhc3NOYW1lQ291bnQgPT09IDApIHtcbiAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhzaWJsaW5nKTtcbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIGlmIChzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc2libGluZ0NsYXNzIG9mIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIGNvbnN0IGluZCA9IG93bkNsYXNzTmFtZXMuaW5kZXhPZihzaWJsaW5nQ2xhc3MpO1xuICAgICAgaWYgKGluZCA8IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG93bkNsYXNzTmFtZXMuc3BsaWNlKGluZCwgMSk7IC8vIGRlbGV0ZSBvd25DbGFzc05hbWVzW3NpYmxpbmdDbGFzc107XG5cbiAgICAgIGlmICghLS1vd25DbGFzc05hbWVDb3VudCkge1xuICAgICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdCA9IG5vZGVOYW1lO1xuICBpZiAoXG4gICAgaXNUYXJnZXROb2RlICYmXG4gICAgbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIilcbiAgKSB7XG4gICAgcmVzdWx0ICs9ICdbdHlwZT1cIicgKyBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgKyAnXCJdJztcbiAgfVxuICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgIHJlc3VsdCArPSBcIjpudGgtY2hpbGQoXCIgKyAob3duSW5kZXggKyAxKSArIFwiKVwiO1xuICB9IGVsc2UgaWYgKG5lZWRzQ2xhc3NOYW1lcykge1xuICAgIGZvciAoY29uc3QgcHJlZml4ZWROYW1lIG9mIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICByZXN1bHQgKz0gXCIuXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQocHJlZml4ZWROYW1lLnN1YnN0cigxKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpbWl6ZWQ6IGZhbHNlLFxuICAgIHZhbHVlOiByZXN1bHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDRkkobm9kZSkge1xuICAvLyBUT0RPOiBoYW5kbGUgY2hhcmFjdGVyIHBvc2l0aW9uIGluc2lkZSB0ZXh0IG5vZGVcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBjZmkgPSBcIlwiO1xuXG4gIGxldCBjdXJyZW50RWxlbWVudCA9IG5vZGU7XG4gIHdoaWxlIChcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlICYmXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgKSB7XG4gICAgY29uc3QgYmxhY2tsaXN0ZWQgPSBjaGVja0JsYWNrbGlzdGVkKGN1cnJlbnRFbGVtZW50KTtcbiAgICBpZiAoIWJsYWNrbGlzdGVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbjtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudEluZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuW2ldKSB7XG4gICAgICAgICAgY3VycmVudEVsZW1lbnRJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudEluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXggPSAoY3VycmVudEVsZW1lbnRJbmRleCArIDEpICogMjtcbiAgICAgICAgY2ZpID1cbiAgICAgICAgICBjZmlJbmRleCArXG4gICAgICAgICAgKGN1cnJlbnRFbGVtZW50LmlkID8gXCJbXCIgKyBjdXJyZW50RWxlbWVudC5pZCArIFwiXVwiIDogXCJcIikgK1xuICAgICAgICAgIChjZmkubGVuZ3RoID8gXCIvXCIgKyBjZmkgOiBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIFwiL1wiICsgY2ZpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlSGlnaGxpZ2h0KGxvY2F0aW9ucywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbiwgdHlwZSkge1xuICBjb25zdCByYW5nZUluZm8gPSBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb25zKTtcbiAgY29uc3QgdW5pcXVlU3RyID0gYCR7cmFuZ2VJbmZvLmNmaX0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5zdGFydE9mZnNldH0ke3JhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLmVuZE9mZnNldH1gO1xuXG4gIGNvbnN0IGhhc2ggPSByZXF1aXJlKFwiaGFzaC5qc1wiKTtcbiAgY29uc3Qgc2hhMjU2SGV4ID0gaGFzaC5zaGEyNTYoKS51cGRhdGUodW5pcXVlU3RyKS5kaWdlc3QoXCJoZXhcIik7XG5cbiAgdmFyIGlkO1xuICBpZiAodHlwZSA9PSBJRF9ISUdITElHSFRTX0NPTlRBSU5FUikge1xuICAgIGlkID0gXCJSMl9ISUdITElHSFRfXCIgKyBzaGEyNTZIZXg7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBcIlIyX0FOTk9UQVRJT05fXCIgKyBzaGEyNTZIZXg7XG4gIH1cblxuICBkZXN0cm95SGlnaGxpZ2h0KGlkKTtcblxuICBjb25zdCBoaWdobGlnaHQgPSB7XG4gICAgY29sb3I6IGNvbG9yID8gY29sb3IgOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgaWQsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIHJhbmdlSW5mbyxcbiAgfTtcbiAgX2hpZ2hsaWdodHMucHVzaChoaWdobGlnaHQpO1xuICBjcmVhdGVIaWdobGlnaHREb20oXG4gICAgd2luZG93LFxuICAgIGhpZ2hsaWdodCxcbiAgICB0eXBlID09IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uKSB7XG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIHNlbGVjdGlvbkluZm8sXG4gICAgY29sb3IsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uKGlkKSB7XG4gIGxldCBpID0gLTE7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChpID09IF9oaWdobGlnaHRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gIHZhciBsb2NhdGlvbnMgPSB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24oaGlnaGxpZ2h0LnJhbmdlSW5mbyksXG4gIH07XG5cbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgbG9jYXRpb25zLFxuICAgIGhpZ2hsaWdodC5jb2xvcixcbiAgICB0cnVlLFxuICAgIElEX0FOTk9UQVRJT05fQ09OVEFJTkVSXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodERvbSh3aW4sIGhpZ2hsaWdodCwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2NhbGUgPVxuICAgIDEgL1xuICAgICh3aW4uUkVBRElVTTIgJiYgd2luLlJFQURJVU0yLmlzRml4ZWRMYXlvdXRcbiAgICAgID8gd2luLlJFQURJVU0yLmZ4bFZpZXdwb3J0U2NhbGVcbiAgICAgIDogMSk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBoaWdobGlnaHRzQ29udGFpbmVyID0gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpO1xuICBjb25zdCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBoaWdobGlnaHQuaWQpO1xuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUik7XG5cbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgaGlnaGxpZ2h0UGFyZW50LnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBpZiAoaGlnaGxpZ2h0LnBvaW50ZXJJbnRlcmFjdGlvbikge1xuICAgIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIsIFwiMVwiKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgbGV0IGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnO1xuICBjb25zdCByb3VuZGVkQ29ybmVyID0gMztcbiAgY29uc3QgdW5kZXJsaW5lVGhpY2tuZXNzID0gMjtcbiAgY29uc3Qgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgPSAzO1xuICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gIGxldCBleHRyYSA9IFwiXCI7XG4gIGNvbnN0IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCA9XG4gICAgZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGhpZ2hsaWdodC5pZCk7XG5cbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBsZXQgYW5ub3RhdGlvbk9mZnNldDtcblxuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPVxuICAgICAgcGFyc2VJbnQoXG4gICAgICAgIChyYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSB4T2Zmc2V0KSAvIHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICApICsgMTtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPSBwYXJzZUludChcbiAgICAgIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAvIHdpbmRvdy5pbm5lcldpZHRoICsgMVxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAodXNlU1ZHKSB7XG4gICAgICBjb25zdCBib3JkZXJUaGlja25lc3MgPSAwO1xuICAgICAgaWYgKCFoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdSZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgXCJyZWN0XCJcbiAgICAgICk7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgZmlsbDogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pICFpbXBvcnRhbnQ7IGZpbGwtb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50OyBzdHJva2Utd2lkdGg6IDA7YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNjYWxlID0gc2NhbGU7XG5cbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnhcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnlcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QubGVmdCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInlcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QudG9wIC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmhlaWdodCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC53aWR0aCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdSZWN0KTtcbiAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCA+IHJvdW5kZWRDb3JuZXIgPyByb3VuZGVkQ29ybmVyIDogMDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgbGluZU9mZnNldCkgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAtXG4gICAgICAgICAgICAgIGxpbmVPZmZzZXQpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeSA9XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC1cbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgICAgaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcblxuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGgpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9IGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgeSA9IChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArIGxpbmVPZmZzZXQpICogc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICBjb25zdCByZ2IgPSBNYXRoLnJvdW5kKDB4ZmZmZmZmICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIGNvbnN0IHIgPSByZ2IgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAocmdiID4+IDgpICYgMjU1O1xuICAgICAgICBjb25zdCBiID0gcmdiICYgMjU1O1xuICAgICAgICBleHRyYSA9IGBvdXRsaW5lLWNvbG9yOiByZ2IoJHtyfSwgJHtnfSwgJHtifSk7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICAgIGV4dHJhICs9IGBib3JkZXItYm90dG9tOiAke3VuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlfXB4IHNvbGlkIHJnYmEoJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5yZWRcbiAgICAgICAgICB9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnRgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICBoaWdobGlnaHRBcmVhLnNjYWxlID0gc2NhbGU7XG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC50b3AgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWEpO1xuICAgICAgaWYgKCFERUJVR19WSVNVQUxTICYmIGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIC8vaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDtgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS53aWR0aCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3Qud2lkdGggKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmxlZnQgPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmxlZnQgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5oZWlnaHQgLyAyIC1cbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYUxpbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX1hNTF9OQU1FU1BBQ0UsIFwic3ZnXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc2V0QXR0cmlidXRlKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpO1xuICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWRyk7XG4gIH1cblxuICBjb25zdCBoaWdobGlnaHRCb3VuZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSk7XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnNjYWxlID0gc2NhbGU7XG5cbiAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgb3V0bGluZS1jb2xvcjogbWFnZW50YTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YFxuICAgICk7XG4gIH1cblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgIHRvcDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9O1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC50b3AgKiBzY2FsZX1weGA7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRCb3VuZGluZyk7XG4gIGhpZ2hsaWdodHNDb250YWluZXIuYXBwZW5kKGhpZ2hsaWdodFBhcmVudCk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodFBhcmVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlKHJhbmdlLCBnZXRDc3NTZWxlY3RvciwgY29tcHV0ZUVsZW1lbnRDRkkpIHtcbiAgY29uc3Qgc3RhcnRJc0VsZW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lclxuICAgIDogcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFzdGFydENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgaWYgKHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50XG4gICk7XG4gIGNvbnN0IGVuZElzRWxlbWVudCA9IHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnQgPSBlbmRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lclxuICAgIDogcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFlbmRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBlbmRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihyYW5nZS5lbmRDb250YWluZXIpO1xuICBpZiAoZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBjb21tb25FbGVtZW50QW5jZXN0b3IgPSBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQoXG4gICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICk7XG4gIGlmICghY29tbW9uRWxlbWVudEFuY2VzdG9yKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gTk8gUkFOR0UgQ09NTU9OIEFOQ0VTVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpIHtcbiAgICBjb25zdCByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCA9XG4gICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgPyByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lclxuICAgICAgICA6IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgJiZcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICkge1xuICAgICAgaWYgKGNvbW1vbkVsZW1lbnRBbmNlc3RvciAhPT0gcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCI+Pj4+Pj4gQ09NTU9OIEFOQ0VTVE9SIENPTlRBSU5FUiBESUZGPz8hXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3Rvcihjb21tb25FbGVtZW50QW5jZXN0b3IpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IocmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgcm9vdEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShjb21tb25FbGVtZW50QW5jZXN0b3IpO1xuICBjb25zdCBzdGFydEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShzdGFydENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBlbmRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGxldCBjZmk7XG4gIGlmIChyb290RWxlbWVudENmaSAmJiBzdGFydEVsZW1lbnRDZmkgJiYgZW5kRWxlbWVudENmaSkge1xuICAgIGxldCBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmk7XG4gICAgaWYgKCFzdGFydElzRWxlbWVudCkge1xuICAgICAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBzdGFydEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5zdGFydE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0IDwgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5zdGFydE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmk7XG4gICAgaWYgKCFlbmRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApO1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIGVuZEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA8IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2UuZW5kT2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLmVuZE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNmaSA9XG4gICAgICByb290RWxlbWVudENmaSArXG4gICAgICBcIixcIiArXG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIikgK1xuICAgICAgXCIsXCIgK1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogcmFuZ2UuZW5kT2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiByYW5nZS5zdGFydE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGlkKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFjbGllbnRSZWN0cykgcmV0dXJuO1xuXG4gIHZhciB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gIHZhciBtYXhIZWlnaHQgPSB0b3BDbGllbnRSZWN0LmhlaWdodDtcbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKGNsaWVudFJlY3QudG9wIDwgdG9wQ2xpZW50UmVjdC50b3ApIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0O1xuICAgIGlmIChjbGllbnRSZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICB2YXIgbmV3VG9wID0gdG9wQ2xpZW50UmVjdC50b3A7XG5cbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGJvdW5kaW5nQXJlYXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgICAgICk7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIC8vZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGJvdW5kaW5nQXJlYXMuc25hcHNob3RMZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBib3VuZGluZ0FyZWFzLmxlbmd0aCB8IDA7XG4gICAgICAgIGkgPCBsZW47XG4gICAgICAgIGkgPSAoaSArIDEpIHwgMFxuICAgICAgKSB7XG4gICAgICAgIHZhciBib3VuZGluZ0FyZWEgPSBib3VuZGluZ0FyZWFzW2ldO1xuICAgICAgICBpZiAoTWF0aC5hYnMoYm91bmRpbmdBcmVhLnJlY3QudG9wIC0gKG5ld1RvcCAtIHlPZmZzZXQpKSA8IDMpIHtcbiAgICAgICAgICBuZXdUb3AgKz0gYm91bmRpbmdBcmVhLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGZvdW5kKTtcbiAgfVxuXG4gIHRvcENsaWVudFJlY3QudG9wID0gbmV3VG9wO1xuICB0b3BDbGllbnRSZWN0LmhlaWdodCA9IG1heEhlaWdodDtcblxuICByZXR1cm4gdG9wQ2xpZW50UmVjdDtcbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG5cbiAgcmV0dXJuIGNsaWVudFJlY3RzO1xufVxuXG5mdW5jdGlvbiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBwYXJ0aWFsQ2ZpOiByYW5nZUluZm8uY2ZpLFxuICAgIGRvbVJhbmdlOiB7XG4gICAgICBzdGFydDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uZW5kT2Zmc2V0LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgY2ZpOiBsb2NhdGlvbi5wYXJ0aWFsQ2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgdmFyIHNpemUgPSB7XG4gICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgIGxlZnQ6IGNsaWVudFJlY3RzWzBdLmxlZnQsXG4gICAgd2lkdGg6IGNsaWVudFJlY3RzWzBdLndpZHRoLFxuICAgIHRvcDogY2xpZW50UmVjdHNbMF0udG9wLFxuICAgIGhlaWdodDogY2xpZW50UmVjdHNbMF0uaGVpZ2h0LFxuICB9O1xuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhhbmRsZUJvdW5kcyA9IHtcbiAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0LFxuICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICB0b3A6IGNsaWVudFJlY3QudG9wLFxuICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCb3VuZHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2Nyb2xsTW9kZShmbGFnKSB7XG4gIGlmICghZmxhZykge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX1BBR0lOQVRFRCk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfVxufVxuXG4vKlxuIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7IC8vIElFID49IDk7IG90aGVyIGJyb3dzZXJzXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgLy9hbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTsgLy9oZXJlIHlvdSBkcmF3IHlvdXIgb3duIG1lbnVcbiAgICAgICAgICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy9sZXQgZ2V0Q3NzU2VsZWN0b3IgPSBmdWxsUXVhbGlmaWVkU2VsZWN0b3I7XG4gICAgICAgICAgICBcblx0XHRcdGxldCBzdHIgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRsZXQgc2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCk7XG5cdFx0XHRsZXQgcG9zID0gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8se3JlZDoxMCxncmVlbjo1MCxibHVlOjIzMH0sdHJ1ZSk7XG5cdFx0XHRsZXQgcmV0MiA9IGNyZWF0ZUFubm90YXRpb24ocG9zLmlkKTtcblx0XHRcdFxuICB9LCBmYWxzZSk7XG4gICAgfSBlbHNlIHsgLy8gSUUgPCA5XG4gICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbmNvbnRleHRtZW51JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTtcbiAgICAgICAgICAgIHdpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4qL1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMiBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgaXNTY3JvbGxNb2RlRW5hYmxlZCwgcGFnZVdpZHRoIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaXJzdFZpc2libGVFbGVtZW50KHJvb3RFbGVtZW50KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGlmIChjaGlsZC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB2aXNpYmxlRWxlbWVudCA9IGZpbmRGaXJzdFZpc2libGVFbGVtZW50KGNoaWxkKTtcbiAgICBpZiAodmlzaWJsZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB2aXNpYmxlRWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgcm9vdEVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkgJiZcbiAgICByb290RWxlbWVudCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICkge1xuICAgIGNvbnN0IHZpc2libGUgPSBpc0VsZW1lbnRWaXNpYmxlKHJvb3RFbGVtZW50LCB1bmRlZmluZWQpO1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICByZXR1cm4gcm9vdEVsZW1lbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIFNlZSBjb21wdXRlVmlzaWJpbGl0eV8oKSBpbiByMi1uYXZpZ2F0b3ItanNcbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoZWxlbWVudCwgZG9tUmVjdCAvKiBudWxsYWJsZSAqLykge1xuICBpZiAocmVhZGl1bS5pc0ZpeGVkTGF5b3V0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgIWRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBlbFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgaWYgKGVsU3R5bGUpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKTtcbiAgICBpZiAoZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICAvLyBUT0RPOiB2ZXJ0aWNhbCB3cml0aW5nIG1vZGVcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgY29uc3Qgc2Nyb2xsTGVmdCA9IHJlY3QubGVmdDtcbiAgbGV0IGN1cnJlbnRPZmZzZXQgPSBzY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gIHJldHVybiByZWN0LmxlZnQgPiAwICYmIHJlY3QubGVmdCA8IHBhZ2VXaWR0aDtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGxvZ0Vycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IHRvTmF0aXZlUmVjdCB9IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IFRleHRSYW5nZSB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlXCI7XG5cbi8vIFBvbHlmaWxsIGZvciBBbmRyb2lkIEFQSSAyNlxuaW1wb3J0IG1hdGNoQWxsIGZyb20gXCJzdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsXCI7XG5tYXRjaEFsbC5zaGltKCk7XG5cbmNvbnN0IGRlYnVnID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb24oKSB7XG4gIGNvbnN0IHRleHQgPSBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdCgpO1xuICByZXR1cm4geyB0ZXh0LCByZWN0IH07XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIHJldHVybiB0b05hdGl2ZVJlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhbkhpZ2hsaWdodCA9IGhpZ2hsaWdodFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxuL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDtcbiAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhkb2N1bWVudC5ib2R5KTtcbiAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICBjb25zdCBzbmlwcGV0TGVuZ3RoID0gMjAwO1xuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYmVmb3JlIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBmaXJzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYmVmb3JlID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIHNuaXBwZXRMZW5ndGgpLCBzdGFydCk7XG4gIGxldCBmaXJzdFdvcmRTdGFydCA9IGJlZm9yZS5zZWFyY2goL1xcUHtMfVxccHtMfS9ndSk7XG4gIGlmIChmaXJzdFdvcmRTdGFydCAhPT0gLTEpIHtcbiAgICBiZWZvcmUgPSBiZWZvcmUuc2xpY2UoZmlyc3RXb3JkU3RhcnQgKyAxKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYWZ0ZXIgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGxhc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGFmdGVyID0gdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBzbmlwcGV0TGVuZ3RoKSk7XG4gIGxldCBsYXN0V29yZEVuZCA9IEFycmF5LmZyb20oYWZ0ZXIubWF0Y2hBbGwoL1xccHtMfVxcUHtMfS9ndSkpLnBvcCgpO1xuICBpZiAobGFzdFdvcmRFbmQgIT09IHVuZGVmaW5lZCAmJiBsYXN0V29yZEVuZC5pbmRleCA+IDEpIHtcbiAgICBhZnRlciA9IGFmdGVyLnNsaWNlKDAsIGxhc3RXb3JkRW5kLmluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4geyBoaWdobGlnaHQsIGJlZm9yZSwgYWZ0ZXIgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIEJhc2Ugc2NyaXB0IHVzZWQgYnkgYm90aCByZWZsb3dhYmxlIGFuZCBmaXhlZCBsYXlvdXQgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2dlc3R1cmVzXCI7XG5pbXBvcnQge1xuICByZW1vdmVQcm9wZXJ0eSxcbiAgc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvRW5kLFxuICBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb1RleHQsXG4gIHNldFByb3BlcnR5LFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5ub3RhdGlvbixcbiAgY3JlYXRlSGlnaGxpZ2h0LFxuICBkZXN0cm95SGlnaGxpZ2h0LFxuICBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbyxcbiAgZ2V0U2VsZWN0aW9uUmVjdCxcbiAgcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElELFxuICBzZXRTY3JvbGxNb2RlLFxufSBmcm9tIFwiLi9oaWdobGlnaHRcIjtcbmltcG9ydCB7IGZpbmRGaXJzdFZpc2libGVFbGVtZW50IH0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXREZWNvcmF0aW9ucywgcmVnaXN0ZXJUZW1wbGF0ZXMgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxuLy8gUHVibGljIEFQSSB1c2VkIGJ5IHRoZSBuYXZpZ2F0b3IuXG53aW5kb3cucmVhZGl1bSA9IHtcbiAgLy8gdXRpbHNcbiAgc2Nyb2xsVG9JZDogc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbjogc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9UZXh0OiBzY3JvbGxUb1RleHQsXG4gIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0OiBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9TdGFydDogc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9FbmQ6IHNjcm9sbFRvRW5kLFxuICBzZXRQcm9wZXJ0eTogc2V0UHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnR5OiByZW1vdmVQcm9wZXJ0eSxcblxuICAvLyBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbjogZ2V0Q3VycmVudFNlbGVjdGlvbixcblxuICAvLyBkZWNvcmF0aW9uXG4gIHJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlczogcmVnaXN0ZXJUZW1wbGF0ZXMsXG4gIGdldERlY29yYXRpb25zOiBnZXREZWNvcmF0aW9ucyxcblxuICAvLyBET01cbiAgZmluZEZpcnN0VmlzaWJsZUVsZW1lbnQ6IGZpbmRGaXJzdFZpc2libGVFbGVtZW50LFxufTtcblxuLy8gTGVnYWN5IGhpZ2hsaWdodHMgQVBJLlxud2luZG93LmNyZWF0ZUFubm90YXRpb24gPSBjcmVhdGVBbm5vdGF0aW9uO1xud2luZG93LmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbndpbmRvdy5kZXN0cm95SGlnaGxpZ2h0ID0gZGVzdHJveUhpZ2hsaWdodDtcbndpbmRvdy5nZXRDdXJyZW50U2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvO1xud2luZG93LmdldFNlbGVjdGlvblJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0O1xud2luZG93LnJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCA9IHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRDtcbndpbmRvdy5zZXRTY3JvbGxNb2RlID0gc2V0U2Nyb2xsTW9kZTtcbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIFNjcmlwdCB1c2VkIGZvciByZWZsb3dhYmxlIHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9pbmRleFwiO1xuXG53aW5kb3cucmVhZGl1bS5pc1JlZmxvd2FibGUgPSB0cnVlO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFNldHVwcyB0aGUgYHZpZXdwb3J0YCBtZXRhIHRhZyB0byBkaXNhYmxlIHpvb21pbmcuXG4gIGxldCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpO1xuICBtZXRhLnNldEF0dHJpYnV0ZShcbiAgICBcImNvbnRlbnRcIixcbiAgICBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCBzaHJpbmstdG8tZml0PW5vXCJcbiAgKTtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChtZXRhKTtcbn0pO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVFbGVtZW50Iiwicm9vdEVsZW1lbnQiLCJ2aXNpYmxlRWxlbWVudCIsInZpc2libGUiLCJpc0VsZW1lbnRWaXNpYmxlIiwiZG9tUmVjdCIsInJlYWRpdW0iLCJlbFN0eWxlIiwiZGlzcGxheSIsIm1hdGNoQWxsIiwic2hpbSIsImdldEN1cnJlbnRTZWxlY3Rpb24iLCJnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCIsImNsZWFuSGlnaGxpZ2h0Iiwic25pcHBldExlbmd0aCIsImZpcnN0V29yZFN0YXJ0IiwibGFzdFdvcmRFbmQiLCJwb3AiLCJyZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXMiLCJpc1JlZmxvd2FibGUiLCJtZXRhIiwiaGVhZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var B=__webpack_module_cache__[Q];if(void 0!==B)return B.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(B,{a:B}),B},__webpack_require__.d=function(Q,B){for(var n in B)__webpack_require__.o(B,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:B[n]})},__webpack_require__.o=function(Q,B){return Object.prototype.hasOwnProperty.call(Q,B)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findFirstVisibleBlockElement();\n\n if (!element) {\n return undefined;\n }\n\n return {\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findFirstVisibleBlockElement() {\n return findElement(document.body, function (element) {\n return window.getComputedStyle(element).display != "block";\n });\n}\n\nfunction findElement(rootElement, shouldIgnore) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var element = findElement(child, shouldIgnore);\n\n if (element) {\n return element;\n }\n }\n\n if (isElementVisible(rootElement, undefined, shouldIgnore)) {\n return rootElement;\n }\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction isElementVisible(element, domRect\n/* nullable */\n, shouldIgnore) {\n if (readium.isFixedLayout || element === document.body || element === document.documentElement) {\n return true;\n }\n\n if (!document || !document.documentElement || !document.body || shouldIgnore && shouldIgnore(element)) {\n return false;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n return rect.left < pageWidth;\n }\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTIzMi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFNBQVNDLE1BQVQsQ0FBZ0JDLElBQWhCLEVBQXNCQyxHQUF0QixFQUEyQkMsU0FBM0IsRUFBc0M7QUFDcEM7QUFDQTtBQUNBLE1BQUlDLFFBQVEsR0FBRyxDQUFmO0FBQ0EsTUFBSUMsWUFBWSxHQUFHLEVBQW5COztBQUNBLFNBQU9ELFFBQVEsS0FBSyxDQUFDLENBQXJCLEVBQXdCO0FBQ3RCQSxJQUFBQSxRQUFRLEdBQUdILElBQUksQ0FBQ0ssT0FBTCxDQUFhSixHQUFiLEVBQWtCRSxRQUFsQixDQUFYOztBQUNBLFFBQUlBLFFBQVEsS0FBSyxDQUFDLENBQWxCLEVBQXFCO0FBQ25CQyxNQUFBQSxZQUFZLENBQUNFLElBQWIsQ0FBa0I7QUFDaEJDLFFBQUFBLEtBQUssRUFBRUosUUFEUztBQUVoQkssUUFBQUEsR0FBRyxFQUFFTCxRQUFRLEdBQUdGLEdBQUcsQ0FBQ1EsTUFGSjtBQUdoQkMsUUFBQUEsTUFBTSxFQUFFO0FBSFEsT0FBbEI7QUFLQVAsTUFBQUEsUUFBUSxJQUFJLENBQVo7QUFDRDtBQUNGOztBQUNELE1BQUlDLFlBQVksQ0FBQ0ssTUFBYixHQUFzQixDQUExQixFQUE2QjtBQUMzQixXQUFPTCxZQUFQO0FBQ0QsR0FsQm1DLENBb0JwQztBQUNBOzs7QUFDQSxTQUFPTix1QkFBWSxDQUFDRSxJQUFELEVBQU9DLEdBQVAsRUFBWUMsU0FBWixDQUFuQjtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTUyxjQUFULENBQXdCWCxJQUF4QixFQUE4QkMsR0FBOUIsRUFBbUM7QUFDakM7QUFDQSxNQUFJQSxHQUFHLENBQUNRLE1BQUosS0FBZSxDQUFmLElBQW9CVCxJQUFJLENBQUNTLE1BQUwsS0FBZ0IsQ0FBeEMsRUFBMkM7QUFDekMsV0FBTyxHQUFQO0FBQ0Q7O0FBQ0QsTUFBTUcsT0FBTyxHQUFHYixNQUFNLENBQUNDLElBQUQsRUFBT0MsR0FBUCxFQUFZQSxHQUFHLENBQUNRLE1BQWhCLENBQXRCLENBTGlDLENBT2pDOztBQUNBLFNBQU8sSUFBS0csT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXRixNQUFYLEdBQW9CVCxHQUFHLENBQUNRLE1BQXBDO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNJLFVBQVQsQ0FBb0JiLElBQXBCLEVBQTBCYyxLQUExQixFQUErQztBQUFBLE1BQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFDcEQsTUFBSUQsS0FBSyxDQUFDTCxNQUFOLEtBQWlCLENBQXJCLEVBQXdCO0FBQ3RCLFdBQU8sSUFBUDtBQUNELEdBSG1ELENBS3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTVAsU0FBUyxHQUFHYyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxHQUFULEVBQWNILEtBQUssQ0FBQ0wsTUFBTixHQUFlLENBQTdCLENBQWxCLENBZG9ELENBZ0JwRDs7QUFDQSxNQUFNRyxPQUFPLEdBQUdiLE1BQU0sQ0FBQ0MsSUFBRCxFQUFPYyxLQUFQLEVBQWNaLFNBQWQsQ0FBdEI7O0FBRUEsTUFBSVUsT0FBTyxDQUFDSCxNQUFSLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLFdBQU8sSUFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0UsTUFBTVMsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBQUMsS0FBSyxFQUFJO0FBQzFCLFFBQU1DLFdBQVcsR0FBRyxFQUFwQixDQUQwQixDQUNGOztBQUN4QixRQUFNQyxZQUFZLEdBQUcsRUFBckIsQ0FGMEIsQ0FFRDs7QUFDekIsUUFBTUMsWUFBWSxHQUFHLEVBQXJCLENBSDBCLENBR0Q7O0FBQ3pCLFFBQU1DLFNBQVMsR0FBRyxDQUFsQixDQUowQixDQUlMOztBQUVyQixRQUFNQyxVQUFVLEdBQUcsSUFBSUwsS0FBSyxDQUFDVCxNQUFOLEdBQWVJLEtBQUssQ0FBQ0wsTUFBNUM7QUFFQSxRQUFNZ0IsV0FBVyxHQUFHVixPQUFPLENBQUNXLE1BQVIsR0FDaEJmLGNBQWMsQ0FDWlgsSUFBSSxDQUFDMkIsS0FBTCxDQUFXWCxJQUFJLENBQUNZLEdBQUwsQ0FBUyxDQUFULEVBQVlULEtBQUssQ0FBQ1osS0FBTixHQUFjUSxPQUFPLENBQUNXLE1BQVIsQ0FBZWpCLE1BQXpDLENBQVgsRUFBNkRVLEtBQUssQ0FBQ1osS0FBbkUsQ0FEWSxFQUVaUSxPQUFPLENBQUNXLE1BRkksQ0FERSxHQUtoQixHQUxKO0FBTUEsUUFBTUcsV0FBVyxHQUFHZCxPQUFPLENBQUNlLE1BQVIsR0FDaEJuQixjQUFjLENBQ1pYLElBQUksQ0FBQzJCLEtBQUwsQ0FBV1IsS0FBSyxDQUFDWCxHQUFqQixFQUFzQlcsS0FBSyxDQUFDWCxHQUFOLEdBQVlPLE9BQU8sQ0FBQ2UsTUFBUixDQUFlckIsTUFBakQsQ0FEWSxFQUVaTSxPQUFPLENBQUNlLE1BRkksQ0FERSxHQUtoQixHQUxKO0FBT0EsUUFBSUMsUUFBUSxHQUFHLEdBQWY7O0FBQ0EsUUFBSSxPQUFPaEIsT0FBTyxDQUFDaUIsSUFBZixLQUF3QixRQUE1QixFQUFzQztBQUNwQyxVQUFNQyxNQUFNLEdBQUdqQixJQUFJLENBQUNrQixHQUFMLENBQVNmLEtBQUssQ0FBQ1osS0FBTixHQUFjUSxPQUFPLENBQUNpQixJQUEvQixDQUFmO0FBQ0FELE1BQUFBLFFBQVEsR0FBRyxNQUFNRSxNQUFNLEdBQUdqQyxJQUFJLENBQUNTLE1BQS9CO0FBQ0Q7O0FBRUQsUUFBTTBCLFFBQVEsR0FDWmYsV0FBVyxHQUFHSSxVQUFkLEdBQ0FILFlBQVksR0FBR0ksV0FEZixHQUVBSCxZQUFZLEdBQUdPLFdBRmYsR0FHQU4sU0FBUyxHQUFHUSxRQUpkO0FBS0EsUUFBTUssUUFBUSxHQUFHaEIsV0FBVyxHQUFHQyxZQUFkLEdBQTZCQyxZQUE3QixHQUE0Q0MsU0FBN0Q7QUFDQSxRQUFNYyxlQUFlLEdBQUdGLFFBQVEsR0FBR0MsUUFBbkM7QUFFQSxXQUFPQyxlQUFQO0FBQ0QsR0FwQ0QsQ0E1Qm9ELENBa0VwRDtBQUNBOzs7QUFDQSxNQUFNQyxhQUFhLEdBQUcxQixPQUFPLENBQUMyQixHQUFSLENBQVksVUFBQUMsQ0FBQztBQUFBLFdBQUs7QUFDdENqQyxNQUFBQSxLQUFLLEVBQUVpQyxDQUFDLENBQUNqQyxLQUQ2QjtBQUV0Q0MsTUFBQUEsR0FBRyxFQUFFZ0MsQ0FBQyxDQUFDaEMsR0FGK0I7QUFHdENpQyxNQUFBQSxLQUFLLEVBQUV2QixVQUFVLENBQUNzQixDQUFEO0FBSHFCLEtBQUw7QUFBQSxHQUFiLENBQXRCLENBcEVvRCxDQTBFcEQ7O0FBQ0FGLEVBQUFBLGFBQWEsQ0FBQ0ksSUFBZCxDQUFtQixVQUFDQyxDQUFELEVBQUlDLENBQUo7QUFBQSxXQUFVQSxDQUFDLENBQUNILEtBQUYsR0FBVUUsQ0FBQyxDQUFDRixLQUF0QjtBQUFBLEdBQW5CO0FBQ0EsU0FBT0gsYUFBYSxDQUFDLENBQUQsQ0FBcEI7QUFDRCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdKRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU08sY0FBVCxDQUF3QkMsSUFBeEIsRUFBOEI7QUFDNUIsVUFBUUEsSUFBSSxDQUFDQyxRQUFiO0FBQ0UsU0FBS0MsSUFBSSxDQUFDQyxZQUFWO0FBQ0EsU0FBS0QsSUFBSSxDQUFDRSxTQUFWO0FBQ0U7QUFDQTtBQUVBO0FBQU87QUFBdUJKLFFBQUFBLElBQUksQ0FBQ0ssV0FBTixDQUFtQjFDO0FBQWhEOztBQUNGO0FBQ0UsYUFBTyxDQUFQO0FBUko7QUFVRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVMyQywwQkFBVCxDQUFvQ04sSUFBcEMsRUFBMEM7QUFDeEMsTUFBSU8sT0FBTyxHQUFHUCxJQUFJLENBQUNRLGVBQW5CO0FBQ0EsTUFBSTdDLE1BQU0sR0FBRyxDQUFiOztBQUNBLFNBQU80QyxPQUFQLEVBQWdCO0FBQ2Q1QyxJQUFBQSxNQUFNLElBQUlvQyxjQUFjLENBQUNRLE9BQUQsQ0FBeEI7QUFDQUEsSUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNDLGVBQWxCO0FBQ0Q7O0FBQ0QsU0FBTzdDLE1BQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVM4QyxjQUFULENBQXdCQyxPQUF4QixFQUE2QztBQUFBLG9DQUFUQyxPQUFTO0FBQVRBLElBQUFBLE9BQVM7QUFBQTs7QUFDM0MsTUFBSUMsVUFBVSxHQUFHRCxPQUFPLENBQUNFLEtBQVIsRUFBakI7QUFDQSxNQUFNQyxRQUFRO0FBQUc7QUFDZkosRUFBQUEsT0FBTyxDQUFDSyxhQUQrQixDQUV2Q0Msa0JBRnVDLENBRXBCTixPQUZvQixFQUVYTyxVQUFVLENBQUNDLFNBRkEsQ0FBekM7QUFHQSxNQUFNQyxPQUFPLEdBQUcsRUFBaEI7QUFFQSxNQUFJQyxXQUFXLEdBQUdOLFFBQVEsQ0FBQ08sUUFBVCxFQUFsQjtBQUNBLE1BQUlDLFFBQUo7QUFDQSxNQUFJM0QsTUFBTSxHQUFHLENBQWIsQ0FUMkMsQ0FXM0M7QUFDQTs7QUFDQSxTQUFPaUQsVUFBVSxLQUFLVyxTQUFmLElBQTRCSCxXQUFuQyxFQUFnRDtBQUM5Q0UsSUFBQUEsUUFBUTtBQUFHO0FBQXFCRixJQUFBQSxXQUFoQzs7QUFDQSxRQUFJekQsTUFBTSxHQUFHMkQsUUFBUSxDQUFDRSxJQUFULENBQWM3RCxNQUF2QixHQUFnQ2lELFVBQXBDLEVBQWdEO0FBQzlDTyxNQUFBQSxPQUFPLENBQUMzRCxJQUFSLENBQWE7QUFBRXdDLFFBQUFBLElBQUksRUFBRXNCLFFBQVI7QUFBa0JuQyxRQUFBQSxNQUFNLEVBQUV5QixVQUFVLEdBQUdqRDtBQUF2QyxPQUFiO0FBQ0FpRCxNQUFBQSxVQUFVLEdBQUdELE9BQU8sQ0FBQ0UsS0FBUixFQUFiO0FBQ0QsS0FIRCxNQUdPO0FBQ0xPLE1BQUFBLFdBQVcsR0FBR04sUUFBUSxDQUFDTyxRQUFULEVBQWQ7QUFDQTFELE1BQUFBLE1BQU0sSUFBSTJELFFBQVEsQ0FBQ0UsSUFBVCxDQUFjN0QsTUFBeEI7QUFDRDtBQUNGLEdBdEIwQyxDQXdCM0M7OztBQUNBLFNBQU9pRCxVQUFVLEtBQUtXLFNBQWYsSUFBNEJELFFBQTVCLElBQXdDM0QsTUFBTSxLQUFLaUQsVUFBMUQsRUFBc0U7QUFDcEVPLElBQUFBLE9BQU8sQ0FBQzNELElBQVIsQ0FBYTtBQUFFd0MsTUFBQUEsSUFBSSxFQUFFc0IsUUFBUjtBQUFrQm5DLE1BQUFBLE1BQU0sRUFBRW1DLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjN0Q7QUFBeEMsS0FBYjtBQUNBaUQsSUFBQUEsVUFBVSxHQUFHRCxPQUFPLENBQUNFLEtBQVIsRUFBYjtBQUNEOztBQUVELE1BQUlELFVBQVUsS0FBS1csU0FBbkIsRUFBOEI7QUFDNUIsVUFBTSxJQUFJRSxVQUFKLENBQWUsNEJBQWYsQ0FBTjtBQUNEOztBQUVELFNBQU9OLE9BQVA7QUFDRDs7QUFFTSxJQUFJTyxnQkFBZ0IsR0FBRyxDQUF2QjtBQUNBLElBQUlDLGlCQUFpQixHQUFHLENBQXhCO0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNPLElBQU1DLHVCQUFiO0FBQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRSx3QkFBWWxCLE9BQVosRUFBcUJ2QixNQUFyQixFQUE2QjtBQUFBOztBQUMzQixRQUFJQSxNQUFNLEdBQUcsQ0FBYixFQUFnQjtBQUNkLFlBQU0sSUFBSTBDLEtBQUosQ0FBVSxtQkFBVixDQUFOO0FBQ0Q7QUFFRDs7O0FBQ0EsU0FBS25CLE9BQUwsR0FBZUEsT0FBZjtBQUVBOztBQUNBLFNBQUt2QixNQUFMLEdBQWNBLE1BQWQ7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUExQkE7QUFBQTtBQUFBLFdBMkJFLG9CQUFXMkMsTUFBWCxFQUFtQjtBQUNqQixVQUFJLENBQUNBLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQixLQUFLckIsT0FBckIsQ0FBTCxFQUFvQztBQUNsQyxjQUFNLElBQUltQixLQUFKLENBQVUsOENBQVYsQ0FBTjtBQUNEOztBQUVELFVBQUlHLEVBQUUsR0FBRyxLQUFLdEIsT0FBZDtBQUNBLFVBQUl2QixNQUFNLEdBQUcsS0FBS0EsTUFBbEI7O0FBQ0EsYUFBTzZDLEVBQUUsS0FBS0YsTUFBZCxFQUFzQjtBQUNwQjNDLFFBQUFBLE1BQU0sSUFBSW1CLDBCQUEwQixDQUFDMEIsRUFBRCxDQUFwQztBQUNBQSxRQUFBQSxFQUFFO0FBQUc7QUFBd0JBLFFBQUFBLEVBQUUsQ0FBQ0MsYUFBaEM7QUFDRDs7QUFFRCxhQUFPLElBQUlMLFlBQUosQ0FBaUJJLEVBQWpCLEVBQXFCN0MsTUFBckIsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQTNEQTtBQUFBO0FBQUEsV0E0REUsbUJBQXNCO0FBQUEsVUFBZCtDLE9BQWMsdUVBQUosRUFBSTs7QUFDcEIsVUFBSTtBQUNGLGVBQU96QixjQUFjLENBQUMsS0FBS0MsT0FBTixFQUFlLEtBQUt2QixNQUFwQixDQUFkLENBQTBDLENBQTFDLENBQVA7QUFDRCxPQUZELENBRUUsT0FBT2dELEdBQVAsRUFBWTtBQUNaLFlBQUksS0FBS2hELE1BQUwsS0FBZ0IsQ0FBaEIsSUFBcUIrQyxPQUFPLENBQUNFLFNBQVIsS0FBc0JiLFNBQS9DLEVBQTBEO0FBQ3hELGNBQU1jLEVBQUUsR0FBR0MsUUFBUSxDQUFDQyxnQkFBVCxDQUNULEtBQUs3QixPQUFMLENBQWE4QixXQUFiLEVBRFMsRUFFVHZCLFVBQVUsQ0FBQ0MsU0FGRixDQUFYO0FBSUFtQixVQUFBQSxFQUFFLENBQUNqQixXQUFILEdBQWlCLEtBQUtWLE9BQXRCO0FBQ0EsY0FBTStCLFFBQVEsR0FBR1AsT0FBTyxDQUFDRSxTQUFSLEtBQXNCVixnQkFBdkM7QUFDQSxjQUFNeEUsSUFBSTtBQUFHO0FBQ1h1RixVQUFBQSxRQUFRLEdBQUdKLEVBQUUsQ0FBQ2hCLFFBQUgsRUFBSCxHQUFtQmdCLEVBQUUsQ0FBQ0ssWUFBSCxFQUQ3Qjs7QUFHQSxjQUFJLENBQUN4RixJQUFMLEVBQVc7QUFDVCxrQkFBTWlGLEdBQU47QUFDRDs7QUFDRCxpQkFBTztBQUFFbkMsWUFBQUEsSUFBSSxFQUFFOUMsSUFBUjtBQUFjaUMsWUFBQUEsTUFBTSxFQUFFc0QsUUFBUSxHQUFHLENBQUgsR0FBT3ZGLElBQUksQ0FBQ3NFLElBQUwsQ0FBVTdEO0FBQS9DLFdBQVA7QUFDRCxTQWRELE1BY087QUFDTCxnQkFBTXdFLEdBQU47QUFDRDtBQUNGO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQTNGQTtBQUFBO0FBQUEsV0E0RkUsd0JBQXNCbkMsSUFBdEIsRUFBNEJiLE1BQTVCLEVBQW9DO0FBQ2xDLGNBQVFhLElBQUksQ0FBQ0MsUUFBYjtBQUNFLGFBQUtDLElBQUksQ0FBQ0UsU0FBVjtBQUNFLGlCQUFPd0IsWUFBWSxDQUFDZSxTQUFiLENBQXVCM0MsSUFBdkIsRUFBNkJiLE1BQTdCLENBQVA7O0FBQ0YsYUFBS2UsSUFBSSxDQUFDQyxZQUFWO0FBQ0UsaUJBQU8sSUFBSXlCLFlBQUo7QUFBaUI7QUFBd0I1QixVQUFBQSxJQUF6QyxFQUFnRGIsTUFBaEQsQ0FBUDs7QUFDRjtBQUNFLGdCQUFNLElBQUkwQyxLQUFKLENBQVUscUNBQVYsQ0FBTjtBQU5KO0FBUUQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUE3R0E7QUFBQTtBQUFBLFdBOEdFLG1CQUFpQjdCLElBQWpCLEVBQXVCYixNQUF2QixFQUErQjtBQUM3QixjQUFRYSxJQUFJLENBQUNDLFFBQWI7QUFDRSxhQUFLQyxJQUFJLENBQUNFLFNBQVY7QUFBcUI7QUFDbkIsZ0JBQUlqQixNQUFNLEdBQUcsQ0FBVCxJQUFjQSxNQUFNO0FBQUc7QUFBcUJhLFlBQUFBLElBQUQsQ0FBT3dCLElBQVAsQ0FBWTdELE1BQTNELEVBQW1FO0FBQ2pFLG9CQUFNLElBQUlrRSxLQUFKLENBQVUsa0NBQVYsQ0FBTjtBQUNEOztBQUVELGdCQUFJLENBQUM3QixJQUFJLENBQUNpQyxhQUFWLEVBQXlCO0FBQ3ZCLG9CQUFNLElBQUlKLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0QsYUFQa0IsQ0FTbkI7OztBQUNBLGdCQUFNZSxVQUFVLEdBQUd0QywwQkFBMEIsQ0FBQ04sSUFBRCxDQUExQixHQUFtQ2IsTUFBdEQ7QUFFQSxtQkFBTyxJQUFJeUMsWUFBSixDQUFpQjVCLElBQUksQ0FBQ2lDLGFBQXRCLEVBQXFDVyxVQUFyQyxDQUFQO0FBQ0Q7O0FBQ0QsYUFBSzFDLElBQUksQ0FBQ0MsWUFBVjtBQUF3QjtBQUN0QixnQkFBSWhCLE1BQU0sR0FBRyxDQUFULElBQWNBLE1BQU0sR0FBR2EsSUFBSSxDQUFDNkMsVUFBTCxDQUFnQmxGLE1BQTNDLEVBQW1EO0FBQ2pELG9CQUFNLElBQUlrRSxLQUFKLENBQVUsbUNBQVYsQ0FBTjtBQUNELGFBSHFCLENBS3RCOzs7QUFDQSxnQkFBSWUsV0FBVSxHQUFHLENBQWpCOztBQUNBLGlCQUFLLElBQUlFLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUczRCxNQUFwQixFQUE0QjJELENBQUMsRUFBN0IsRUFBaUM7QUFDL0JGLGNBQUFBLFdBQVUsSUFBSTdDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDNkMsVUFBTCxDQUFnQkMsQ0FBaEIsQ0FBRCxDQUE1QjtBQUNEOztBQUVELG1CQUFPLElBQUlsQixZQUFKO0FBQWlCO0FBQXdCNUIsWUFBQUEsSUFBekMsRUFBZ0Q0QyxXQUFoRCxDQUFQO0FBQ0Q7O0FBQ0Q7QUFDRSxnQkFBTSxJQUFJZixLQUFKLENBQVUseUNBQVYsQ0FBTjtBQTdCSjtBQStCRDtBQTlJSDs7QUFBQTtBQUFBO0FBaUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNPLElBQU1rQixvQkFBYjtBQUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFLHFCQUFZdEYsS0FBWixFQUFtQkMsR0FBbkIsRUFBd0I7QUFBQTs7QUFDdEIsU0FBS0QsS0FBTCxHQUFhQSxLQUFiO0FBQ0EsU0FBS0MsR0FBTCxHQUFXQSxHQUFYO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQWpCQTtBQUFBO0FBQUEsV0FrQkUsb0JBQVdnRCxPQUFYLEVBQW9CO0FBQ2xCLGFBQU8sSUFBSXFDLFNBQUosQ0FDTCxLQUFLdEYsS0FBTCxDQUFXdUYsVUFBWCxDQUFzQnRDLE9BQXRCLENBREssRUFFTCxLQUFLaEQsR0FBTCxDQUFTc0YsVUFBVCxDQUFvQnRDLE9BQXBCLENBRkssQ0FBUDtBQUlEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFuQ0E7QUFBQTtBQUFBLFdBb0NFLG1CQUFVO0FBQ1IsVUFBSWpELEtBQUo7QUFDQSxVQUFJQyxHQUFKOztBQUVBLFVBQ0UsS0FBS0QsS0FBTCxDQUFXaUQsT0FBWCxLQUF1QixLQUFLaEQsR0FBTCxDQUFTZ0QsT0FBaEMsSUFDQSxLQUFLakQsS0FBTCxDQUFXMEIsTUFBWCxJQUFxQixLQUFLekIsR0FBTCxDQUFTeUIsTUFGaEMsRUFHRTtBQUNBO0FBREEsOEJBRWVzQixjQUFjLENBQzNCLEtBQUtoRCxLQUFMLENBQVdpRCxPQURnQixFQUUzQixLQUFLakQsS0FBTCxDQUFXMEIsTUFGZ0IsRUFHM0IsS0FBS3pCLEdBQUwsQ0FBU3lCLE1BSGtCLENBRjdCOztBQUFBOztBQUVDMUIsUUFBQUEsS0FGRDtBQUVRQyxRQUFBQSxHQUZSO0FBT0QsT0FWRCxNQVVPO0FBQ0xELFFBQUFBLEtBQUssR0FBRyxLQUFLQSxLQUFMLENBQVd3RixPQUFYLENBQW1CO0FBQUViLFVBQUFBLFNBQVMsRUFBRVY7QUFBYixTQUFuQixDQUFSO0FBQ0FoRSxRQUFBQSxHQUFHLEdBQUcsS0FBS0EsR0FBTCxDQUFTdUYsT0FBVCxDQUFpQjtBQUFFYixVQUFBQSxTQUFTLEVBQUVUO0FBQWIsU0FBakIsQ0FBTjtBQUNEOztBQUVELFVBQU11QixLQUFLLEdBQUcsSUFBSUMsS0FBSixFQUFkO0FBQ0FELE1BQUFBLEtBQUssQ0FBQ0UsUUFBTixDQUFlM0YsS0FBSyxDQUFDdUMsSUFBckIsRUFBMkJ2QyxLQUFLLENBQUMwQixNQUFqQztBQUNBK0QsTUFBQUEsS0FBSyxDQUFDRyxNQUFOLENBQWEzRixHQUFHLENBQUNzQyxJQUFqQixFQUF1QnRDLEdBQUcsQ0FBQ3lCLE1BQTNCO0FBQ0EsYUFBTytELEtBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFsRUE7QUFBQTtBQUFBLFdBbUVFLG1CQUFpQkEsS0FBakIsRUFBd0I7QUFDdEIsVUFBTXpGLEtBQUssR0FBR21FLHVCQUFZLENBQUNlLFNBQWIsQ0FDWk8sS0FBSyxDQUFDSSxjQURNLEVBRVpKLEtBQUssQ0FBQ0ssV0FGTSxDQUFkO0FBSUEsVUFBTTdGLEdBQUcsR0FBR2tFLHVCQUFZLENBQUNlLFNBQWIsQ0FBdUJPLEtBQUssQ0FBQ00sWUFBN0IsRUFBMkNOLEtBQUssQ0FBQ08sU0FBakQsQ0FBWjtBQUNBLGFBQU8sSUFBSVYsU0FBSixDQUFjdEYsS0FBZCxFQUFxQkMsR0FBckIsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBbEZBO0FBQUE7QUFBQSxXQW1GRSxxQkFBbUJnRyxJQUFuQixFQUF5QmpHLEtBQXpCLEVBQWdDQyxHQUFoQyxFQUFxQztBQUNuQyxhQUFPLElBQUlxRixTQUFKLENBQ0wsSUFBSW5CLHVCQUFKLENBQWlCOEIsSUFBakIsRUFBdUJqRyxLQUF2QixDQURLLEVBRUwsSUFBSW1FLHVCQUFKLENBQWlCOEIsSUFBakIsRUFBdUJoRyxHQUF2QixDQUZLLENBQVA7QUFJRDtBQXhGSDs7QUFBQTtBQUFBLEk7Ozs7Ozs7Ozs7Ozs7O0FDL09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUNPLElBQU1tRyxXQUFiO0FBQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDRSx1QkFBWUgsSUFBWixFQUFrQlIsS0FBbEIsRUFBeUI7QUFBQTs7QUFDdkIsU0FBS1EsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS1IsS0FBTCxHQUFhQSxLQUFiO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7O0FBYkE7QUFBQTtBQUFBLFdBZ0RFLG1CQUFVO0FBQ1IsYUFBTyxLQUFLQSxLQUFaO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7O0FBdERBO0FBQUE7QUFBQSxXQXVERSxzQkFBYTtBQUNYO0FBQ0E7QUFDQSxVQUFNWSxlQUFlLEdBQUdmLFNBQVMsQ0FBQ2dCLFNBQVYsQ0FBb0IsS0FBS2IsS0FBekIsRUFBZ0NjLE9BQWhDLEVBQXhCO0FBRUEsVUFBTUMsU0FBUyxHQUFHbEIsU0FBUyxDQUFDZ0IsU0FBVixDQUFvQkQsZUFBcEIsQ0FBbEI7QUFDQSxVQUFNUixjQUFjLEdBQUdNLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDeEcsS0FBVixDQUFnQmlELE9BQWpCLEVBQTBCLEtBQUtnRCxJQUEvQixDQUFwQztBQUNBLFVBQU1GLFlBQVksR0FBR0ksYUFBYSxDQUFDSyxTQUFTLENBQUN2RyxHQUFWLENBQWNnRCxPQUFmLEVBQXdCLEtBQUtnRCxJQUE3QixDQUFsQztBQUVBLGFBQU87QUFDTFEsUUFBQUEsSUFBSSxFQUFFLGVBREQ7QUFFTFosUUFBQUEsY0FBYyxFQUFkQSxjQUZLO0FBR0xDLFFBQUFBLFdBQVcsRUFBRVUsU0FBUyxDQUFDeEcsS0FBVixDQUFnQjBCLE1BSHhCO0FBSUxxRSxRQUFBQSxZQUFZLEVBQVpBLFlBSks7QUFLTEMsUUFBQUEsU0FBUyxFQUFFUSxTQUFTLENBQUN2RyxHQUFWLENBQWN5QjtBQUxwQixPQUFQO0FBT0Q7QUF2RUg7QUFBQTtBQUFBLFdBY0UsbUJBQWlCdUUsSUFBakIsRUFBdUJSLEtBQXZCLEVBQThCO0FBQzVCLGFBQU8sSUFBSVcsV0FBSixDQUFnQkgsSUFBaEIsRUFBc0JSLEtBQXRCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUF2QkE7QUFBQTtBQUFBLFdBd0JFLHNCQUFvQlEsSUFBcEIsRUFBMEJTLFFBQTFCLEVBQW9DO0FBQ2xDLFVBQU1iLGNBQWMsR0FBR0ssYUFBYSxDQUFDUSxRQUFRLENBQUNiLGNBQVYsRUFBMEJJLElBQTFCLENBQXBDOztBQUNBLFVBQUksQ0FBQ0osY0FBTCxFQUFxQjtBQUNuQixjQUFNLElBQUl6QixLQUFKLENBQVUsd0NBQVYsQ0FBTjtBQUNEOztBQUVELFVBQU0yQixZQUFZLEdBQUdHLGFBQWEsQ0FBQ1EsUUFBUSxDQUFDWCxZQUFWLEVBQXdCRSxJQUF4QixDQUFsQzs7QUFDQSxVQUFJLENBQUNGLFlBQUwsRUFBbUI7QUFDakIsY0FBTSxJQUFJM0IsS0FBSixDQUFVLHNDQUFWLENBQU47QUFDRDs7QUFFRCxVQUFNdUMsUUFBUSxHQUFHeEMsWUFBWSxDQUFDeUMsY0FBYixDQUNmZixjQURlLEVBRWZhLFFBQVEsQ0FBQ1osV0FGTSxDQUFqQjtBQUlBLFVBQU1lLE1BQU0sR0FBRzFDLFlBQVksQ0FBQ3lDLGNBQWIsQ0FDYmIsWUFEYSxFQUViVyxRQUFRLENBQUNWLFNBRkksQ0FBZjtBQUtBLFVBQU1QLEtBQUssR0FBRyxJQUFJSCxTQUFKLENBQWNxQixRQUFkLEVBQXdCRSxNQUF4QixFQUFnQ04sT0FBaEMsRUFBZDtBQUNBLGFBQU8sSUFBSUgsV0FBSixDQUFnQkgsSUFBaEIsRUFBc0JSLEtBQXRCLENBQVA7QUFDRDtBQTlDSDs7QUFBQTtBQUFBO0FBMEVBO0FBQ0E7QUFDQTs7QUFDTyxJQUFNcUIsa0JBQWI7QUFDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0UsOEJBQVliLElBQVosRUFBa0JqRyxLQUFsQixFQUF5QkMsR0FBekIsRUFBOEI7QUFBQTs7QUFDNUIsU0FBS2dHLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtqRyxLQUFMLEdBQWFBLEtBQWI7QUFDQSxTQUFLQyxHQUFMLEdBQVdBLEdBQVg7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7QUFmQTtBQUFBO0FBQUE7QUFnQ0U7QUFDRjtBQUNBO0FBQ0UsMEJBQWE7QUFDWCxhQUFPO0FBQ0x3RyxRQUFBQSxJQUFJLEVBQUUsc0JBREQ7QUFFTHpHLFFBQUFBLEtBQUssRUFBRSxLQUFLQSxLQUZQO0FBR0xDLFFBQUFBLEdBQUcsRUFBRSxLQUFLQTtBQUhMLE9BQVA7QUFLRDtBQXpDSDtBQUFBO0FBQUEsV0EyQ0UsbUJBQVU7QUFDUixhQUFPcUYsZ0NBQUEsQ0FBc0IsS0FBS1csSUFBM0IsRUFBaUMsS0FBS2pHLEtBQXRDLEVBQTZDLEtBQUtDLEdBQWxELEVBQXVEc0csT0FBdkQsRUFBUDtBQUNEO0FBN0NIO0FBQUE7QUFBQSxXQWdCRSxtQkFBaUJOLElBQWpCLEVBQXVCUixLQUF2QixFQUE4QjtBQUM1QixVQUFNZSxTQUFTLEdBQUdsQiw4QkFBQSxDQUFvQkcsS0FBcEIsRUFBMkJGLFVBQTNCLENBQXNDVSxJQUF0QyxDQUFsQjtBQUNBLGFBQU8sSUFBSWEsa0JBQUosQ0FDTGIsSUFESyxFQUVMTyxTQUFTLENBQUN4RyxLQUFWLENBQWdCMEIsTUFGWCxFQUdMOEUsU0FBUyxDQUFDdkcsR0FBVixDQUFjeUIsTUFIVCxDQUFQO0FBS0Q7QUFDRDtBQUNGO0FBQ0E7QUFDQTs7QUEzQkE7QUFBQTtBQUFBLFdBNEJFLHNCQUFvQnVFLElBQXBCLEVBQTBCUyxRQUExQixFQUFvQztBQUNsQyxhQUFPLElBQUlJLGtCQUFKLENBQXVCYixJQUF2QixFQUE2QlMsUUFBUSxDQUFDMUcsS0FBdEMsRUFBNkMwRyxRQUFRLENBQUN6RyxHQUF0RCxDQUFQO0FBQ0Q7QUE5Qkg7O0FBQUE7QUFBQTtBQWdEQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBQ08sSUFBTStHLGVBQWI7QUFDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFLDJCQUFZZixJQUFaLEVBQWtCZ0IsS0FBbEIsRUFBdUM7QUFBQSxRQUFkekcsT0FBYyx1RUFBSixFQUFJOztBQUFBOztBQUNyQyxTQUFLeUYsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS2dCLEtBQUwsR0FBYUEsS0FBYjtBQUNBLFNBQUt6RyxPQUFMLEdBQWVBLE9BQWY7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQXJCQTtBQUFBO0FBQUE7QUF1REU7QUFDRjtBQUNBO0FBQ0UsMEJBQWE7QUFDWCxhQUFPO0FBQ0xpRyxRQUFBQSxJQUFJLEVBQUUsbUJBREQ7QUFFTFEsUUFBQUEsS0FBSyxFQUFFLEtBQUtBLEtBRlA7QUFHTDlGLFFBQUFBLE1BQU0sRUFBRSxLQUFLWCxPQUFMLENBQWFXLE1BSGhCO0FBSUxJLFFBQUFBLE1BQU0sRUFBRSxLQUFLZixPQUFMLENBQWFlO0FBSmhCLE9BQVA7QUFNRDtBQUVEO0FBQ0Y7QUFDQTs7QUFyRUE7QUFBQTtBQUFBLFdBc0VFLG1CQUFzQjtBQUFBLFVBQWRrRCxPQUFjLHVFQUFKLEVBQUk7QUFDcEIsYUFBTyxLQUFLeUMsZ0JBQUwsQ0FBc0J6QyxPQUF0QixFQUErQjhCLE9BQS9CLEVBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTs7QUE1RUE7QUFBQTtBQUFBLFdBNkVFLDRCQUErQjtBQUFBLFVBQWQ5QixPQUFjLHVFQUFKLEVBQUk7QUFDN0IsVUFBTWhGLElBQUk7QUFBRztBQUF1QixXQUFLd0csSUFBTCxDQUFVckQsV0FBOUM7QUFDQSxVQUFNaEMsS0FBSyxHQUFHTixVQUFVLENBQUNiLElBQUQsRUFBTyxLQUFLd0gsS0FBWixrQ0FDbkIsS0FBS3pHLE9BRGM7QUFFdEJpQixRQUFBQSxJQUFJLEVBQUVnRCxPQUFPLENBQUNoRDtBQUZRLFNBQXhCOztBQUlBLFVBQUksQ0FBQ2IsS0FBTCxFQUFZO0FBQ1YsY0FBTSxJQUFJd0QsS0FBSixDQUFVLGlCQUFWLENBQU47QUFDRDs7QUFDRCxhQUFPLElBQUkwQyxrQkFBSixDQUF1QixLQUFLYixJQUE1QixFQUFrQ3JGLEtBQUssQ0FBQ1osS0FBeEMsRUFBK0NZLEtBQUssQ0FBQ1gsR0FBckQsQ0FBUDtBQUNEO0FBdkZIO0FBQUE7QUFBQSxXQXNCRSxtQkFBaUJnRyxJQUFqQixFQUF1QlIsS0FBdkIsRUFBOEI7QUFDNUIsVUFBTWhHLElBQUk7QUFBRztBQUF1QndHLE1BQUFBLElBQUksQ0FBQ3JELFdBQXpDO0FBQ0EsVUFBTTRELFNBQVMsR0FBR2xCLDhCQUFBLENBQW9CRyxLQUFwQixFQUEyQkYsVUFBM0IsQ0FBc0NVLElBQXRDLENBQWxCO0FBRUEsVUFBTWpHLEtBQUssR0FBR3dHLFNBQVMsQ0FBQ3hHLEtBQVYsQ0FBZ0IwQixNQUE5QjtBQUNBLFVBQU16QixHQUFHLEdBQUd1RyxTQUFTLENBQUN2RyxHQUFWLENBQWN5QixNQUExQixDQUw0QixDQU81QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsVUFBTXlGLFVBQVUsR0FBRyxFQUFuQjtBQUVBLGFBQU8sSUFBSUgsZUFBSixDQUFvQmYsSUFBcEIsRUFBMEJ4RyxJQUFJLENBQUMyQixLQUFMLENBQVdwQixLQUFYLEVBQWtCQyxHQUFsQixDQUExQixFQUFrRDtBQUN2RGtCLFFBQUFBLE1BQU0sRUFBRTFCLElBQUksQ0FBQzJCLEtBQUwsQ0FBV1gsSUFBSSxDQUFDWSxHQUFMLENBQVMsQ0FBVCxFQUFZckIsS0FBSyxHQUFHbUgsVUFBcEIsQ0FBWCxFQUE0Q25ILEtBQTVDLENBRCtDO0FBRXZEdUIsUUFBQUEsTUFBTSxFQUFFOUIsSUFBSSxDQUFDMkIsS0FBTCxDQUFXbkIsR0FBWCxFQUFnQlEsSUFBSSxDQUFDQyxHQUFMLENBQVNqQixJQUFJLENBQUNTLE1BQWQsRUFBc0JELEdBQUcsR0FBR2tILFVBQTVCLENBQWhCO0FBRitDLE9BQWxELENBQVA7QUFJRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOztBQWpEQTtBQUFBO0FBQUEsV0FrREUsc0JBQW9CbEIsSUFBcEIsRUFBMEJTLFFBQTFCLEVBQW9DO0FBQ2xDLFVBQVF2RixNQUFSLEdBQTJCdUYsUUFBM0IsQ0FBUXZGLE1BQVI7QUFBQSxVQUFnQkksTUFBaEIsR0FBMkJtRixRQUEzQixDQUFnQm5GLE1BQWhCO0FBQ0EsYUFBTyxJQUFJeUYsZUFBSixDQUFvQmYsSUFBcEIsRUFBMEJTLFFBQVEsQ0FBQ08sS0FBbkMsRUFBMEM7QUFBRTlGLFFBQUFBLE1BQU0sRUFBTkEsTUFBRjtBQUFVSSxRQUFBQSxNQUFNLEVBQU5BO0FBQVYsT0FBMUMsQ0FBUDtBQUNEO0FBckRIOztBQUFBO0FBQUEsSTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUlBOztBQUNBNkYsTUFBTSxDQUFDQyxnQkFBUCxDQUNFLE9BREYsRUFFRSxVQUFVQyxLQUFWLEVBQWlCO0FBQ2ZDLEVBQUFBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQkYsS0FBSyxDQUFDRyxPQUF2QixFQUFnQ0gsS0FBSyxDQUFDSSxRQUF0QyxFQUFnREosS0FBSyxDQUFDSyxNQUF0RDtBQUNELENBSkgsRUFLRSxLQUxGLEdBUUE7O0FBQ0FQLE1BQU0sQ0FBQ0MsZ0JBQVAsQ0FDRSxNQURGLEVBRUUsWUFBWTtBQUNWLE1BQU1PLFFBQVEsR0FBRyxJQUFJQyxjQUFKLENBQW1CLFlBQU07QUFDeENDLElBQUFBLDJCQUEyQjtBQUM1QixHQUZnQixDQUFqQjtBQUdBRixFQUFBQSxRQUFRLENBQUNHLE9BQVQsQ0FBaUJsRCxRQUFRLENBQUNtRCxJQUExQjtBQUVBWixFQUFBQSxNQUFNLENBQUNDLGdCQUFQLENBQXdCLG1CQUF4QixFQUE2QyxZQUFZO0FBQ3ZEWSxJQUFBQSxzQkFBc0I7QUFDdEJDLElBQUFBLGlCQUFpQjtBQUNsQixHQUhEO0FBSUFELEVBQUFBLHNCQUFzQjtBQUN2QixDQWJILEVBY0UsS0FkRjtBQWlCQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTSCwyQkFBVCxHQUF1QztBQUNyQyxNQUFNSyxFQUFFLEdBQUcsc0JBQVg7QUFDQSxNQUFJQyxVQUFVLEdBQUd2RCxRQUFRLENBQUN3RCxjQUFULENBQXdCRixFQUF4QixDQUFqQjs7QUFDQSxNQUFJRyxtQkFBbUIsTUFBTUMsdUJBQXVCLE1BQU0sQ0FBMUQsRUFBNkQ7QUFDM0QsUUFBSUgsVUFBSixFQUFnQjtBQUNkQSxNQUFBQSxVQUFVLENBQUNJLE1BQVg7QUFDRDtBQUNGLEdBSkQsTUFJTztBQUNMLFFBQUlDLGFBQWEsR0FBRzVELFFBQVEsQ0FBQzZELGdCQUFULENBQTBCQyxXQUE5QztBQUNBLFFBQUlDLFFBQVEsR0FBR0gsYUFBYSxHQUFHSSxTQUEvQjtBQUNBLFFBQUlDLGNBQWMsR0FBSXJJLElBQUksQ0FBQ3NJLEtBQUwsQ0FBV0gsUUFBUSxHQUFHLENBQXRCLElBQTJCLENBQTVCLEdBQWlDLENBQWpDLEdBQXFDLEdBQTFEOztBQUNBLFFBQUlFLGNBQUosRUFBb0I7QUFDbEIsVUFBSVYsVUFBSixFQUFnQjtBQUNkQSxRQUFBQSxVQUFVLENBQUNJLE1BQVg7QUFDRCxPQUZELE1BRU87QUFDTEosUUFBQUEsVUFBVSxHQUFHdkQsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixLQUF2QixDQUFiO0FBQ0FaLFFBQUFBLFVBQVUsQ0FBQ2EsWUFBWCxDQUF3QixJQUF4QixFQUE4QmQsRUFBOUI7QUFDQUMsUUFBQUEsVUFBVSxDQUFDYyxLQUFYLENBQWlCQyxXQUFqQixHQUErQixRQUEvQjtBQUNBZixRQUFBQSxVQUFVLENBQUNnQixTQUFYLEdBQXVCLFNBQXZCLENBSkssQ0FJNkI7O0FBQ2xDdkUsUUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcUIsV0FBZCxDQUEwQmpCLFVBQTFCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBRU0sSUFBSVMsU0FBUyxHQUFHLENBQWhCOztBQUVQLFNBQVNaLHNCQUFULEdBQWtDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFJcUIsS0FBSyxHQUFHL0IsT0FBTyxDQUFDZ0MsZ0JBQVIsRUFBWjtBQUNBVixFQUFBQSxTQUFTLEdBQUdTLEtBQUssR0FBR2xDLE1BQU0sQ0FBQ29DLGdCQUEzQjtBQUNBQyxFQUFBQSxXQUFXLENBQ1QscUJBRFMsRUFFVCxVQUFVSCxLQUFWLEdBQWtCLE9BQWxCLEdBQTRCbEMsTUFBTSxDQUFDb0MsZ0JBQW5DLEdBQXNELEdBRjdDLENBQVg7QUFJRDs7QUFFTSxTQUFTakIsdUJBQVQsR0FBbUM7QUFDeEMsU0FBT21CLFFBQVEsQ0FDYnRDLE1BQU0sQ0FDSHVDLGdCQURILENBQ29COUUsUUFBUSxDQUFDK0UsZUFEN0IsRUFFR0MsZ0JBRkgsQ0FFb0IsY0FGcEIsQ0FEYSxDQUFmO0FBS0Q7QUFFTSxTQUFTdkIsbUJBQVQsR0FBK0I7QUFDcEMsU0FDRXpELFFBQVEsQ0FBQytFLGVBQVQsQ0FBeUJWLEtBQXpCLENBQ0dXLGdCQURILENBQ29CLGdCQURwQixFQUVHQyxRQUZILEdBR0dDLElBSEgsTUFHYSxtQkFKZjtBQU1EO0FBRU0sU0FBU0MsS0FBVCxHQUFpQjtBQUN0QixTQUFPbkYsUUFBUSxDQUFDbUQsSUFBVCxDQUFjaUMsR0FBZCxDQUFrQkMsV0FBbEIsTUFBbUMsS0FBMUM7QUFDRCxFQUVEOztBQUNPLFNBQVNDLFVBQVQsQ0FBb0JoQyxFQUFwQixFQUF3QjtBQUM3QixNQUFJbEYsT0FBTyxHQUFHNEIsUUFBUSxDQUFDd0QsY0FBVCxDQUF3QkYsRUFBeEIsQ0FBZDs7QUFDQSxNQUFJLENBQUNsRixPQUFMLEVBQWM7QUFDWixXQUFPLEtBQVA7QUFDRDs7QUFFRCxTQUFPbUgsWUFBWSxDQUFDbkgsT0FBTyxDQUFDb0gscUJBQVIsRUFBRCxDQUFuQjtBQUNELEVBRUQ7O0FBQ08sU0FBU0MsZ0JBQVQsQ0FBMEJDLFFBQTFCLEVBQW9DO0FBQ3pDO0FBQ0EsTUFBSUEsUUFBUSxHQUFHLENBQVgsSUFBZ0JBLFFBQVEsR0FBRyxDQUEvQixFQUFrQztBQUNoQyxVQUFNLDhEQUFOO0FBQ0Q7O0FBRUQsTUFBSTdJLE1BQUo7O0FBQ0EsTUFBSTRHLG1CQUFtQixFQUF2QixFQUEyQjtBQUN6QjVHLElBQUFBLE1BQU0sR0FBR21ELFFBQVEsQ0FBQzZELGdCQUFULENBQTBCOEIsWUFBMUIsR0FBeUNELFFBQWxEO0FBQ0ExRixJQUFBQSxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQitCLFNBQTFCLEdBQXNDL0ksTUFBdEMsQ0FGeUIsQ0FHekI7QUFDRCxHQUpELE1BSU87QUFDTCxRQUFJK0csYUFBYSxHQUFHNUQsUUFBUSxDQUFDNkQsZ0JBQVQsQ0FBMEJDLFdBQTlDO0FBQ0EsUUFBSStCLE1BQU0sR0FBR1YsS0FBSyxLQUFLLENBQUMsQ0FBTixHQUFVLENBQTVCO0FBQ0F0SSxJQUFBQSxNQUFNLEdBQUcrRyxhQUFhLEdBQUc4QixRQUFoQixHQUEyQkcsTUFBcEM7QUFDQTdGLElBQUFBLFFBQVEsQ0FBQzZELGdCQUFULENBQTBCaUMsVUFBMUIsR0FBdUNDLFVBQVUsQ0FBQ2xKLE1BQUQsQ0FBakQ7QUFDRDtBQUNGLEVBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBQ08sU0FBU21KLFlBQVQsQ0FBc0JwTCxJQUF0QixFQUE0QjtBQUNqQyxNQUFJZ0csS0FBSyxHQUFHcUYsZ0JBQWdCLENBQUM7QUFBRXJMLElBQUFBLElBQUksRUFBSkE7QUFBRixHQUFELENBQTVCOztBQUNBLE1BQUksQ0FBQ2dHLEtBQUwsRUFBWTtBQUNWLFdBQU8sS0FBUDtBQUNEOztBQUNEc0YsRUFBQUEsYUFBYSxDQUFDdEYsS0FBRCxDQUFiO0FBQ0EsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU3NGLGFBQVQsQ0FBdUJ0RixLQUF2QixFQUE4QjtBQUM1QjJFLEVBQUFBLFlBQVksQ0FBQzNFLEtBQUssQ0FBQzRFLHFCQUFOLEVBQUQsQ0FBWjtBQUNEOztBQUVELFNBQVNELFlBQVQsQ0FBc0JZLElBQXRCLEVBQTRCO0FBQzFCLE1BQUkxQyxtQkFBbUIsRUFBdkIsRUFBMkI7QUFDekJ6RCxJQUFBQSxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQitCLFNBQTFCLEdBQ0VPLElBQUksQ0FBQ0MsR0FBTCxHQUFXN0QsTUFBTSxDQUFDOEQsT0FBbEIsR0FBNEI5RCxNQUFNLENBQUMrRCxXQUFQLEdBQXFCLENBRG5EO0FBRUQsR0FIRCxNQUdPO0FBQ0x0RyxJQUFBQSxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQmlDLFVBQTFCLEdBQXVDQyxVQUFVLENBQy9DSSxJQUFJLENBQUNJLElBQUwsR0FBWWhFLE1BQU0sQ0FBQ2lFLE9BRDRCLENBQWpEO0FBR0Q7QUFDRjs7QUFFTSxTQUFTQyxhQUFULEdBQXlCO0FBQzlCO0FBQ0EsTUFBSSxDQUFDaEQsbUJBQW1CLEVBQXhCLEVBQTRCO0FBQzFCekQsSUFBQUEsUUFBUSxDQUFDNkQsZ0JBQVQsQ0FBMEJpQyxVQUExQixHQUF1QyxDQUF2QztBQUNELEdBRkQsTUFFTztBQUNMOUYsSUFBQUEsUUFBUSxDQUFDNkQsZ0JBQVQsQ0FBMEIrQixTQUExQixHQUFzQyxDQUF0QztBQUNBckQsSUFBQUEsTUFBTSxDQUFDbUUsUUFBUCxDQUFnQixDQUFoQixFQUFtQixDQUFuQjtBQUNEO0FBQ0Y7QUFFTSxTQUFTQyxXQUFULEdBQXVCO0FBQzVCO0FBQ0EsTUFBSSxDQUFDbEQsbUJBQW1CLEVBQXhCLEVBQTRCO0FBQzFCLFFBQUlvQyxNQUFNLEdBQUdWLEtBQUssS0FBSyxDQUFDLENBQU4sR0FBVSxDQUE1QjtBQUNBbkYsSUFBQUEsUUFBUSxDQUFDNkQsZ0JBQVQsQ0FBMEJpQyxVQUExQixHQUF1Q0MsVUFBVSxDQUMvQy9GLFFBQVEsQ0FBQzZELGdCQUFULENBQTBCQyxXQUExQixHQUF3QytCLE1BRE8sQ0FBakQ7QUFHRCxHQUxELE1BS087QUFDTDdGLElBQUFBLFFBQVEsQ0FBQzZELGdCQUFULENBQTBCK0IsU0FBMUIsR0FBc0M1RixRQUFRLENBQUNtRCxJQUFULENBQWN3QyxZQUFwRDtBQUNBcEQsSUFBQUEsTUFBTSxDQUFDbUUsUUFBUCxDQUFnQixDQUFoQixFQUFtQjFHLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY3dDLFlBQWpDO0FBQ0Q7QUFDRixFQUVEOztBQUNPLFNBQVNHLFVBQVQsR0FBc0I7QUFDM0IsTUFBSWxDLGFBQWEsR0FBRzVELFFBQVEsQ0FBQzZELGdCQUFULENBQTBCQyxXQUE5QztBQUNBLE1BQUlqSCxNQUFNLEdBQUcwRixNQUFNLENBQUNpRSxPQUFQLEdBQWlCeEMsU0FBOUI7QUFDQSxNQUFJNEMsU0FBUyxHQUFHekIsS0FBSyxLQUFLLEVBQUV2QixhQUFhLEdBQUdJLFNBQWxCLENBQUwsR0FBb0MsQ0FBekQ7QUFDQSxTQUFPNkMsY0FBYyxDQUFDakwsSUFBSSxDQUFDWSxHQUFMLENBQVNLLE1BQVQsRUFBaUIrSixTQUFqQixDQUFELENBQXJCO0FBQ0QsRUFFRDs7QUFDTyxTQUFTRSxXQUFULEdBQXVCO0FBQzVCLE1BQUlsRCxhQUFhLEdBQUc1RCxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQkMsV0FBOUM7QUFDQSxNQUFJakgsTUFBTSxHQUFHMEYsTUFBTSxDQUFDaUUsT0FBUCxHQUFpQnhDLFNBQTlCO0FBQ0EsTUFBSStDLFNBQVMsR0FBRzVCLEtBQUssS0FBSyxDQUFMLEdBQVN2QixhQUFhLEdBQUdJLFNBQTlDO0FBQ0EsU0FBTzZDLGNBQWMsQ0FBQ2pMLElBQUksQ0FBQ0MsR0FBTCxDQUFTZ0IsTUFBVCxFQUFpQmtLLFNBQWpCLENBQUQsQ0FBckI7QUFDRCxFQUVEO0FBQ0E7O0FBQ0EsU0FBU0YsY0FBVCxDQUF3QmhLLE1BQXhCLEVBQWdDO0FBQzlCO0FBQ0EsTUFBSTRHLG1CQUFtQixFQUF2QixFQUEyQjtBQUN6QixVQUFNLDRGQUFOO0FBQ0Q7O0FBRUQsTUFBSXVELGFBQWEsR0FBR3pFLE1BQU0sQ0FBQ2lFLE9BQTNCO0FBQ0F4RyxFQUFBQSxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQmlDLFVBQTFCLEdBQXVDQyxVQUFVLENBQUNsSixNQUFELENBQWpELENBUDhCLENBUTlCOztBQUNBLE1BQUlvSyxJQUFJLEdBQUdyTCxJQUFJLENBQUNrQixHQUFMLENBQVNrSyxhQUFhLEdBQUduSyxNQUF6QixJQUFtQ21ILFNBQTlDO0FBQ0EsU0FBT2lELElBQUksR0FBRyxJQUFkO0FBQ0QsRUFFRDs7O0FBQ0EsU0FBU2xCLFVBQVQsQ0FBb0JsSixNQUFwQixFQUE0QjtBQUMxQixNQUFJcUssS0FBSyxHQUFHckssTUFBTSxJQUFJc0ksS0FBSyxLQUFLLENBQUMsQ0FBTixHQUFVLENBQW5CLENBQWxCO0FBQ0EsU0FBTytCLEtBQUssR0FBSUEsS0FBSyxHQUFHbEQsU0FBeEI7QUFDRCxFQUVEOzs7QUFDQSxTQUFTWCxpQkFBVCxHQUE2QjtBQUMzQjtBQUNBLE1BQUlJLG1CQUFtQixFQUF2QixFQUEyQjtBQUN6QjtBQUNEOztBQUNELE1BQUl1RCxhQUFhLEdBQUd6RSxNQUFNLENBQUNpRSxPQUEzQixDQUwyQixDQU0zQjs7QUFDQSxNQUFJWCxNQUFNLEdBQUdWLEtBQUssS0FBSyxDQUFDLENBQU4sR0FBVSxDQUE1QjtBQUNBLE1BQUlnQyxLQUFLLEdBQUd0QixNQUFNLElBQUk3QixTQUFTLEdBQUcsQ0FBaEIsQ0FBbEI7QUFDQWhFLEVBQUFBLFFBQVEsQ0FBQzZELGdCQUFULENBQTBCaUMsVUFBMUIsR0FBdUNDLFVBQVUsQ0FBQ2lCLGFBQWEsR0FBR0csS0FBakIsQ0FBakQ7QUFDRDs7QUFFTSxTQUFTbEIsZ0JBQVQsQ0FBMEJtQixPQUExQixFQUFtQztBQUN4QyxNQUFJeE0sSUFBSSxHQUFHd00sT0FBTyxDQUFDeE0sSUFBbkI7O0FBQ0EsTUFBSSxDQUFDQSxJQUFELElBQVMsQ0FBQ0EsSUFBSSxDQUFDeU0sU0FBbkIsRUFBOEI7QUFDNUIsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsTUFBSTtBQUNGLFFBQUlqRyxJQUFKO0FBQ0EsUUFBSWtHLFNBQVMsR0FBR0YsT0FBTyxDQUFDRSxTQUF4Qjs7QUFDQSxRQUFJQSxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsV0FBM0IsRUFBd0M7QUFDdENuRyxNQUFBQSxJQUFJLEdBQUdwQixRQUFRLENBQUN3SCxhQUFULENBQXVCRixTQUFTLENBQUNDLFdBQWpDLENBQVA7QUFDRDs7QUFDRCxRQUFJLENBQUNuRyxJQUFMLEVBQVc7QUFDVEEsTUFBQUEsSUFBSSxHQUFHcEIsUUFBUSxDQUFDbUQsSUFBaEI7QUFDRDs7QUFFRCxRQUFJc0UsTUFBTSxHQUFHLElBQUl0RixlQUFKLENBQW9CZixJQUFwQixFQUEwQnhHLElBQUksQ0FBQ3lNLFNBQS9CLEVBQTBDO0FBQ3JEL0ssTUFBQUEsTUFBTSxFQUFFMUIsSUFBSSxDQUFDOE0sTUFEd0M7QUFFckRoTCxNQUFBQSxNQUFNLEVBQUU5QixJQUFJLENBQUMrTTtBQUZ3QyxLQUExQyxDQUFiO0FBSUEsV0FBT0YsTUFBTSxDQUFDL0YsT0FBUCxFQUFQO0FBQ0QsR0FmRCxDQWVFLE9BQU9rRyxDQUFQLEVBQVU7QUFDVmpGLElBQUFBLFFBQVEsQ0FBQ2lGLENBQUQsQ0FBUjtBQUNBLFdBQU8sSUFBUDtBQUNEO0FBQ0YsRUFFRDtBQUVBOztBQUNPLFNBQVNoRCxXQUFULENBQXFCaUQsR0FBckIsRUFBMEJYLEtBQTFCLEVBQWlDO0FBQ3RDLE1BQUk5RixJQUFJLEdBQUdwQixRQUFRLENBQUMrRSxlQUFwQjtBQUVBM0QsRUFBQUEsSUFBSSxDQUFDaUQsS0FBTCxDQUFXTyxXQUFYLENBQXVCaUQsR0FBdkIsRUFBNEJYLEtBQTVCO0FBQ0QsRUFFRDs7QUFDTyxTQUFTWSxjQUFULENBQXdCRCxHQUF4QixFQUE2QjtBQUNsQyxNQUFJekcsSUFBSSxHQUFHcEIsUUFBUSxDQUFDK0UsZUFBcEI7QUFFQTNELEVBQUFBLElBQUksQ0FBQ2lELEtBQUwsQ0FBV3lELGNBQVgsQ0FBMEJELEdBQTFCO0FBQ0QsRUFFRDs7QUFFTyxTQUFTRSxHQUFULEdBQWU7QUFDcEIsTUFBSW5GLE9BQU8sR0FBR29GLEtBQUssQ0FBQ0MsU0FBTixDQUFnQjFMLEtBQWhCLENBQXNCMkwsSUFBdEIsQ0FBMkJDLFNBQTNCLEVBQXNDQyxJQUF0QyxDQUEyQyxHQUEzQyxDQUFkO0FBQ0ExRixFQUFBQSxPQUFPLENBQUNxRixHQUFSLENBQVluRixPQUFaO0FBQ0Q7QUFFTSxTQUFTRCxRQUFULENBQWtCQyxPQUFsQixFQUEyQjtBQUNoQ0YsRUFBQUEsT0FBTyxDQUFDQyxRQUFSLENBQWlCQyxPQUFqQixFQUEwQixFQUExQixFQUE4QixDQUE5QjtBQUNELEM7Ozs7Ozs7Ozs7QUMzUkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsSUFBTTBGLEtBQUssR0FBRyxLQUFkO0FBRUE7QUFDQTtBQUNBOztBQUNPLFNBQVNDLFlBQVQsQ0FBc0JwQyxJQUF0QixFQUE0QjtBQUNqQyxNQUFNcUMsVUFBVSxHQUFHakcsTUFBTSxDQUFDb0MsZ0JBQTFCO0FBQ0EsTUFBTUYsS0FBSyxHQUFHMEIsSUFBSSxDQUFDMUIsS0FBTCxHQUFhK0QsVUFBM0I7QUFDQSxNQUFNQyxNQUFNLEdBQUd0QyxJQUFJLENBQUNzQyxNQUFMLEdBQWNELFVBQTdCO0FBQ0EsTUFBTWpDLElBQUksR0FBR0osSUFBSSxDQUFDSSxJQUFMLEdBQVlpQyxVQUF6QjtBQUNBLE1BQU1wQyxHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBTCxHQUFXb0MsVUFBdkI7QUFDQSxNQUFNRSxLQUFLLEdBQUduQyxJQUFJLEdBQUc5QixLQUFyQjtBQUNBLE1BQU1rRSxNQUFNLEdBQUd2QyxHQUFHLEdBQUdxQyxNQUFyQjtBQUNBLFNBQU87QUFBRWhFLElBQUFBLEtBQUssRUFBTEEsS0FBRjtBQUFTZ0UsSUFBQUEsTUFBTSxFQUFOQSxNQUFUO0FBQWlCbEMsSUFBQUEsSUFBSSxFQUFKQSxJQUFqQjtBQUF1QkgsSUFBQUEsR0FBRyxFQUFIQSxHQUF2QjtBQUE0QnNDLElBQUFBLEtBQUssRUFBTEEsS0FBNUI7QUFBbUNDLElBQUFBLE1BQU0sRUFBTkE7QUFBbkMsR0FBUDtBQUNEO0FBRU0sU0FBU0MsdUJBQVQsQ0FDTGhJLEtBREssRUFFTGlJLGtDQUZLLEVBR0w7QUFDQSxNQUFJQyxXQUFXLEdBQUdsSSxLQUFLLENBQUNtSSxjQUFOLEVBQWxCO0FBRUEsTUFBTUMsU0FBUyxHQUFHLENBQWxCO0FBQ0EsTUFBTUMsYUFBYSxHQUFHLEVBQXRCOztBQUpBLDZDQUs4QkgsV0FMOUI7QUFBQTs7QUFBQTtBQUtBLHdEQUEyQztBQUFBLFVBQWhDSSxlQUFnQztBQUN6Q0QsTUFBQUEsYUFBYSxDQUFDL04sSUFBZCxDQUFtQjtBQUNqQnlOLFFBQUFBLE1BQU0sRUFBRU8sZUFBZSxDQUFDUCxNQURQO0FBRWpCRixRQUFBQSxNQUFNLEVBQUVTLGVBQWUsQ0FBQ1QsTUFGUDtBQUdqQmxDLFFBQUFBLElBQUksRUFBRTJDLGVBQWUsQ0FBQzNDLElBSEw7QUFJakJtQyxRQUFBQSxLQUFLLEVBQUVRLGVBQWUsQ0FBQ1IsS0FKTjtBQUtqQnRDLFFBQUFBLEdBQUcsRUFBRThDLGVBQWUsQ0FBQzlDLEdBTEo7QUFNakIzQixRQUFBQSxLQUFLLEVBQUV5RSxlQUFlLENBQUN6RTtBQU5OLE9BQW5CO0FBUUQ7QUFkRDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWVBLE1BQU0wRSxXQUFXLEdBQUdDLGtCQUFrQixDQUNwQ0gsYUFEb0MsRUFFcENELFNBRm9DLEVBR3BDSCxrQ0FIb0MsQ0FBdEM7QUFLQSxNQUFNUSxnQkFBZ0IsR0FBR0Msb0JBQW9CLENBQUNILFdBQUQsRUFBY0gsU0FBZCxDQUE3QztBQUNBLE1BQU1PLFFBQVEsR0FBR0Msc0JBQXNCLENBQUNILGdCQUFELENBQXZDO0FBQ0EsTUFBTUksT0FBTyxHQUFHLElBQUksQ0FBcEI7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUdILFFBQVEsQ0FBQ2xPLE1BQVQsR0FBa0IsQ0FBL0IsRUFBa0NxTyxDQUFDLElBQUksQ0FBdkMsRUFBMENBLENBQUMsRUFBM0MsRUFBK0M7QUFDN0MsUUFBTXZELElBQUksR0FBR29ELFFBQVEsQ0FBQ0csQ0FBRCxDQUFyQjtBQUNBLFFBQU1DLFNBQVMsR0FBR3hELElBQUksQ0FBQzFCLEtBQUwsR0FBYTBCLElBQUksQ0FBQ3NDLE1BQWxCLEdBQTJCZ0IsT0FBN0M7O0FBQ0EsUUFBSSxDQUFDRSxTQUFMLEVBQWdCO0FBQ2QsVUFBSUosUUFBUSxDQUFDbE8sTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUN2QjBNLFFBQUFBLFFBQUcsQ0FBQywyQkFBRCxDQUFIO0FBQ0F3QixRQUFBQSxRQUFRLENBQUNLLE1BQVQsQ0FBZ0JGLENBQWhCLEVBQW1CLENBQW5CO0FBQ0QsT0FIRCxNQUdPO0FBQ0wzQixRQUFBQSxRQUFHLENBQUMsc0RBQUQsQ0FBSDtBQUNBO0FBQ0Q7QUFDRjtBQUNGOztBQUNEQSxFQUFBQSxRQUFHLGdDQUF5QmtCLGFBQWEsQ0FBQzVOLE1BQXZDLGtCQUFxRGtPLFFBQVEsQ0FBQ2xPLE1BQTlELEVBQUg7QUFDQSxTQUFPa08sUUFBUDtBQUNEOztBQUVELFNBQVNILGtCQUFULENBQ0VTLEtBREYsRUFFRWIsU0FGRixFQUdFSCxrQ0FIRixFQUlFO0FBQ0EsT0FBSyxJQUFJckksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3FKLEtBQUssQ0FBQ3hPLE1BQTFCLEVBQWtDbUYsQ0FBQyxFQUFuQyxFQUF1QztBQUFBLCtCQUM1QmtKLENBRDRCO0FBRW5DLFVBQU1JLEtBQUssR0FBR0QsS0FBSyxDQUFDckosQ0FBRCxDQUFuQjtBQUNBLFVBQU11SixLQUFLLEdBQUdGLEtBQUssQ0FBQ0gsQ0FBRCxDQUFuQjs7QUFDQSxVQUFJSSxLQUFLLEtBQUtDLEtBQWQsRUFBcUI7QUFDbkJoQyxRQUFBQSxRQUFHLENBQUMsd0NBQUQsQ0FBSDtBQUNBO0FBQ0Q7O0FBQ0QsVUFBTWlDLHFCQUFxQixHQUN6QkMsV0FBVyxDQUFDSCxLQUFLLENBQUMxRCxHQUFQLEVBQVkyRCxLQUFLLENBQUMzRCxHQUFsQixFQUF1QjRDLFNBQXZCLENBQVgsSUFDQWlCLFdBQVcsQ0FBQ0gsS0FBSyxDQUFDbkIsTUFBUCxFQUFlb0IsS0FBSyxDQUFDcEIsTUFBckIsRUFBNkJLLFNBQTdCLENBRmI7QUFHQSxVQUFNa0IsdUJBQXVCLEdBQzNCRCxXQUFXLENBQUNILEtBQUssQ0FBQ3ZELElBQVAsRUFBYXdELEtBQUssQ0FBQ3hELElBQW5CLEVBQXlCeUMsU0FBekIsQ0FBWCxJQUNBaUIsV0FBVyxDQUFDSCxLQUFLLENBQUNwQixLQUFQLEVBQWNxQixLQUFLLENBQUNyQixLQUFwQixFQUEyQk0sU0FBM0IsQ0FGYjtBQUdBLFVBQU1tQixpQkFBaUIsR0FBRyxDQUFDdEIsa0NBQTNCO0FBQ0EsVUFBTXVCLE9BQU8sR0FDVkYsdUJBQXVCLElBQUlDLGlCQUE1QixJQUNDSCxxQkFBcUIsSUFBSSxDQUFDRSx1QkFGN0I7QUFHQSxVQUFNRyxRQUFRLEdBQUdELE9BQU8sSUFBSUUsbUJBQW1CLENBQUNSLEtBQUQsRUFBUUMsS0FBUixFQUFlZixTQUFmLENBQS9DOztBQUNBLFVBQUlxQixRQUFKLEVBQWM7QUFDWnRDLFFBQUFBLFFBQUcsd0RBQytDaUMscUJBRC9DLDBCQUNvRkUsdUJBRHBGLGVBQ2dIckIsa0NBRGhILE9BQUg7QUFHQSxZQUFNVSxRQUFRLEdBQUdNLEtBQUssQ0FBQ1UsTUFBTixDQUFhLFVBQUNwRSxJQUFELEVBQVU7QUFDdEMsaUJBQU9BLElBQUksS0FBSzJELEtBQVQsSUFBa0IzRCxJQUFJLEtBQUs0RCxLQUFsQztBQUNELFNBRmdCLENBQWpCO0FBR0EsWUFBTVMscUJBQXFCLEdBQUdDLGVBQWUsQ0FBQ1gsS0FBRCxFQUFRQyxLQUFSLENBQTdDO0FBQ0FSLFFBQUFBLFFBQVEsQ0FBQ3JPLElBQVQsQ0FBY3NQLHFCQUFkO0FBQ0E7QUFBQSxhQUFPcEIsa0JBQWtCLENBQ3ZCRyxRQUR1QixFQUV2QlAsU0FGdUIsRUFHdkJILGtDQUh1QjtBQUF6QjtBQUtEO0FBakNrQzs7QUFDckMsU0FBSyxJQUFJYSxDQUFDLEdBQUdsSixDQUFDLEdBQUcsQ0FBakIsRUFBb0JrSixDQUFDLEdBQUdHLEtBQUssQ0FBQ3hPLE1BQTlCLEVBQXNDcU8sQ0FBQyxFQUF2QyxFQUEyQztBQUFBLHVCQUFsQ0EsQ0FBa0M7O0FBQUEsK0JBS3ZDO0FBTHVDO0FBaUMxQztBQUNGOztBQUNELFNBQU9HLEtBQVA7QUFDRDs7QUFFRCxTQUFTWSxlQUFULENBQXlCWCxLQUF6QixFQUFnQ0MsS0FBaEMsRUFBdUM7QUFDckMsTUFBTXhELElBQUksR0FBRzNLLElBQUksQ0FBQ0MsR0FBTCxDQUFTaU8sS0FBSyxDQUFDdkQsSUFBZixFQUFxQndELEtBQUssQ0FBQ3hELElBQTNCLENBQWI7QUFDQSxNQUFNbUMsS0FBSyxHQUFHOU0sSUFBSSxDQUFDWSxHQUFMLENBQVNzTixLQUFLLENBQUNwQixLQUFmLEVBQXNCcUIsS0FBSyxDQUFDckIsS0FBNUIsQ0FBZDtBQUNBLE1BQU10QyxHQUFHLEdBQUd4SyxJQUFJLENBQUNDLEdBQUwsQ0FBU2lPLEtBQUssQ0FBQzFELEdBQWYsRUFBb0IyRCxLQUFLLENBQUMzRCxHQUExQixDQUFaO0FBQ0EsTUFBTXVDLE1BQU0sR0FBRy9NLElBQUksQ0FBQ1ksR0FBTCxDQUFTc04sS0FBSyxDQUFDbkIsTUFBZixFQUF1Qm9CLEtBQUssQ0FBQ3BCLE1BQTdCLENBQWY7QUFDQSxTQUFPO0FBQ0xBLElBQUFBLE1BQU0sRUFBTkEsTUFESztBQUVMRixJQUFBQSxNQUFNLEVBQUVFLE1BQU0sR0FBR3ZDLEdBRlo7QUFHTEcsSUFBQUEsSUFBSSxFQUFKQSxJQUhLO0FBSUxtQyxJQUFBQSxLQUFLLEVBQUxBLEtBSks7QUFLTHRDLElBQUFBLEdBQUcsRUFBSEEsR0FMSztBQU1MM0IsSUFBQUEsS0FBSyxFQUFFaUUsS0FBSyxHQUFHbkM7QUFOVixHQUFQO0FBUUQ7O0FBRUQsU0FBUytDLG9CQUFULENBQThCTyxLQUE5QixFQUFxQ2IsU0FBckMsRUFBZ0Q7QUFDOUMsTUFBTTBCLFdBQVcsR0FBRyxJQUFJQyxHQUFKLENBQVFkLEtBQVIsQ0FBcEI7O0FBRDhDLDhDQUUzQkEsS0FGMkI7QUFBQTs7QUFBQTtBQUU5QywyREFBMEI7QUFBQSxVQUFmMUQsSUFBZTtBQUN4QixVQUFNd0QsU0FBUyxHQUFHeEQsSUFBSSxDQUFDMUIsS0FBTCxHQUFhLENBQWIsSUFBa0IwQixJQUFJLENBQUNzQyxNQUFMLEdBQWMsQ0FBbEQ7O0FBQ0EsVUFBSSxDQUFDa0IsU0FBTCxFQUFnQjtBQUNkNUIsUUFBQUEsUUFBRyxDQUFDLDBCQUFELENBQUg7QUFDQTJDLFFBQUFBLFdBQVcsQ0FBQ0UsTUFBWixDQUFtQnpFLElBQW5CO0FBQ0E7QUFDRDs7QUFOdUIsa0RBT2EwRCxLQVBiO0FBQUE7O0FBQUE7QUFPeEIsK0RBQTRDO0FBQUEsY0FBakNnQixzQkFBaUM7O0FBQzFDLGNBQUkxRSxJQUFJLEtBQUswRSxzQkFBYixFQUFxQztBQUNuQztBQUNEOztBQUNELGNBQUksQ0FBQ0gsV0FBVyxDQUFDSSxHQUFaLENBQWdCRCxzQkFBaEIsQ0FBTCxFQUE4QztBQUM1QztBQUNEOztBQUNELGNBQUlFLFlBQVksQ0FBQ0Ysc0JBQUQsRUFBeUIxRSxJQUF6QixFQUErQjZDLFNBQS9CLENBQWhCLEVBQTJEO0FBQ3pEakIsWUFBQUEsUUFBRyxDQUFDLCtCQUFELENBQUg7QUFDQTJDLFlBQUFBLFdBQVcsQ0FBQ0UsTUFBWixDQUFtQnpFLElBQW5CO0FBQ0E7QUFDRDtBQUNGO0FBbkJ1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0J6QjtBQXRCNkM7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUF1QjlDLFNBQU82QixLQUFLLENBQUNnRCxJQUFOLENBQVdOLFdBQVgsQ0FBUDtBQUNEOztBQUVELFNBQVNLLFlBQVQsQ0FBc0JqQixLQUF0QixFQUE2QkMsS0FBN0IsRUFBb0NmLFNBQXBDLEVBQStDO0FBQzdDLFNBQ0VpQyxpQkFBaUIsQ0FBQ25CLEtBQUQsRUFBUUMsS0FBSyxDQUFDeEQsSUFBZCxFQUFvQndELEtBQUssQ0FBQzNELEdBQTFCLEVBQStCNEMsU0FBL0IsQ0FBakIsSUFDQWlDLGlCQUFpQixDQUFDbkIsS0FBRCxFQUFRQyxLQUFLLENBQUNyQixLQUFkLEVBQXFCcUIsS0FBSyxDQUFDM0QsR0FBM0IsRUFBZ0M0QyxTQUFoQyxDQURqQixJQUVBaUMsaUJBQWlCLENBQUNuQixLQUFELEVBQVFDLEtBQUssQ0FBQ3hELElBQWQsRUFBb0J3RCxLQUFLLENBQUNwQixNQUExQixFQUFrQ0ssU0FBbEMsQ0FGakIsSUFHQWlDLGlCQUFpQixDQUFDbkIsS0FBRCxFQUFRQyxLQUFLLENBQUNyQixLQUFkLEVBQXFCcUIsS0FBSyxDQUFDcEIsTUFBM0IsRUFBbUNLLFNBQW5DLENBSm5CO0FBTUQ7O0FBRU0sU0FBU2lDLGlCQUFULENBQTJCOUUsSUFBM0IsRUFBaUMrRSxDQUFqQyxFQUFvQ0MsQ0FBcEMsRUFBdUNuQyxTQUF2QyxFQUFrRDtBQUN2RCxTQUNFLENBQUM3QyxJQUFJLENBQUNJLElBQUwsR0FBWTJFLENBQVosSUFBaUJqQixXQUFXLENBQUM5RCxJQUFJLENBQUNJLElBQU4sRUFBWTJFLENBQVosRUFBZWxDLFNBQWYsQ0FBN0IsTUFDQzdDLElBQUksQ0FBQ3VDLEtBQUwsR0FBYXdDLENBQWIsSUFBa0JqQixXQUFXLENBQUM5RCxJQUFJLENBQUN1QyxLQUFOLEVBQWF3QyxDQUFiLEVBQWdCbEMsU0FBaEIsQ0FEOUIsTUFFQzdDLElBQUksQ0FBQ0MsR0FBTCxHQUFXK0UsQ0FBWCxJQUFnQmxCLFdBQVcsQ0FBQzlELElBQUksQ0FBQ0MsR0FBTixFQUFXK0UsQ0FBWCxFQUFjbkMsU0FBZCxDQUY1QixNQUdDN0MsSUFBSSxDQUFDd0MsTUFBTCxHQUFjd0MsQ0FBZCxJQUFtQmxCLFdBQVcsQ0FBQzlELElBQUksQ0FBQ3dDLE1BQU4sRUFBY3dDLENBQWQsRUFBaUJuQyxTQUFqQixDQUgvQixDQURGO0FBTUQ7O0FBRUQsU0FBU1Esc0JBQVQsQ0FBZ0NLLEtBQWhDLEVBQXVDO0FBQ3JDLE9BQUssSUFBSXJKLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdxSixLQUFLLENBQUN4TyxNQUExQixFQUFrQ21GLENBQUMsRUFBbkMsRUFBdUM7QUFDckMsU0FBSyxJQUFJa0osQ0FBQyxHQUFHbEosQ0FBQyxHQUFHLENBQWpCLEVBQW9Ca0osQ0FBQyxHQUFHRyxLQUFLLENBQUN4TyxNQUE5QixFQUFzQ3FPLENBQUMsRUFBdkMsRUFBMkM7QUFDekMsVUFBTUksS0FBSyxHQUFHRCxLQUFLLENBQUNySixDQUFELENBQW5CO0FBQ0EsVUFBTXVKLEtBQUssR0FBR0YsS0FBSyxDQUFDSCxDQUFELENBQW5COztBQUNBLFVBQUlJLEtBQUssS0FBS0MsS0FBZCxFQUFxQjtBQUNuQmhDLFFBQUFBLFFBQUcsQ0FBQyw0Q0FBRCxDQUFIO0FBQ0E7QUFDRDs7QUFDRCxVQUFJdUMsbUJBQW1CLENBQUNSLEtBQUQsRUFBUUMsS0FBUixFQUFlLENBQUMsQ0FBaEIsQ0FBdkIsRUFBMkM7QUFBQTtBQUN6QyxjQUFJcUIsS0FBSyxHQUFHLEVBQVo7QUFDQSxjQUFJQyxRQUFRLFNBQVo7QUFDQSxjQUFNQyxjQUFjLEdBQUdDLFlBQVksQ0FBQ3pCLEtBQUQsRUFBUUMsS0FBUixDQUFuQzs7QUFDQSxjQUFJdUIsY0FBYyxDQUFDalEsTUFBZixLQUEwQixDQUE5QixFQUFpQztBQUMvQitQLFlBQUFBLEtBQUssR0FBR0UsY0FBUjtBQUNBRCxZQUFBQSxRQUFRLEdBQUd2QixLQUFYO0FBQ0QsV0FIRCxNQUdPO0FBQ0wsZ0JBQU0wQixjQUFjLEdBQUdELFlBQVksQ0FBQ3hCLEtBQUQsRUFBUUQsS0FBUixDQUFuQzs7QUFDQSxnQkFBSXdCLGNBQWMsQ0FBQ2pRLE1BQWYsR0FBd0JtUSxjQUFjLENBQUNuUSxNQUEzQyxFQUFtRDtBQUNqRCtQLGNBQUFBLEtBQUssR0FBR0UsY0FBUjtBQUNBRCxjQUFBQSxRQUFRLEdBQUd2QixLQUFYO0FBQ0QsYUFIRCxNQUdPO0FBQ0xzQixjQUFBQSxLQUFLLEdBQUdJLGNBQVI7QUFDQUgsY0FBQUEsUUFBUSxHQUFHdEIsS0FBWDtBQUNEO0FBQ0Y7O0FBQ0RoQyxVQUFBQSxRQUFHLG1EQUE0Q3FELEtBQUssQ0FBQy9QLE1BQWxELEVBQUg7QUFDQSxjQUFNa08sUUFBUSxHQUFHTSxLQUFLLENBQUNVLE1BQU4sQ0FBYSxVQUFDcEUsSUFBRCxFQUFVO0FBQ3RDLG1CQUFPQSxJQUFJLEtBQUtrRixRQUFoQjtBQUNELFdBRmdCLENBQWpCO0FBR0FyRCxVQUFBQSxLQUFLLENBQUNDLFNBQU4sQ0FBZ0IvTSxJQUFoQixDQUFxQnVRLEtBQXJCLENBQTJCbEMsUUFBM0IsRUFBcUM2QixLQUFyQztBQUNBO0FBQUEsZUFBTzVCLHNCQUFzQixDQUFDRCxRQUFEO0FBQTdCO0FBdEJ5Qzs7QUFBQTtBQXVCMUM7QUFDRjtBQUNGOztBQUNELFNBQU9NLEtBQVA7QUFDRDs7QUFFRCxTQUFTMEIsWUFBVCxDQUFzQnpCLEtBQXRCLEVBQTZCQyxLQUE3QixFQUFvQztBQUNsQyxNQUFNMkIsZUFBZSxHQUFHQyxhQUFhLENBQUM1QixLQUFELEVBQVFELEtBQVIsQ0FBckM7O0FBQ0EsTUFBSTRCLGVBQWUsQ0FBQ2pELE1BQWhCLEtBQTJCLENBQTNCLElBQWdDaUQsZUFBZSxDQUFDakgsS0FBaEIsS0FBMEIsQ0FBOUQsRUFBaUU7QUFDL0QsV0FBTyxDQUFDcUYsS0FBRCxDQUFQO0FBQ0Q7O0FBQ0QsTUFBTUQsS0FBSyxHQUFHLEVBQWQ7QUFDQTtBQUNFLFFBQU0rQixLQUFLLEdBQUc7QUFDWmpELE1BQUFBLE1BQU0sRUFBRW1CLEtBQUssQ0FBQ25CLE1BREY7QUFFWkYsTUFBQUEsTUFBTSxFQUFFLENBRkk7QUFHWmxDLE1BQUFBLElBQUksRUFBRXVELEtBQUssQ0FBQ3ZELElBSEE7QUFJWm1DLE1BQUFBLEtBQUssRUFBRWdELGVBQWUsQ0FBQ25GLElBSlg7QUFLWkgsTUFBQUEsR0FBRyxFQUFFMEQsS0FBSyxDQUFDMUQsR0FMQztBQU1aM0IsTUFBQUEsS0FBSyxFQUFFO0FBTkssS0FBZDtBQVFBbUgsSUFBQUEsS0FBSyxDQUFDbkgsS0FBTixHQUFjbUgsS0FBSyxDQUFDbEQsS0FBTixHQUFja0QsS0FBSyxDQUFDckYsSUFBbEM7QUFDQXFGLElBQUFBLEtBQUssQ0FBQ25ELE1BQU4sR0FBZW1ELEtBQUssQ0FBQ2pELE1BQU4sR0FBZWlELEtBQUssQ0FBQ3hGLEdBQXBDOztBQUNBLFFBQUl3RixLQUFLLENBQUNuRCxNQUFOLEtBQWlCLENBQWpCLElBQXNCbUQsS0FBSyxDQUFDbkgsS0FBTixLQUFnQixDQUExQyxFQUE2QztBQUMzQ29GLE1BQUFBLEtBQUssQ0FBQzNPLElBQU4sQ0FBVzBRLEtBQVg7QUFDRDtBQUNGO0FBQ0Q7QUFDRSxRQUFNQyxLQUFLLEdBQUc7QUFDWmxELE1BQUFBLE1BQU0sRUFBRStDLGVBQWUsQ0FBQ3RGLEdBRFo7QUFFWnFDLE1BQUFBLE1BQU0sRUFBRSxDQUZJO0FBR1psQyxNQUFBQSxJQUFJLEVBQUVtRixlQUFlLENBQUNuRixJQUhWO0FBSVptQyxNQUFBQSxLQUFLLEVBQUVnRCxlQUFlLENBQUNoRCxLQUpYO0FBS1p0QyxNQUFBQSxHQUFHLEVBQUUwRCxLQUFLLENBQUMxRCxHQUxDO0FBTVozQixNQUFBQSxLQUFLLEVBQUU7QUFOSyxLQUFkO0FBUUFvSCxJQUFBQSxLQUFLLENBQUNwSCxLQUFOLEdBQWNvSCxLQUFLLENBQUNuRCxLQUFOLEdBQWNtRCxLQUFLLENBQUN0RixJQUFsQztBQUNBc0YsSUFBQUEsS0FBSyxDQUFDcEQsTUFBTixHQUFlb0QsS0FBSyxDQUFDbEQsTUFBTixHQUFla0QsS0FBSyxDQUFDekYsR0FBcEM7O0FBQ0EsUUFBSXlGLEtBQUssQ0FBQ3BELE1BQU4sS0FBaUIsQ0FBakIsSUFBc0JvRCxLQUFLLENBQUNwSCxLQUFOLEtBQWdCLENBQTFDLEVBQTZDO0FBQzNDb0YsTUFBQUEsS0FBSyxDQUFDM08sSUFBTixDQUFXMlEsS0FBWDtBQUNEO0FBQ0Y7QUFDRDtBQUNFLFFBQU1DLEtBQUssR0FBRztBQUNabkQsTUFBQUEsTUFBTSxFQUFFbUIsS0FBSyxDQUFDbkIsTUFERjtBQUVaRixNQUFBQSxNQUFNLEVBQUUsQ0FGSTtBQUdabEMsTUFBQUEsSUFBSSxFQUFFbUYsZUFBZSxDQUFDbkYsSUFIVjtBQUlabUMsTUFBQUEsS0FBSyxFQUFFZ0QsZUFBZSxDQUFDaEQsS0FKWDtBQUtadEMsTUFBQUEsR0FBRyxFQUFFc0YsZUFBZSxDQUFDL0MsTUFMVDtBQU1abEUsTUFBQUEsS0FBSyxFQUFFO0FBTkssS0FBZDtBQVFBcUgsSUFBQUEsS0FBSyxDQUFDckgsS0FBTixHQUFjcUgsS0FBSyxDQUFDcEQsS0FBTixHQUFjb0QsS0FBSyxDQUFDdkYsSUFBbEM7QUFDQXVGLElBQUFBLEtBQUssQ0FBQ3JELE1BQU4sR0FBZXFELEtBQUssQ0FBQ25ELE1BQU4sR0FBZW1ELEtBQUssQ0FBQzFGLEdBQXBDOztBQUNBLFFBQUkwRixLQUFLLENBQUNyRCxNQUFOLEtBQWlCLENBQWpCLElBQXNCcUQsS0FBSyxDQUFDckgsS0FBTixLQUFnQixDQUExQyxFQUE2QztBQUMzQ29GLE1BQUFBLEtBQUssQ0FBQzNPLElBQU4sQ0FBVzRRLEtBQVg7QUFDRDtBQUNGO0FBQ0Q7QUFDRSxRQUFNQyxLQUFLLEdBQUc7QUFDWnBELE1BQUFBLE1BQU0sRUFBRW1CLEtBQUssQ0FBQ25CLE1BREY7QUFFWkYsTUFBQUEsTUFBTSxFQUFFLENBRkk7QUFHWmxDLE1BQUFBLElBQUksRUFBRW1GLGVBQWUsQ0FBQ2hELEtBSFY7QUFJWkEsTUFBQUEsS0FBSyxFQUFFb0IsS0FBSyxDQUFDcEIsS0FKRDtBQUtadEMsTUFBQUEsR0FBRyxFQUFFMEQsS0FBSyxDQUFDMUQsR0FMQztBQU1aM0IsTUFBQUEsS0FBSyxFQUFFO0FBTkssS0FBZDtBQVFBc0gsSUFBQUEsS0FBSyxDQUFDdEgsS0FBTixHQUFjc0gsS0FBSyxDQUFDckQsS0FBTixHQUFjcUQsS0FBSyxDQUFDeEYsSUFBbEM7QUFDQXdGLElBQUFBLEtBQUssQ0FBQ3RELE1BQU4sR0FBZXNELEtBQUssQ0FBQ3BELE1BQU4sR0FBZW9ELEtBQUssQ0FBQzNGLEdBQXBDOztBQUNBLFFBQUkyRixLQUFLLENBQUN0RCxNQUFOLEtBQWlCLENBQWpCLElBQXNCc0QsS0FBSyxDQUFDdEgsS0FBTixLQUFnQixDQUExQyxFQUE2QztBQUMzQ29GLE1BQUFBLEtBQUssQ0FBQzNPLElBQU4sQ0FBVzZRLEtBQVg7QUFDRDtBQUNGO0FBQ0QsU0FBT2xDLEtBQVA7QUFDRDs7QUFFRCxTQUFTOEIsYUFBVCxDQUF1QjdCLEtBQXZCLEVBQThCQyxLQUE5QixFQUFxQztBQUNuQyxNQUFNaUMsT0FBTyxHQUFHcFEsSUFBSSxDQUFDWSxHQUFMLENBQVNzTixLQUFLLENBQUN2RCxJQUFmLEVBQXFCd0QsS0FBSyxDQUFDeEQsSUFBM0IsQ0FBaEI7QUFDQSxNQUFNMEYsUUFBUSxHQUFHclEsSUFBSSxDQUFDQyxHQUFMLENBQVNpTyxLQUFLLENBQUNwQixLQUFmLEVBQXNCcUIsS0FBSyxDQUFDckIsS0FBNUIsQ0FBakI7QUFDQSxNQUFNd0QsTUFBTSxHQUFHdFEsSUFBSSxDQUFDWSxHQUFMLENBQVNzTixLQUFLLENBQUMxRCxHQUFmLEVBQW9CMkQsS0FBSyxDQUFDM0QsR0FBMUIsQ0FBZjtBQUNBLE1BQU0rRixTQUFTLEdBQUd2USxJQUFJLENBQUNDLEdBQUwsQ0FBU2lPLEtBQUssQ0FBQ25CLE1BQWYsRUFBdUJvQixLQUFLLENBQUNwQixNQUE3QixDQUFsQjtBQUNBLFNBQU87QUFDTEEsSUFBQUEsTUFBTSxFQUFFd0QsU0FESDtBQUVMMUQsSUFBQUEsTUFBTSxFQUFFN00sSUFBSSxDQUFDWSxHQUFMLENBQVMsQ0FBVCxFQUFZMlAsU0FBUyxHQUFHRCxNQUF4QixDQUZIO0FBR0wzRixJQUFBQSxJQUFJLEVBQUV5RixPQUhEO0FBSUx0RCxJQUFBQSxLQUFLLEVBQUV1RCxRQUpGO0FBS0w3RixJQUFBQSxHQUFHLEVBQUU4RixNQUxBO0FBTUx6SCxJQUFBQSxLQUFLLEVBQUU3SSxJQUFJLENBQUNZLEdBQUwsQ0FBUyxDQUFULEVBQVl5UCxRQUFRLEdBQUdELE9BQXZCO0FBTkYsR0FBUDtBQVFEOztBQUVELFNBQVMxQixtQkFBVCxDQUE2QlIsS0FBN0IsRUFBb0NDLEtBQXBDLEVBQTJDZixTQUEzQyxFQUFzRDtBQUNwRCxTQUNFLENBQUNjLEtBQUssQ0FBQ3ZELElBQU4sR0FBYXdELEtBQUssQ0FBQ3JCLEtBQW5CLElBQ0VNLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIsV0FBVyxDQUFDSCxLQUFLLENBQUN2RCxJQUFQLEVBQWF3RCxLQUFLLENBQUNyQixLQUFuQixFQUEwQk0sU0FBMUIsQ0FEaEMsTUFFQ2UsS0FBSyxDQUFDeEQsSUFBTixHQUFhdUQsS0FBSyxDQUFDcEIsS0FBbkIsSUFDRU0sU0FBUyxJQUFJLENBQWIsSUFBa0JpQixXQUFXLENBQUNGLEtBQUssQ0FBQ3hELElBQVAsRUFBYXVELEtBQUssQ0FBQ3BCLEtBQW5CLEVBQTBCTSxTQUExQixDQUhoQyxNQUlDYyxLQUFLLENBQUMxRCxHQUFOLEdBQVkyRCxLQUFLLENBQUNwQixNQUFsQixJQUNFSyxTQUFTLElBQUksQ0FBYixJQUFrQmlCLFdBQVcsQ0FBQ0gsS0FBSyxDQUFDMUQsR0FBUCxFQUFZMkQsS0FBSyxDQUFDcEIsTUFBbEIsRUFBMEJLLFNBQTFCLENBTGhDLE1BTUNlLEtBQUssQ0FBQzNELEdBQU4sR0FBWTBELEtBQUssQ0FBQ25CLE1BQWxCLElBQ0VLLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIsV0FBVyxDQUFDRixLQUFLLENBQUMzRCxHQUFQLEVBQVkwRCxLQUFLLENBQUNuQixNQUFsQixFQUEwQkssU0FBMUIsQ0FQaEMsQ0FERjtBQVVEOztBQUVELFNBQVNpQixXQUFULENBQXFCMU0sQ0FBckIsRUFBd0JDLENBQXhCLEVBQTJCd0wsU0FBM0IsRUFBc0M7QUFDcEMsU0FBT3BOLElBQUksQ0FBQ2tCLEdBQUwsQ0FBU1MsQ0FBQyxHQUFHQyxDQUFiLEtBQW1Cd0wsU0FBMUI7QUFDRDs7QUFFRCxTQUFTakIsUUFBVCxHQUFlO0FBQ2IsTUFBSU8sS0FBSixFQUFXO0FBQ1RELElBQUFBLFNBQUEsQ0FBZ0IsSUFBaEIsRUFBc0JGLFNBQXRCO0FBQ0Q7QUFDRixDOzs7Ozs7Ozs7Ozs7Ozs7O0FDelREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBRUEsSUFBSWlFLE1BQU0sR0FBRyxJQUFJQyxHQUFKLEVBQWI7QUFDQSxJQUFJQyxNQUFNLEdBQUcsSUFBSUQsR0FBSixFQUFiO0FBQ0EsSUFBSUUsV0FBVyxHQUFHLENBQWxCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDTyxTQUFTQyxpQkFBVCxDQUEyQkMsU0FBM0IsRUFBc0M7QUFDM0MsTUFBSUMsVUFBVSxHQUFHLEVBQWpCOztBQUVBLHFDQUEwQkMsTUFBTSxDQUFDQyxPQUFQLENBQWVILFNBQWYsQ0FBMUIscUNBQXFEO0FBQWhEO0FBQUEsUUFBT25KLEVBQVA7QUFBQSxRQUFXZSxLQUFYOztBQUNIK0gsSUFBQUEsTUFBTSxDQUFDUyxHQUFQLENBQVd2SixFQUFYLEVBQWVlLEtBQWY7O0FBQ0EsUUFBSUEsS0FBSyxDQUFDcUksVUFBVixFQUFzQjtBQUNwQkEsTUFBQUEsVUFBVSxJQUFJckksS0FBSyxDQUFDcUksVUFBTixHQUFtQixJQUFqQztBQUNEO0FBQ0Y7O0FBRUQsTUFBSUEsVUFBSixFQUFnQjtBQUNkLFFBQUlJLFlBQVksR0FBRzlNLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBbkI7QUFDQTJJLElBQUFBLFlBQVksQ0FBQ3ZJLFNBQWIsR0FBeUJtSSxVQUF6QjtBQUNBMU0sSUFBQUEsUUFBUSxDQUFDK00sb0JBQVQsQ0FBOEIsTUFBOUIsRUFBc0MsQ0FBdEMsRUFBeUN2SSxXQUF6QyxDQUFxRHNJLFlBQXJEO0FBQ0Q7QUFDRjtBQUVEO0FBQ0E7QUFDQTs7QUFDTyxTQUFTRSxjQUFULENBQXdCQyxTQUF4QixFQUFtQztBQUN4QyxNQUFJQyxLQUFLLEdBQUdaLE1BQU0sQ0FBQ2EsR0FBUCxDQUFXRixTQUFYLENBQVo7O0FBQ0EsTUFBSSxDQUFDQyxLQUFMLEVBQVk7QUFDVixRQUFJNUosRUFBRSxHQUFHLG1CQUFtQmlKLFdBQVcsRUFBdkM7QUFDQVcsSUFBQUEsS0FBSyxHQUFHRSxlQUFlLENBQUM5SixFQUFELEVBQUsySixTQUFMLENBQXZCO0FBQ0FYLElBQUFBLE1BQU0sQ0FBQ08sR0FBUCxDQUFXSSxTQUFYLEVBQXNCQyxLQUF0QjtBQUNEOztBQUNELFNBQU9BLEtBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUNPLFNBQVNHLDBCQUFULENBQW9DNUssS0FBcEMsRUFBMkM2SyxVQUEzQyxFQUF1RDtBQUM1RCxNQUFJaEIsTUFBTSxDQUFDaUIsSUFBUCxLQUFnQixDQUFwQixFQUF1QjtBQUNyQixXQUFPLEtBQVA7QUFDRDs7QUFFRCxXQUFTQyxVQUFULEdBQXNCO0FBQUEsd0RBQ2dCbEIsTUFEaEI7QUFBQTs7QUFBQTtBQUNwQiwwREFBNEM7QUFBQTtBQUFBLFlBQWhDWSxLQUFnQztBQUFBLFlBQXpCTyxZQUF5Qjs7QUFBQSw2REFDdkJBLFlBQVksQ0FBQ0MsS0FBYixDQUFtQkMsT0FBbkIsRUFEdUI7QUFBQTs7QUFBQTtBQUMxQyxpRUFBaUQ7QUFBQSxnQkFBdENDLElBQXNDOztBQUMvQyxnQkFBSSxDQUFDQSxJQUFJLENBQUNDLGlCQUFWLEVBQTZCO0FBQzNCO0FBQ0Q7O0FBSDhDLGlFQUl6QkQsSUFBSSxDQUFDQyxpQkFKb0I7QUFBQTs7QUFBQTtBQUkvQyxxRUFBOEM7QUFBQSxvQkFBbkN6UCxPQUFtQztBQUM1QyxvQkFBSStILElBQUksR0FBRy9ILE9BQU8sQ0FBQ29ILHFCQUFSLEdBQWdDc0ksTUFBaEMsRUFBWDs7QUFDQSxvQkFBSTdDLGlCQUFpQixDQUFDOUUsSUFBRCxFQUFPMUQsS0FBSyxDQUFDc0wsT0FBYixFQUFzQnRMLEtBQUssQ0FBQ3VMLE9BQTVCLEVBQXFDLENBQXJDLENBQXJCLEVBQThEO0FBQzVELHlCQUFPO0FBQUVkLG9CQUFBQSxLQUFLLEVBQUxBLEtBQUY7QUFBU1Usb0JBQUFBLElBQUksRUFBSkEsSUFBVDtBQUFleFAsb0JBQUFBLE9BQU8sRUFBUEEsT0FBZjtBQUF3QitILG9CQUFBQSxJQUFJLEVBQUpBO0FBQXhCLG1CQUFQO0FBQ0Q7QUFDRjtBQVQ4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVWhEO0FBWHlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZM0M7QUFibUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNyQjs7QUFFRCxNQUFJOEgsTUFBTSxHQUFHVCxVQUFVLEVBQXZCOztBQUNBLE1BQUksQ0FBQ1MsTUFBTCxFQUFhO0FBQ1gsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsU0FBT3ZMLE9BQU8sQ0FBQ3dMLHFCQUFSLENBQ0xDLElBQUksQ0FBQ0MsU0FBTCxDQUFlO0FBQ2I5SyxJQUFBQSxFQUFFLEVBQUUySyxNQUFNLENBQUNMLElBQVAsQ0FBWVMsVUFBWixDQUF1Qi9LLEVBRGQ7QUFFYjRKLElBQUFBLEtBQUssRUFBRWUsTUFBTSxDQUFDZixLQUZEO0FBR2IvRyxJQUFBQSxJQUFJLEVBQUVvQyxZQUFZLENBQUMwRixNQUFNLENBQUNMLElBQVAsQ0FBWWhOLEtBQVosQ0FBa0I0RSxxQkFBbEIsRUFBRCxDQUhMO0FBSWI4SSxJQUFBQSxLQUFLLEVBQUVoQjtBQUpNLEdBQWYsQ0FESyxDQUFQO0FBUUQ7QUFFRDtBQUNBO0FBQ0E7O0FBQ08sU0FBU0YsZUFBVCxDQUF5Qm1CLE9BQXpCLEVBQWtDdEIsU0FBbEMsRUFBNkM7QUFDbEQsTUFBSVMsS0FBSyxHQUFHLEVBQVo7QUFDQSxNQUFJYyxVQUFVLEdBQUcsQ0FBakI7QUFDQSxNQUFJQyxTQUFTLEdBQUcsSUFBaEI7QUFFQTtBQUNGO0FBQ0E7O0FBQ0UsV0FBU0MsR0FBVCxDQUFhTCxVQUFiLEVBQXlCO0FBQ3ZCLFFBQUkvSyxFQUFFLEdBQUdpTCxPQUFPLEdBQUcsR0FBVixHQUFnQkMsVUFBVSxFQUFuQztBQUVBLFFBQUk1TixLQUFLLEdBQUdxRixnQkFBZ0IsQ0FBQ29JLFVBQVUsQ0FBQ2pILE9BQVosQ0FBNUI7O0FBQ0EsUUFBSSxDQUFDeEcsS0FBTCxFQUFZO0FBQ1ZtSCxNQUFBQSxHQUFHLENBQUMsdUNBQUQsRUFBMENzRyxVQUExQyxDQUFIO0FBQ0E7QUFDRDs7QUFFRCxRQUFJVCxJQUFJLEdBQUc7QUFBRXRLLE1BQUFBLEVBQUUsRUFBRkEsRUFBRjtBQUFNK0ssTUFBQUEsVUFBVSxFQUFWQSxVQUFOO0FBQWtCek4sTUFBQUEsS0FBSyxFQUFMQTtBQUFsQixLQUFYO0FBQ0E4TSxJQUFBQSxLQUFLLENBQUN4UyxJQUFOLENBQVcwUyxJQUFYO0FBQ0FlLElBQUFBLE1BQU0sQ0FBQ2YsSUFBRCxDQUFOO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNFLFdBQVNqSyxNQUFULENBQWdCaUwsWUFBaEIsRUFBOEI7QUFDNUIsUUFBSUMsS0FBSyxHQUFHbkIsS0FBSyxDQUFDb0IsU0FBTixDQUFnQixVQUFDdE8sQ0FBRDtBQUFBLGFBQU9BLENBQUMsQ0FBQzZOLFVBQUYsQ0FBYS9LLEVBQWIsS0FBb0JzTCxZQUEzQjtBQUFBLEtBQWhCLENBQVo7O0FBQ0EsUUFBSUMsS0FBSyxLQUFLLENBQUMsQ0FBZixFQUFrQjtBQUNoQjtBQUNEOztBQUVELFFBQUlqQixJQUFJLEdBQUdGLEtBQUssQ0FBQ21CLEtBQUQsQ0FBaEI7QUFDQW5CLElBQUFBLEtBQUssQ0FBQzlELE1BQU4sQ0FBYWlGLEtBQWIsRUFBb0IsQ0FBcEI7QUFDQWpCLElBQUFBLElBQUksQ0FBQ0MsaUJBQUwsR0FBeUIsSUFBekI7O0FBQ0EsUUFBSUQsSUFBSSxDQUFDYSxTQUFULEVBQW9CO0FBQ2xCYixNQUFBQSxJQUFJLENBQUNhLFNBQUwsQ0FBZTlLLE1BQWY7QUFDQWlLLE1BQUFBLElBQUksQ0FBQ2EsU0FBTCxHQUFpQixJQUFqQjtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7OztBQUNFLFdBQVNNLE1BQVQsQ0FBZ0JWLFVBQWhCLEVBQTRCO0FBQzFCMUssSUFBQUEsTUFBTSxDQUFDMEssVUFBVSxDQUFDL0ssRUFBWixDQUFOO0FBQ0FvTCxJQUFBQSxHQUFHLENBQUNMLFVBQUQsQ0FBSDtBQUNEO0FBRUQ7QUFDRjtBQUNBOzs7QUFDRSxXQUFTVyxLQUFULEdBQWlCO0FBQ2ZDLElBQUFBLGNBQWM7QUFDZHZCLElBQUFBLEtBQUssQ0FBQ3JTLE1BQU4sR0FBZSxDQUFmO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRSxXQUFTNlQsYUFBVCxHQUF5QjtBQUN2QkQsSUFBQUEsY0FBYztBQUNkdkIsSUFBQUEsS0FBSyxDQUFDeUIsT0FBTixDQUFjLFVBQUN2QixJQUFEO0FBQUEsYUFBVWUsTUFBTSxDQUFDZixJQUFELENBQWhCO0FBQUEsS0FBZDtBQUNEO0FBRUQ7QUFDRjtBQUNBOzs7QUFDRSxXQUFTZSxNQUFULENBQWdCZixJQUFoQixFQUFzQjtBQUNwQixRQUFJd0IsY0FBYyxHQUFHQyxnQkFBZ0IsRUFBckM7QUFFQSxRQUFJaEwsS0FBSyxHQUFHK0gsTUFBTSxDQUFDZSxHQUFQLENBQVdTLElBQUksQ0FBQ1MsVUFBTCxDQUFnQmhLLEtBQTNCLENBQVo7O0FBQ0EsUUFBSSxDQUFDQSxLQUFMLEVBQVk7QUFDVjFCLE1BQUFBLFFBQVEscUNBQThCaUwsSUFBSSxDQUFDUyxVQUFMLENBQWdCaEssS0FBOUMsRUFBUjtBQUNBO0FBQ0Q7O0FBRUQsUUFBSWlMLGFBQWEsR0FBR3RQLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBcEI7QUFDQW1MLElBQUFBLGFBQWEsQ0FBQ2xMLFlBQWQsQ0FBMkIsSUFBM0IsRUFBaUN3SixJQUFJLENBQUN0SyxFQUF0QztBQUNBZ00sSUFBQUEsYUFBYSxDQUFDbEwsWUFBZCxDQUEyQixZQUEzQixFQUF5Q3dKLElBQUksQ0FBQ1MsVUFBTCxDQUFnQmhLLEtBQXpEO0FBQ0FpTCxJQUFBQSxhQUFhLENBQUNqTCxLQUFkLENBQW9CTyxXQUFwQixDQUFnQyxnQkFBaEMsRUFBa0QsTUFBbEQ7QUFFQSxRQUFJMkssYUFBYSxHQUFHaE4sTUFBTSxDQUFDaU4sVUFBM0I7QUFDQSxRQUFJQyxXQUFXLEdBQUc1SyxRQUFRLENBQ3hCQyxnQkFBZ0IsQ0FBQzlFLFFBQVEsQ0FBQytFLGVBQVYsQ0FBaEIsQ0FBMkNDLGdCQUEzQyxDQUNFLGNBREYsQ0FEd0IsQ0FBMUI7QUFLQSxRQUFJaEIsU0FBUyxHQUFHdUwsYUFBYSxJQUFJRSxXQUFXLElBQUksQ0FBbkIsQ0FBN0I7QUFDQSxRQUFJNUwsZ0JBQWdCLEdBQUc3RCxRQUFRLENBQUM2RCxnQkFBaEM7QUFDQSxRQUFJNkwsT0FBTyxHQUFHN0wsZ0JBQWdCLENBQUNpQyxVQUEvQjtBQUNBLFFBQUk2SixPQUFPLEdBQUc5TCxnQkFBZ0IsQ0FBQytCLFNBQS9COztBQUVBLGFBQVNnSyxlQUFULENBQXlCeFIsT0FBekIsRUFBa0MrSCxJQUFsQyxFQUF3QzBKLFlBQXhDLEVBQXNEO0FBQ3BEelIsTUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjcUIsUUFBZCxHQUF5QixVQUF6Qjs7QUFFQSxVQUFJckIsS0FBSyxDQUFDSSxLQUFOLEtBQWdCLE1BQXBCLEVBQTRCO0FBQzFCckcsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjSSxLQUFkLGFBQXlCMEIsSUFBSSxDQUFDMUIsS0FBOUI7QUFDQXJHLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY29FLE1BQWQsYUFBMEJ0QyxJQUFJLENBQUNzQyxNQUEvQjtBQUNBckssUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFja0MsSUFBZCxhQUF3QkosSUFBSSxDQUFDSSxJQUFMLEdBQVltSixPQUFwQztBQUNBdFIsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjK0IsR0FBZCxhQUF1QkQsSUFBSSxDQUFDQyxHQUFMLEdBQVd1SixPQUFsQztBQUNELE9BTEQsTUFLTyxJQUFJdEwsS0FBSyxDQUFDSSxLQUFOLEtBQWdCLFVBQXBCLEVBQWdDO0FBQ3JDckcsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjSSxLQUFkLGFBQXlCOEssYUFBekI7QUFDQW5SLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY29FLE1BQWQsYUFBMEJ0QyxJQUFJLENBQUNzQyxNQUEvQjtBQUNBLFlBQUlsQyxJQUFJLEdBQUczSyxJQUFJLENBQUNrVSxLQUFMLENBQVczSixJQUFJLENBQUNJLElBQUwsR0FBWWdKLGFBQXZCLElBQXdDQSxhQUFuRDtBQUNBblIsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFja0MsSUFBZCxhQUF3QkEsSUFBSSxHQUFHbUosT0FBL0I7QUFDQXRSLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBYytCLEdBQWQsYUFBdUJELElBQUksQ0FBQ0MsR0FBTCxHQUFXdUosT0FBbEM7QUFDRCxPQU5NLE1BTUEsSUFBSXRMLEtBQUssQ0FBQ0ksS0FBTixLQUFnQixRQUFwQixFQUE4QjtBQUNuQ3JHLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY0ksS0FBZCxhQUF5Qm9MLFlBQVksQ0FBQ3BMLEtBQXRDO0FBQ0FyRyxRQUFBQSxPQUFPLENBQUNpRyxLQUFSLENBQWNvRSxNQUFkLGFBQTBCdEMsSUFBSSxDQUFDc0MsTUFBL0I7QUFDQXJLLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY2tDLElBQWQsYUFBd0JzSixZQUFZLENBQUN0SixJQUFiLEdBQW9CbUosT0FBNUM7QUFDQXRSLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBYytCLEdBQWQsYUFBdUJELElBQUksQ0FBQ0MsR0FBTCxHQUFXdUosT0FBbEM7QUFDRCxPQUxNLE1BS0EsSUFBSXRMLEtBQUssQ0FBQ0ksS0FBTixLQUFnQixNQUFwQixFQUE0QjtBQUNqQ3JHLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY0ksS0FBZCxhQUF5QlQsU0FBekI7QUFDQTVGLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY29FLE1BQWQsYUFBMEJ0QyxJQUFJLENBQUNzQyxNQUEvQjs7QUFDQSxZQUFJbEMsS0FBSSxHQUFHM0ssSUFBSSxDQUFDa1UsS0FBTCxDQUFXM0osSUFBSSxDQUFDSSxJQUFMLEdBQVl2QyxTQUF2QixJQUFvQ0EsU0FBL0M7O0FBQ0E1RixRQUFBQSxPQUFPLENBQUNpRyxLQUFSLENBQWNrQyxJQUFkLGFBQXdCQSxLQUFJLEdBQUdtSixPQUEvQjtBQUNBdFIsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjK0IsR0FBZCxhQUF1QkQsSUFBSSxDQUFDQyxHQUFMLEdBQVd1SixPQUFsQztBQUNEO0FBQ0Y7O0FBRUQsUUFBSUUsWUFBWSxHQUFHakMsSUFBSSxDQUFDaE4sS0FBTCxDQUFXNEUscUJBQVgsRUFBbkI7QUFFQSxRQUFJdUssZUFBSjs7QUFDQSxRQUFJO0FBQ0YsVUFBSUMsUUFBUSxHQUFHaFEsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixVQUF2QixDQUFmO0FBQ0E2TCxNQUFBQSxRQUFRLENBQUN6TCxTQUFULEdBQXFCcUosSUFBSSxDQUFDUyxVQUFMLENBQWdCalEsT0FBaEIsQ0FBd0I4RyxJQUF4QixFQUFyQjtBQUNBNkssTUFBQUEsZUFBZSxHQUFHQyxRQUFRLENBQUNDLE9BQVQsQ0FBaUJDLGlCQUFuQztBQUNELEtBSkQsQ0FJRSxPQUFPQyxLQUFQLEVBQWM7QUFDZHhOLE1BQUFBLFFBQVEsd0NBQ3lCaUwsSUFBSSxDQUFDUyxVQUFMLENBQWdCalEsT0FEekMsaUJBQ3NEK1IsS0FBSyxDQUFDdk4sT0FENUQsRUFBUjtBQUdBO0FBQ0Q7O0FBRUQsUUFBSXlCLEtBQUssQ0FBQ3NLLE1BQU4sS0FBaUIsT0FBckIsRUFBOEI7QUFDNUIsVUFBSTlGLGtDQUFrQyxHQUFHLElBQXpDO0FBQ0EsVUFBSUMsV0FBVyxHQUFHRix1QkFBdUIsQ0FDdkNnRixJQUFJLENBQUNoTixLQURrQyxFQUV2Q2lJLGtDQUZ1QyxDQUF6QztBQUtBQyxNQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ3hMLElBQVosQ0FBaUIsVUFBQzhTLEVBQUQsRUFBS0MsRUFBTCxFQUFZO0FBQ3pDLFlBQUlELEVBQUUsQ0FBQ2hLLEdBQUgsR0FBU2lLLEVBQUUsQ0FBQ2pLLEdBQWhCLEVBQXFCO0FBQ25CLGlCQUFPLENBQUMsQ0FBUjtBQUNELFNBRkQsTUFFTyxJQUFJZ0ssRUFBRSxDQUFDaEssR0FBSCxHQUFTaUssRUFBRSxDQUFDakssR0FBaEIsRUFBcUI7QUFDMUIsaUJBQU8sQ0FBUDtBQUNELFNBRk0sTUFFQTtBQUNMLGlCQUFPLENBQVA7QUFDRDtBQUNGLE9BUmEsQ0FBZDs7QUFQNEIsMkRBaUJMMEMsV0FqQks7QUFBQTs7QUFBQTtBQWlCNUIsK0RBQW9DO0FBQUEsY0FBM0J3SCxVQUEyQjtBQUNsQyxjQUFNQyxJQUFJLEdBQUdSLGVBQWUsQ0FBQ1MsU0FBaEIsQ0FBMEIsSUFBMUIsQ0FBYjtBQUNBRCxVQUFBQSxJQUFJLENBQUNsTSxLQUFMLENBQVdPLFdBQVgsQ0FBdUIsZ0JBQXZCLEVBQXlDLE1BQXpDO0FBQ0FnTCxVQUFBQSxlQUFlLENBQUNXLElBQUQsRUFBT0QsVUFBUCxFQUFtQlQsWUFBbkIsQ0FBZjtBQUNBUCxVQUFBQSxhQUFhLENBQUNtQixNQUFkLENBQXFCRixJQUFyQjtBQUNEO0FBdEIyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUI3QixLQXZCRCxNQXVCTyxJQUFJbE0sS0FBSyxDQUFDc0ssTUFBTixLQUFpQixRQUFyQixFQUErQjtBQUNwQyxVQUFNK0IsTUFBTSxHQUFHWCxlQUFlLENBQUNTLFNBQWhCLENBQTBCLElBQTFCLENBQWY7QUFDQUUsTUFBQUEsTUFBTSxDQUFDck0sS0FBUCxDQUFhTyxXQUFiLENBQXlCLGdCQUF6QixFQUEyQyxNQUEzQztBQUNBZ0wsTUFBQUEsZUFBZSxDQUFDYyxNQUFELEVBQVNiLFlBQVQsRUFBdUJBLFlBQXZCLENBQWY7QUFFQVAsTUFBQUEsYUFBYSxDQUFDbUIsTUFBZCxDQUFxQkMsTUFBckI7QUFDRDs7QUFFRHRCLElBQUFBLGNBQWMsQ0FBQ3FCLE1BQWYsQ0FBc0JuQixhQUF0QjtBQUNBMUIsSUFBQUEsSUFBSSxDQUFDYSxTQUFMLEdBQWlCYSxhQUFqQjtBQUNBMUIsSUFBQUEsSUFBSSxDQUFDQyxpQkFBTCxHQUF5QjdGLEtBQUssQ0FBQ2dELElBQU4sQ0FDdkJzRSxhQUFhLENBQUNxQixnQkFBZCxDQUErQixzQkFBL0IsQ0FEdUIsQ0FBekI7O0FBR0EsUUFBSS9DLElBQUksQ0FBQ0MsaUJBQUwsQ0FBdUJ4UyxNQUF2QixLQUFrQyxDQUF0QyxFQUF5QztBQUN2Q3VTLE1BQUFBLElBQUksQ0FBQ0MsaUJBQUwsR0FBeUI3RixLQUFLLENBQUNnRCxJQUFOLENBQVdzRSxhQUFhLENBQUNzQixRQUF6QixDQUF6QjtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7OztBQUNFLFdBQVN2QixnQkFBVCxHQUE0QjtBQUMxQixRQUFJLENBQUNaLFNBQUwsRUFBZ0I7QUFDZEEsTUFBQUEsU0FBUyxHQUFHek8sUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixLQUF2QixDQUFaO0FBQ0FzSyxNQUFBQSxTQUFTLENBQUNySyxZQUFWLENBQXVCLElBQXZCLEVBQTZCbUssT0FBN0I7QUFDQUUsTUFBQUEsU0FBUyxDQUFDckssWUFBVixDQUF1QixZQUF2QixFQUFxQzZJLFNBQXJDO0FBQ0F3QixNQUFBQSxTQUFTLENBQUNwSyxLQUFWLENBQWdCTyxXQUFoQixDQUE0QixnQkFBNUIsRUFBOEMsTUFBOUM7QUFDQTVFLE1BQUFBLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY3NOLE1BQWQsQ0FBcUJoQyxTQUFyQjtBQUNEOztBQUNELFdBQU9BLFNBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTs7O0FBQ0UsV0FBU1EsY0FBVCxHQUEwQjtBQUN4QixRQUFJUixTQUFKLEVBQWU7QUFDYkEsTUFBQUEsU0FBUyxDQUFDOUssTUFBVjtBQUNBOEssTUFBQUEsU0FBUyxHQUFHLElBQVo7QUFDRDtBQUNGOztBQUVELFNBQU87QUFBRUMsSUFBQUEsR0FBRyxFQUFIQSxHQUFGO0FBQU8vSyxJQUFBQSxNQUFNLEVBQU5BLE1BQVA7QUFBZW9MLElBQUFBLE1BQU0sRUFBTkEsTUFBZjtBQUF1QkMsSUFBQUEsS0FBSyxFQUFMQSxLQUF2QjtBQUE4QnRCLElBQUFBLEtBQUssRUFBTEEsS0FBOUI7QUFBcUN3QixJQUFBQSxhQUFhLEVBQWJBO0FBQXJDLEdBQVA7QUFDRDtBQUVEM00sTUFBTSxDQUFDQyxnQkFBUCxDQUNFLE1BREYsRUFFRSxZQUFZO0FBQ1Y7QUFDQSxNQUFNVyxJQUFJLEdBQUduRCxRQUFRLENBQUNtRCxJQUF0QjtBQUNBLE1BQUkwTixRQUFRLEdBQUc7QUFBRXBNLElBQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlnRSxJQUFBQSxNQUFNLEVBQUU7QUFBcEIsR0FBZjtBQUNBLE1BQU0xRixRQUFRLEdBQUcsSUFBSUMsY0FBSixDQUFtQixZQUFNO0FBQ3hDLFFBQ0U2TixRQUFRLENBQUNwTSxLQUFULEtBQW1CdEIsSUFBSSxDQUFDMk4sV0FBeEIsSUFDQUQsUUFBUSxDQUFDcEksTUFBVCxLQUFvQnRGLElBQUksQ0FBQzROLFlBRjNCLEVBR0U7QUFDQTtBQUNEOztBQUNERixJQUFBQSxRQUFRLEdBQUc7QUFDVHBNLE1BQUFBLEtBQUssRUFBRXRCLElBQUksQ0FBQzJOLFdBREg7QUFFVHJJLE1BQUFBLE1BQU0sRUFBRXRGLElBQUksQ0FBQzROO0FBRkosS0FBWDtBQUtBekUsSUFBQUEsTUFBTSxDQUFDNkMsT0FBUCxDQUFlLFVBQVVqQyxLQUFWLEVBQWlCO0FBQzlCQSxNQUFBQSxLQUFLLENBQUNnQyxhQUFOO0FBQ0QsS0FGRDtBQUdELEdBZmdCLENBQWpCO0FBZ0JBbk0sRUFBQUEsUUFBUSxDQUFDRyxPQUFULENBQWlCQyxJQUFqQjtBQUNELENBdkJILEVBd0JFLEtBeEJGLEU7O0FDM1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBWixNQUFNLENBQUNDLGdCQUFQLENBQXdCLGtCQUF4QixFQUE0QyxZQUFZO0FBQ3REeEMsRUFBQUEsUUFBUSxDQUFDd0MsZ0JBQVQsQ0FBMEIsT0FBMUIsRUFBbUN3TyxPQUFuQyxFQUE0QyxLQUE1QztBQUNELENBRkQ7O0FBSUEsU0FBU0EsT0FBVCxDQUFpQnZPLEtBQWpCLEVBQXdCO0FBQ3RCLE1BQUksQ0FBQ0YsTUFBTSxDQUFDME8sWUFBUCxHQUFzQkMsV0FBM0IsRUFBd0M7QUFDdEM7QUFDQTtBQUNEOztBQUVELE1BQUkxSSxVQUFVLEdBQUdqRyxNQUFNLENBQUNvQyxnQkFBeEI7QUFDQSxNQUFJMkksVUFBVSxHQUFHO0FBQ2Y2RCxJQUFBQSxnQkFBZ0IsRUFBRTFPLEtBQUssQ0FBQzBPLGdCQURUO0FBRWZqRyxJQUFBQSxDQUFDLEVBQUV6SSxLQUFLLENBQUNzTCxPQUFOLEdBQWdCdkYsVUFGSjtBQUdmMkMsSUFBQUEsQ0FBQyxFQUFFMUksS0FBSyxDQUFDdUwsT0FBTixHQUFnQnhGLFVBSEo7QUFJZjRJLElBQUFBLGFBQWEsRUFBRTNPLEtBQUssQ0FBQ3dMLE1BQU4sQ0FBYW9ELFNBSmI7QUFLZkMsSUFBQUEsa0JBQWtCLEVBQUVDLHlCQUF5QixDQUFDOU8sS0FBSyxDQUFDd0wsTUFBUDtBQUw5QixHQUFqQjs7QUFRQSxNQUFJWiwwQkFBMEIsQ0FBQzVLLEtBQUQsRUFBUTZLLFVBQVIsQ0FBOUIsRUFBbUQ7QUFDakQ7QUFDRCxHQWpCcUIsQ0FtQnRCO0FBQ0E7OztBQUNBLE1BQUlrRSxvQkFBb0IsR0FBRzlPLE9BQU8sQ0FBQytPLEtBQVIsQ0FBY3RELElBQUksQ0FBQ0MsU0FBTCxDQUFlZCxVQUFmLENBQWQsQ0FBM0I7O0FBRUEsTUFBSWtFLG9CQUFKLEVBQTBCO0FBQ3hCL08sSUFBQUEsS0FBSyxDQUFDaVAsZUFBTjtBQUNBalAsSUFBQUEsS0FBSyxDQUFDa1AsY0FBTjtBQUNEO0FBQ0YsRUFFRDs7O0FBQ0EsU0FBU0oseUJBQVQsQ0FBbUNuVCxPQUFuQyxFQUE0QztBQUMxQyxNQUFJd1QsZUFBZSxHQUFHLENBQ3BCLEdBRG9CLEVBRXBCLE9BRm9CLEVBR3BCLFFBSG9CLEVBSXBCLFFBSm9CLEVBS3BCLFNBTG9CLEVBTXBCLE9BTm9CLEVBT3BCLE9BUG9CLEVBUXBCLFFBUm9CLEVBU3BCLFFBVG9CLEVBVXBCLFFBVm9CLEVBV3BCLFVBWG9CLEVBWXBCLE9BWm9CLENBQXRCOztBQWNBLE1BQUlBLGVBQWUsQ0FBQzNXLE9BQWhCLENBQXdCbUQsT0FBTyxDQUFDeVQsUUFBUixDQUFpQnhNLFdBQWpCLEVBQXhCLEtBQTJELENBQUMsQ0FBaEUsRUFBbUU7QUFDakUsV0FBT2pILE9BQU8sQ0FBQ2lULFNBQWY7QUFDRCxHQWpCeUMsQ0FtQjFDOzs7QUFDQSxNQUNFalQsT0FBTyxDQUFDMFQsWUFBUixDQUFxQixpQkFBckIsS0FDQTFULE9BQU8sQ0FBQzJULFlBQVIsQ0FBcUIsaUJBQXJCLEVBQXdDMU0sV0FBeEMsTUFBeUQsT0FGM0QsRUFHRTtBQUNBLFdBQU9qSCxPQUFPLENBQUNpVCxTQUFmO0FBQ0QsR0F6QnlDLENBMkIxQzs7O0FBQ0EsTUFBSWpULE9BQU8sQ0FBQ3VCLGFBQVosRUFBMkI7QUFDekIsV0FBTzRSLHlCQUF5QixDQUFDblQsT0FBTyxDQUFDdUIsYUFBVCxDQUFoQztBQUNEOztBQUVELFNBQU8sSUFBUDtBQUNELEM7Ozs7Ozs7Ozs7QUMzRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU1xUyx3QkFBd0IsR0FBRyxrQkFBakM7QUFDQSxJQUFNQyx1QkFBdUIsR0FBRyxzQkFBaEM7QUFDQSxJQUFNQyxrQkFBa0IsR0FBRyxpQkFBM0I7QUFDQSxJQUFNQyx5QkFBeUIsR0FBRyx1QkFBbEM7QUFDQSxJQUFNQyw0QkFBNEIsR0FBRyxtQkFBckM7QUFDQSxJQUFNQyxtQkFBbUIsR0FBRyx3QkFBNUI7QUFDQSxJQUFNQyxlQUFlLEdBQUcsaUJBQXhCO0FBQ0EsSUFBTUMsV0FBVyxHQUFHLGFBQXBCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLGVBQXRCO0FBQ0EsSUFBTUMsa0JBQWtCLEdBQUcsb0JBQTNCO0FBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsWUFBekI7QUFDQSxJQUFNQyxXQUFXLEdBQUcsYUFBcEI7QUFDQSxJQUFNQyxvQkFBb0IsR0FBRyxlQUE3QjtBQUNBLElBQU1DLDJCQUEyQixHQUFHLG9CQUFwQztBQUNBLElBQU1DLHVCQUF1QixHQUFHLHFCQUFoQztBQUNBLElBQU1DLDBCQUEwQixHQUFHLHNCQUFuQztBQUNBLElBQU1DLHNCQUFzQixHQUFHLDRCQUEvQjtBQUNBLElBQU1DLHVCQUF1QixHQUFHLDRCQUFoQztBQUNBLElBQU1DLHVCQUF1QixHQUFHLDRCQUFoQztBQUNBLElBQU1DLHlCQUF5QixHQUFHLDhCQUFsQztBQUNBLElBQU1DLDBCQUEwQixHQUFHLCtCQUFuQztBQUNBLElBQU1DLG9CQUFvQixHQUFHLHlCQUE3QjtBQUNBLElBQU1DLHFCQUFxQixHQUFHLDBCQUE5QjtBQUNBLElBQU1DLDZCQUE2QixHQUFHLGtDQUF0QztBQUNBLElBQU1DLDhCQUE4QixHQUFHLG1DQUF2QyxFQUNBOztBQUNBLElBQU1DLHVCQUF1QixHQUFHLENBQzlCdkIsa0JBRDhCLEVBRTlCWSx1QkFGOEIsRUFHOUJDLDBCQUg4QixFQUk5QkUsdUJBSjhCLEVBSzlCRSx5QkFMOEIsRUFNOUJFLG9CQU44QixFQU85QkUsNkJBUDhCLEVBUTlCLGVBUjhCLENBQWhDO0FBVUEsSUFBTUcsZUFBZSxHQUFHLGtCQUF4QixFQUVBOztBQUNBLElBQU1DLE1BQU0sR0FBRyxLQUFmO0FBQ0EsSUFBTUMsV0FBVyxHQUFHLEVBQXBCOztBQUVBLElBQUlDLG9CQUFKOztBQUNBLElBQUlDLG9CQUFKOztBQUNBLElBQUlDLGNBQWMsR0FBRyxDQUFDLENBQXRCO0FBQ0EsSUFBSUMsY0FBYyxHQUFHLENBQUMsQ0FBdEI7QUFDQSxJQUFJQyxxQkFBcUIsR0FBRyxLQUE1QjtBQUVBLElBQU1DLE9BQU8sR0FBRyxLQUFoQjtBQUNBLElBQU1DLGdDQUFnQyxHQUFHLEdBQXpDO0FBQ0EsSUFBTUMsNEJBQTRCLEdBQUcsSUFBckMsRUFFQTs7QUFDQSxJQUFNQyxhQUFhLEdBQUcsS0FBdEI7QUFDQSxJQUFNQyx3QkFBd0IsR0FBRztBQUMvQkMsRUFBQUEsSUFBSSxFQUFFLEdBRHlCO0FBRS9CQyxFQUFBQSxLQUFLLEVBQUUsRUFGd0I7QUFHL0JDLEVBQUFBLEdBQUcsRUFBRTtBQUgwQixDQUFqQztBQU1BLElBQU1DLGdCQUFnQixHQUFHLEVBQXpCOztBQUVBLFNBQVNDLDJCQUFULENBQXFDQyxJQUFyQyxFQUEyQ0MsaUJBQTNDLEVBQThEO0FBQzVELE1BQ0VBLGlCQUFpQixDQUFDOUMsWUFBbEIsQ0FBK0IsT0FBL0IsS0FBMkN5Qiw4QkFEN0MsRUFFRTtBQUNBO0FBQ0Q7O0FBQ0RxQixFQUFBQSxpQkFBaUIsQ0FBQ3hRLEtBQWxCLENBQXdCeVEsT0FBeEIsR0FBa0MsTUFBbEM7QUFDQUQsRUFBQUEsaUJBQWlCLENBQUN4USxLQUFsQixDQUF3Qk8sV0FBeEIsQ0FDRSxrQkFERixFQUVFLGFBRkYsRUFHRSxXQUhGO0FBS0Q7O0FBRUQsU0FBU21RLHFCQUFULENBQStCQyxHQUEvQixFQUFvQ0MsY0FBcEMsRUFBb0Q1TixTQUFwRCxFQUErRDtBQUM3RCxNQUFNNk4sTUFBTSxHQUFHLENBQUNiLGFBQUQsSUFBa0JILE9BQWpDOztBQUQ2RCxzREFFakNlLGNBRmlDO0FBQUE7O0FBQUE7QUFFN0Qsd0RBQTRDO0FBQUEsVUFBakNFLGFBQWlDO0FBQzFDLFVBQU1DLEtBQUssR0FBR0YsTUFBTSxJQUFJQyxhQUFhLENBQUNFLFlBQWQsS0FBK0JDLGlCQUF2RDtBQUNBLFVBQU1DLE9BQU8sR0FBR25CLDRCQUFoQjs7QUFDQSxVQUFJZ0IsS0FBSixFQUFXO0FBQ1RELFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0JPLFdBQXBCLENBQ0UsTUFERixnQkFFU3lDLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBRnpCLGVBRWlDcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBRmpELGVBRTJEbk4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmpCLElBRjNFLFFBR0UsV0FIRjtBQUtBWSxRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLGNBREYsWUFFSzJRLE9BRkwsR0FHRSxXQUhGO0FBS0FKLFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0JPLFdBQXBCLENBQ0UsUUFERixnQkFFU3lDLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBRnpCLGVBRWlDcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBRmpELGVBRTJEbk4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmpCLElBRjNFLFFBR0UsV0FIRjtBQUtBWSxRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLGdCQURGLFlBRUsyUSxPQUZMLEdBR0UsV0FIRjtBQUtELE9BckJELE1BcUJPO0FBQ0xKLFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0JPLFdBQXBCLENBQ0Usa0JBREYsaUJBRVV5QyxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUYxQixlQUVrQ3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZsRCxlQUU0RG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUY1RSxlQUVxRmdCLE9BRnJGLFFBR0UsV0FIRjtBQUtEO0FBQ0Y7QUFqQzREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQzlEOztBQUVELFNBQVNFLHVCQUFULENBQWlDVCxHQUFqQyxFQUFzQ0csYUFBdEMsRUFBcUQ7QUFDbkQsTUFBTUQsTUFBTSxHQUFHLENBQUNiLGFBQUQsSUFBa0JILE9BQWpDLENBRG1ELENBRW5EOztBQUNBLE1BQU1rQixLQUFLLEdBQUdGLE1BQU0sSUFBSUMsYUFBYSxDQUFDRSxZQUFkLEtBQStCQyxpQkFBdkQ7QUFDQSxNQUFNaFMsRUFBRSxHQUFHOFIsS0FBSyxHQUNaRCxhQUFhLENBQUNPLFVBQWQsSUFDQVAsYUFBYSxDQUFDTyxVQUFkLENBQXlCQSxVQUR6QixJQUVBUCxhQUFhLENBQUNPLFVBQWQsQ0FBeUJBLFVBQXpCLENBQW9DL1gsUUFBcEMsS0FBaURDLElBQUksQ0FBQ0MsWUFGdEQsSUFHQXNYLGFBQWEsQ0FBQ08sVUFBZCxDQUF5QkEsVUFBekIsQ0FBb0MzRCxZQUhwQyxHQUlFb0QsYUFBYSxDQUFDTyxVQUFkLENBQXlCQSxVQUF6QixDQUFvQzNELFlBQXBDLENBQWlELElBQWpELENBSkYsR0FLRTlTLFNBTlUsR0FPWmtXLGFBQWEsQ0FBQ08sVUFBZCxJQUNBUCxhQUFhLENBQUNPLFVBQWQsQ0FBeUIvWCxRQUF6QixLQUFzQ0MsSUFBSSxDQUFDQyxZQUQzQyxJQUVBc1gsYUFBYSxDQUFDTyxVQUFkLENBQXlCM0QsWUFGekIsR0FHQW9ELGFBQWEsQ0FBQ08sVUFBZCxDQUF5QjNELFlBQXpCLENBQXNDLElBQXRDLENBSEEsR0FJQTlTLFNBWEo7O0FBWUEsTUFBSXFFLEVBQUosRUFBUTtBQUNOLFFBQU0rRCxTQUFTLEdBQUd1TSxXQUFXLENBQUMrQixJQUFaLENBQWlCLFVBQUNDLENBQUQsRUFBTztBQUN4QyxhQUFPQSxDQUFDLENBQUN0UyxFQUFGLEtBQVNBLEVBQWhCO0FBQ0QsS0FGaUIsQ0FBbEI7O0FBR0EsUUFBSStELFNBQUosRUFBZTtBQUNiLFVBQU1rTyxPQUFPLEdBQUdwQixnQ0FBaEI7O0FBQ0EsVUFBSWlCLEtBQUosRUFBVztBQUNURCxRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLE1BREYsZ0JBRVN5QyxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUZ6QixlQUVpQ3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZqRCxlQUUyRG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUYzRSxRQUdFLFdBSEY7QUFLQVksUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQk8sV0FBcEIsQ0FDRSxjQURGLFlBRUsyUSxPQUZMLEdBR0UsV0FIRjtBQUtBSixRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLFFBREYsZ0JBRVN5QyxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUZ6QixlQUVpQ3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZqRCxlQUUyRG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUYzRSxRQUdFLFdBSEY7QUFLQVksUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQk8sV0FBcEIsQ0FDRSxnQkFERixZQUVLMlEsT0FGTCxHQUdFLFdBSEY7QUFLRCxPQXJCRCxNQXFCTztBQUNMSixRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLGtCQURGLGlCQUVVeUMsU0FBUyxDQUFDbU8sS0FBVixDQUFnQmYsR0FGMUIsZUFFa0NwTixTQUFTLENBQUNtTyxLQUFWLENBQWdCaEIsS0FGbEQsZUFFNERuTixTQUFTLENBQUNtTyxLQUFWLENBQWdCakIsSUFGNUUsZUFFcUZnQixPQUZyRixRQUdFLFdBSEY7QUFLRDtBQUNGO0FBQ0Y7QUFDRjs7QUFDRCxTQUFTTSxpQkFBVCxDQUEyQmIsR0FBM0IsRUFBZ0NjLEVBQWhDLEVBQW9DO0FBQ2xDLE1BQU05VixRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjtBQUNBLE1BQU0rVixhQUFhLEdBQUdDLG1CQUFtQixDQUFDaFcsUUFBRCxDQUF6QztBQUNBLE1BQU1rTCxDQUFDLEdBQUc0SyxFQUFFLENBQUNHLGNBQUgsQ0FBa0IsQ0FBbEIsRUFBcUJsSSxPQUEvQjtBQUNBLE1BQU01QyxDQUFDLEdBQUcySyxFQUFFLENBQUNHLGNBQUgsQ0FBa0IsQ0FBbEIsRUFBcUJqSSxPQUEvQjs7QUFDQSxNQUFJLENBQUM2RixvQkFBTCxFQUEyQjtBQUN6QjtBQUNEOztBQUNELE1BQU1xQyxTQUFTLEdBQUdDLFdBQVcsQ0FBQ25XLFFBQUQsQ0FBN0I7QUFDQSxNQUFNb1csUUFBUSxHQUFHcFcsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcUMscUJBQWQsRUFBakI7QUFDQSxNQUFJa0ssT0FBSjtBQUNBLE1BQUlDLE9BQUo7O0FBQ0EsTUFBSTBHLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLFVBQTFCLENBQUosRUFBMkM7QUFDekMyVCxJQUFBQSxPQUFPLEdBQUd3RyxTQUFTLEdBQUcsQ0FBQ0gsYUFBYSxDQUFDalEsVUFBbEIsR0FBK0JzUSxRQUFRLENBQUM3UCxJQUEzRDtBQUNBb0osSUFBQUEsT0FBTyxHQUFHdUcsU0FBUyxHQUFHLENBQUNILGFBQWEsQ0FBQ25RLFNBQWxCLEdBQThCd1EsUUFBUSxDQUFDaFEsR0FBMUQ7QUFDRCxHQUhELE1BR08sSUFBSWlRLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLG1CQUExQixDQUFKLEVBQW9EO0FBQ3pEMlQsSUFBQUEsT0FBTyxHQUFHd0csU0FBUyxHQUFHLENBQUgsR0FBTyxDQUFDSCxhQUFhLENBQUNqUSxVQUF6QztBQUNBNkosSUFBQUEsT0FBTyxHQUFHdUcsU0FBUyxHQUFHLENBQUgsR0FBT0UsUUFBUSxDQUFDaFEsR0FBbkM7QUFDRDs7QUFDRCxNQUFJbVEsY0FBSjtBQUNBLE1BQUlDLFlBQUo7QUFDQSxNQUFJQyxTQUFKLENBckJrQyxDQXNCbEM7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBSyxJQUFJalcsQ0FBQyxHQUFHb1QsV0FBVyxDQUFDdlksTUFBWixHQUFxQixDQUFsQyxFQUFxQ21GLENBQUMsSUFBSSxDQUExQyxFQUE2Q0EsQ0FBQyxFQUE5QyxFQUFrRDtBQUNoRCxRQUFNNkcsU0FBUyxHQUFHdU0sV0FBVyxDQUFDcFQsQ0FBRCxDQUE3QjtBQUNBLFFBQUlrVyxlQUFlLEdBQUcxVyxRQUFRLENBQUN3RCxjQUFULFdBQTJCNkQsU0FBUyxDQUFDL0QsRUFBckMsRUFBdEI7O0FBQ0EsUUFBSSxDQUFDb1QsZUFBTCxFQUFzQjtBQUNwQkEsTUFBQUEsZUFBZSxHQUFHN0Msb0JBQW9CLENBQUNyTSxhQUFyQixZQUF1Q0gsU0FBUyxDQUFDL0QsRUFBakQsRUFBbEI7QUFDRDs7QUFDRCxRQUFJLENBQUNvVCxlQUFMLEVBQXNCO0FBQ3BCO0FBQ0Q7O0FBQ0QsUUFBSUMsR0FBRyxHQUFHLEtBQVY7QUFDQSxRQUFNQyxrQkFBa0IsR0FBR0YsZUFBZSxDQUFDL0YsZ0JBQWhCLFlBQ3JCMEMsb0JBRHFCLEVBQTNCOztBQVZnRCx5REFhaEJ1RCxrQkFiZ0I7QUFBQTs7QUFBQTtBQWFoRCw2REFBb0Q7QUFBQSxZQUF6Q0MsaUJBQXlDO0FBQ2xELFlBQU1DLFFBQVEsR0FBR0QsaUJBQWpCO0FBQ0EsWUFBTXRRLElBQUksR0FBR3VRLFFBQVEsQ0FBQzNRLElBQVQsQ0FBY0ksSUFBZCxHQUFxQm1KLE9BQWxDO0FBQ0EsWUFBTXRKLEdBQUcsR0FBRzBRLFFBQVEsQ0FBQzNRLElBQVQsQ0FBY0MsR0FBZCxHQUFvQnVKLE9BQWhDO0FBQ0E4RyxRQUFBQSxTQUFTLEdBQUdLLFFBQVEsQ0FBQzNRLElBQXJCOztBQUNBLFlBQ0UrRSxDQUFDLElBQUkzRSxJQUFMLElBQ0EyRSxDQUFDLEdBQUczRSxJQUFJLEdBQUd1USxRQUFRLENBQUMzUSxJQUFULENBQWMxQixLQUR6QixJQUVBMEcsQ0FBQyxJQUFJL0UsR0FGTCxJQUdBK0UsQ0FBQyxHQUFHL0UsR0FBRyxHQUFHMFEsUUFBUSxDQUFDM1EsSUFBVCxDQUFjc0MsTUFKMUIsRUFLRTtBQUNBa08sVUFBQUEsR0FBRyxHQUFHLElBQU47QUFDQTtBQUNEO0FBQ0Y7QUEzQitDO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBNEJoRCxRQUFJQSxHQUFKLEVBQVM7QUFDUEosTUFBQUEsY0FBYyxHQUFHbFAsU0FBakI7QUFDQW1QLE1BQUFBLFlBQVksR0FBR0UsZUFBZjtBQUNBO0FBQ0Q7QUFDRjs7QUFDRCxNQUFJLENBQUNILGNBQUQsSUFBbUIsQ0FBQ0MsWUFBeEIsRUFBc0M7QUFDcEMsUUFBTU8sa0JBQWtCLEdBQUdsRCxvQkFBb0IsQ0FBQ2xELGdCQUFyQixZQUNyQjRDLDZCQURxQixFQUEzQjs7QUFEb0MseURBSUp3RCxrQkFKSTtBQUFBOztBQUFBO0FBSXBDLDZEQUFvRDtBQUFBLFlBQXpDbEMsaUJBQXlDO0FBQ2xERixRQUFBQSwyQkFBMkIsQ0FBQ0ssR0FBRCxFQUFNSCxpQkFBTixDQUEzQjtBQUNEO0FBTm1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBT3BDLFFBQU1tQyxpQkFBaUIsR0FBR2hQLEtBQUssQ0FBQ2dELElBQU4sQ0FDeEI2SSxvQkFBb0IsQ0FBQ2xELGdCQUFyQixZQUEwQzBDLG9CQUExQyxFQUR3QixDQUExQjs7QUFHQSwwQ0FBNEIyRCxpQkFBNUIsd0NBQStDO0FBQTFDLFVBQU03QixhQUFhLHlCQUFuQjtBQUNITSxNQUFBQSx1QkFBdUIsQ0FBQ1QsR0FBRCxFQUFNRyxhQUFOLENBQXZCO0FBQ0Q7O0FBQ0Q7QUFDRDs7QUFFRCxNQUFJcUIsWUFBWSxDQUFDekUsWUFBYixDQUEwQixZQUExQixDQUFKLEVBQTZDO0FBQzNDLFFBQUkrRCxFQUFFLENBQUNsVSxJQUFILEtBQVksV0FBaEIsRUFBNkI7QUFDM0IsVUFBTXFWLDBCQUEwQixHQUFHalAsS0FBSyxDQUFDZ0QsSUFBTixDQUNqQ3dMLFlBQVksQ0FBQzdGLGdCQUFiLFlBQWtDMEMsb0JBQWxDLEVBRGlDLENBQW5DOztBQUdBLFVBQU0yRCxtQkFBaUIsR0FBR25ELG9CQUFvQixDQUFDbEQsZ0JBQXJCLFlBQ3BCMEMsb0JBRG9CLEVBQTFCOztBQUoyQiwyREFPQzJELG1CQVBEO0FBQUE7O0FBQUE7QUFPM0IsK0RBQStDO0FBQUEsY0FBcEM3QixjQUFvQzs7QUFDN0MsY0FBSThCLDBCQUEwQixDQUFDaGMsT0FBM0IsQ0FBbUNrYSxjQUFuQyxJQUFvRCxDQUF4RCxFQUEyRDtBQUN6RE0sWUFBQUEsdUJBQXVCLENBQUNULEdBQUQsRUFBTUcsY0FBTixDQUF2QjtBQUNEO0FBQ0Y7QUFYMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFZM0JKLE1BQUFBLHFCQUFxQixDQUFDQyxHQUFELEVBQU1pQywwQkFBTixFQUFrQ1YsY0FBbEMsQ0FBckI7QUFDQSxVQUFNVyw2QkFBNkIsR0FBR1YsWUFBWSxDQUFDaFAsYUFBYixZQUNoQytMLDZCQURnQyxFQUF0Qzs7QUFHQSxVQUFNNEQscUJBQXFCLEdBQUd0RCxvQkFBb0IsQ0FBQ2xELGdCQUFyQixZQUN4QjRDLDZCQUR3QixFQUE5Qjs7QUFoQjJCLDJEQW1CSzRELHFCQW5CTDtBQUFBOztBQUFBO0FBbUIzQiwrREFBdUQ7QUFBQSxjQUE1Q3RDLGtCQUE0Qzs7QUFDckQsY0FDRSxDQUFDcUMsNkJBQUQsSUFDQXJDLGtCQUFpQixLQUFLcUMsNkJBRnhCLEVBR0U7QUFDQXZDLFlBQUFBLDJCQUEyQixDQUFDSyxHQUFELEVBQU1ILGtCQUFOLENBQTNCO0FBQ0Q7QUFDRjtBQTFCMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUEyQjNCLFVBQUlxQyw2QkFBSixFQUFtQztBQUNqQyxZQUFJN0MsYUFBSixFQUFtQjtBQUNqQitDLFVBQUFBLHlCQUF5QixDQUN2QnBDLEdBRHVCLEVBRXZCa0MsNkJBRnVCLEVBR3ZCWCxjQUh1QixDQUF6QjtBQUtEO0FBQ0Y7QUFDRixLQXBDRCxNQW9DTyxJQUFJVCxFQUFFLENBQUNsVSxJQUFILEtBQVksWUFBWixJQUE0QmtVLEVBQUUsQ0FBQ2xVLElBQUgsS0FBWSxVQUE1QyxFQUF3RDtBQUM3RCxVQUFNMkwsSUFBSSxHQUFHO0FBQ1g4SixRQUFBQSxXQUFXLEVBQUU5VSxNQUFNLENBQUMrVSxVQURUO0FBRVhDLFFBQUFBLFlBQVksRUFBRWhWLE1BQU0sQ0FBQ2lWLFdBRlY7QUFHWGpSLFFBQUFBLElBQUksRUFBRWtRLFNBQVMsQ0FBQ2xRLElBSEw7QUFJWDlCLFFBQUFBLEtBQUssRUFBRWdTLFNBQVMsQ0FBQ2hTLEtBSk47QUFLWDJCLFFBQUFBLEdBQUcsRUFBRXFRLFNBQVMsQ0FBQ3JRLEdBTEo7QUFNWHFDLFFBQUFBLE1BQU0sRUFBRWdPLFNBQVMsQ0FBQ2hPO0FBTlAsT0FBYjtBQVFBLFVBQU1nUCxPQUFPLEdBQUc7QUFDZHBRLFFBQUFBLFNBQVMsRUFBRWtQLGNBQWMsQ0FBQ2pULEVBRFo7QUFFZGlLLFFBQUFBLElBQUksRUFBRUE7QUFGUSxPQUFoQjs7QUFLQSxVQUNFLE9BQU9oTCxNQUFQLEtBQWtCLFdBQWxCLElBQ0EsaUJBQU9BLE1BQU0sQ0FBQ21WLE9BQWQsTUFBMEIsUUFEMUIsSUFFQW5WLE1BQU0sQ0FBQ21WLE9BQVAsQ0FBZTlWLElBQWYsS0FBd0IsVUFIMUIsRUFJRTtBQUNBK1YsUUFBQUEsVUFBVSxDQUFDQyxXQUFYLENBQXVCQyxVQUF2QixDQUFrQ0Msd0JBQWxDLEVBQTRETCxPQUE1RDtBQUNELE9BTkQsTUFNTyxJQUFJbFYsTUFBTSxDQUFDd1YsU0FBWCxFQUFzQjtBQUMzQkMsUUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZd08sY0FBYyxDQUFDalQsRUFBZixDQUFrQjJVLFFBQWxCLENBQTJCLGdCQUEzQixDQUFaOztBQUNBLFlBQUkxQixjQUFjLENBQUNqVCxFQUFmLENBQWtCM0ksTUFBbEIsQ0FBeUIsZ0JBQXpCLEtBQThDLENBQWxELEVBQXFEO0FBQ25ELGNBQUkwYixTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixVQUExQixDQUFKLEVBQTJDO0FBQ3pDMkcsWUFBQUEsT0FBTyxDQUFDd1YsZ0NBQVIsQ0FBeUMzQixjQUFjLENBQUNqVCxFQUF4RDtBQUNELFdBRkQsTUFFTyxJQUFJK1MsU0FBUyxDQUFDQyxTQUFWLENBQW9CdmEsS0FBcEIsQ0FBMEIsbUJBQTFCLENBQUosRUFBb0Q7QUFDekRvYyxZQUFBQSxNQUFNLENBQUNDLGVBQVAsQ0FBdUJGLGdDQUF2QixDQUF3REcsV0FBeEQsQ0FDRTlCLGNBQWMsQ0FBQ2pULEVBRGpCO0FBR0Q7QUFDRixTQVJELE1BUU8sSUFBSWlULGNBQWMsQ0FBQ2pULEVBQWYsQ0FBa0IzSSxNQUFsQixDQUF5QixlQUF6QixLQUE2QyxDQUFqRCxFQUFvRDtBQUN6RCxjQUFJMGIsU0FBUyxDQUFDQyxTQUFWLENBQW9CdmEsS0FBcEIsQ0FBMEIsVUFBMUIsQ0FBSixFQUEyQztBQUN6QzJHLFlBQUFBLE9BQU8sQ0FBQzRWLGtCQUFSLENBQTJCL0IsY0FBYyxDQUFDalQsRUFBMUM7QUFDRCxXQUZELE1BRU8sSUFBSStTLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLG1CQUExQixDQUFKLEVBQW9EO0FBQ3pEb2MsWUFBQUEsTUFBTSxDQUFDQyxlQUFQLENBQXVCRSxrQkFBdkIsQ0FBMENELFdBQTFDLENBQ0U5QixjQUFjLENBQUNqVCxFQURqQjtBQUdEO0FBQ0Y7QUFDRjs7QUFFRHdTLE1BQUFBLEVBQUUsQ0FBQ3BFLGVBQUg7QUFDQW9FLE1BQUFBLEVBQUUsQ0FBQ25FLGNBQUg7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBUzRHLGlCQUFULENBQTJCdkQsR0FBM0IsRUFBZ0NjLEVBQWhDLEVBQW9DO0FBQ2xDLE1BQU05VixRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjtBQUNBLE1BQU0rVixhQUFhLEdBQUdDLG1CQUFtQixDQUFDaFcsUUFBRCxDQUF6QztBQUNBLE1BQU1rTCxDQUFDLEdBQUc0SyxFQUFFLENBQUMvSCxPQUFiO0FBQ0EsTUFBTTVDLENBQUMsR0FBRzJLLEVBQUUsQ0FBQzlILE9BQWI7O0FBQ0EsTUFBSSxDQUFDNkYsb0JBQUwsRUFBMkI7QUFDekI7QUFDRDs7QUFFRCxNQUFNcUMsU0FBUyxHQUFHQyxXQUFXLENBQUNuVyxRQUFELENBQTdCO0FBQ0EsTUFBTW9XLFFBQVEsR0FBR3BXLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY3FDLHFCQUFkLEVBQWpCO0FBQ0EsTUFBSWtLLE9BQUo7QUFDQSxNQUFJQyxPQUFKOztBQUNBLE1BQUkwRyxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixVQUExQixDQUFKLEVBQTJDO0FBQ3pDMlQsSUFBQUEsT0FBTyxHQUFHd0csU0FBUyxHQUFHLENBQUNILGFBQWEsQ0FBQ2pRLFVBQWxCLEdBQStCc1EsUUFBUSxDQUFDN1AsSUFBM0Q7QUFDQW9KLElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFDSCxhQUFhLENBQUNuUSxTQUFsQixHQUE4QndRLFFBQVEsQ0FBQ2hRLEdBQTFEO0FBQ0QsR0FIRCxNQUdPLElBQUlpUSxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixtQkFBMUIsQ0FBSixFQUFvRDtBQUN6RDJULElBQUFBLE9BQU8sR0FBR3dHLFNBQVMsR0FBRyxDQUFILEdBQU8sQ0FBQ0gsYUFBYSxDQUFDalEsVUFBekM7QUFDQTZKLElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFILEdBQU9FLFFBQVEsQ0FBQ2hRLEdBQW5DO0FBQ0Q7O0FBQ0QsTUFBSW1RLGNBQUo7QUFDQSxNQUFJQyxZQUFKO0FBQ0EsTUFBSUMsU0FBSjs7QUFDQSxPQUFLLElBQUlqVyxDQUFDLEdBQUdvVCxXQUFXLENBQUN2WSxNQUFaLEdBQXFCLENBQWxDLEVBQXFDbUYsQ0FBQyxJQUFJLENBQTFDLEVBQTZDQSxDQUFDLEVBQTlDLEVBQWtEO0FBQ2hELFFBQU02RyxTQUFTLEdBQUd1TSxXQUFXLENBQUNwVCxDQUFELENBQTdCO0FBQ0EsUUFBSWtXLGVBQWUsR0FBRzFXLFFBQVEsQ0FBQ3dELGNBQVQsV0FBMkI2RCxTQUFTLENBQUMvRCxFQUFyQyxFQUF0Qjs7QUFDQSxRQUFJLENBQUNvVCxlQUFMLEVBQXNCO0FBQ3BCQSxNQUFBQSxlQUFlLEdBQUc3QyxvQkFBb0IsQ0FBQ3JNLGFBQXJCLFlBQXVDSCxTQUFTLENBQUMvRCxFQUFqRCxFQUFsQjtBQUNEOztBQUNELFFBQUksQ0FBQ29ULGVBQUwsRUFBc0I7QUFDcEI7QUFDRDs7QUFDRCxRQUFJQyxHQUFHLEdBQUcsS0FBVjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHRixlQUFlLENBQUMvRixnQkFBaEIsWUFDckIwQyxvQkFEcUIsRUFBM0I7O0FBVmdELHlEQWFoQnVELGtCQWJnQjtBQUFBOztBQUFBO0FBYWhELDZEQUFvRDtBQUFBLFlBQXpDQyxpQkFBeUM7QUFDbEQsWUFBTUMsUUFBUSxHQUFHRCxpQkFBakI7QUFDQSxZQUFNdFEsSUFBSSxHQUFHdVEsUUFBUSxDQUFDM1EsSUFBVCxDQUFjSSxJQUFkLEdBQXFCbUosT0FBbEM7QUFDQSxZQUFNdEosR0FBRyxHQUFHMFEsUUFBUSxDQUFDM1EsSUFBVCxDQUFjQyxHQUFkLEdBQW9CdUosT0FBaEM7QUFDQThHLFFBQUFBLFNBQVMsR0FBR0ssUUFBUSxDQUFDM1EsSUFBckI7O0FBQ0EsWUFDRStFLENBQUMsSUFBSTNFLElBQUwsSUFDQTJFLENBQUMsR0FBRzNFLElBQUksR0FBR3VRLFFBQVEsQ0FBQzNRLElBQVQsQ0FBYzFCLEtBRHpCLElBRUEwRyxDQUFDLElBQUkvRSxHQUZMLElBR0ErRSxDQUFDLEdBQUcvRSxHQUFHLEdBQUcwUSxRQUFRLENBQUMzUSxJQUFULENBQWNzQyxNQUoxQixFQUtFO0FBQ0FrTyxVQUFBQSxHQUFHLEdBQUcsSUFBTjtBQUNBO0FBQ0Q7QUFDRjtBQTNCK0M7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUE0QmhELFFBQUlBLEdBQUosRUFBUztBQUNQSixNQUFBQSxjQUFjLEdBQUdsUCxTQUFqQjtBQUNBbVAsTUFBQUEsWUFBWSxHQUFHRSxlQUFmO0FBQ0E7QUFDRDtBQUNGOztBQUVELE1BQUksQ0FBQ0gsY0FBRCxJQUFtQixDQUFDQyxZQUF4QixFQUFzQztBQUNwQyxRQUFNTyxrQkFBa0IsR0FBR2xELG9CQUFvQixDQUFDbEQsZ0JBQXJCLFlBQ3JCNEMsNkJBRHFCLEVBQTNCOztBQURvQyx5REFJSndELGtCQUpJO0FBQUE7O0FBQUE7QUFJcEMsNkRBQW9EO0FBQUEsWUFBekNsQyxpQkFBeUM7QUFDbERGLFFBQUFBLDJCQUEyQixDQUFDSyxHQUFELEVBQU1ILGlCQUFOLENBQTNCO0FBQ0Q7QUFObUM7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFPcEMsUUFBTW1DLGlCQUFpQixHQUFHaFAsS0FBSyxDQUFDZ0QsSUFBTixDQUN4QjZJLG9CQUFvQixDQUFDbEQsZ0JBQXJCLFlBQTBDMEMsb0JBQTFDLEVBRHdCLENBQTFCOztBQUdBLDRDQUE0QjJELGlCQUE1QiwyQ0FBK0M7QUFBMUMsVUFBTTdCLGFBQWEsMkJBQW5CO0FBQ0hNLE1BQUFBLHVCQUF1QixDQUFDVCxHQUFELEVBQU1HLGFBQU4sQ0FBdkI7QUFDRDs7QUFDRDtBQUNEOztBQUVELE1BQUlxQixZQUFZLENBQUN6RSxZQUFiLENBQTBCLFlBQTFCLENBQUosRUFBNkM7QUFDM0MsUUFBSStELEVBQUUsQ0FBQ2xVLElBQUgsS0FBWSxXQUFoQixFQUE2QjtBQUMzQixVQUFNcVYsMEJBQTBCLEdBQUdqUCxLQUFLLENBQUNnRCxJQUFOLENBQ2pDd0wsWUFBWSxDQUFDN0YsZ0JBQWIsWUFBa0MwQyxvQkFBbEMsRUFEaUMsQ0FBbkM7O0FBR0EsVUFBTTJELG1CQUFpQixHQUFHbkQsb0JBQW9CLENBQUNsRCxnQkFBckIsWUFDcEIwQyxvQkFEb0IsRUFBMUI7O0FBSjJCLDJEQU9DMkQsbUJBUEQ7QUFBQTs7QUFBQTtBQU8zQiwrREFBK0M7QUFBQSxjQUFwQzdCLGVBQW9DOztBQUM3QyxjQUFJOEIsMEJBQTBCLENBQUNoYyxPQUEzQixDQUFtQ2thLGVBQW5DLElBQW9ELENBQXhELEVBQTJEO0FBQ3pETSxZQUFBQSx1QkFBdUIsQ0FBQ1QsR0FBRCxFQUFNRyxlQUFOLENBQXZCO0FBQ0Q7QUFDRjtBQVgwQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVkzQkosTUFBQUEscUJBQXFCLENBQUNDLEdBQUQsRUFBTWlDLDBCQUFOLEVBQWtDVixjQUFsQyxDQUFyQjtBQUNBLFVBQU1XLDZCQUE2QixHQUFHVixZQUFZLENBQUNoUCxhQUFiLFlBQ2hDK0wsNkJBRGdDLEVBQXRDOztBQUdBLFVBQU00RCxxQkFBcUIsR0FBR3RELG9CQUFvQixDQUFDbEQsZ0JBQXJCLFlBQ3hCNEMsNkJBRHdCLEVBQTlCOztBQWhCMkIsMkRBbUJLNEQscUJBbkJMO0FBQUE7O0FBQUE7QUFtQjNCLCtEQUF1RDtBQUFBLGNBQTVDdEMsbUJBQTRDOztBQUNyRCxjQUNFLENBQUNxQyw2QkFBRCxJQUNBckMsbUJBQWlCLEtBQUtxQyw2QkFGeEIsRUFHRTtBQUNBdkMsWUFBQUEsMkJBQTJCLENBQUNLLEdBQUQsRUFBTUgsbUJBQU4sQ0FBM0I7QUFDRDtBQUNGO0FBMUIwQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQTJCM0IsVUFBSXFDLDZCQUFKLEVBQW1DO0FBQ2pDLFlBQUk3QyxhQUFKLEVBQW1CO0FBQ2pCK0MsVUFBQUEseUJBQXlCLENBQ3ZCcEMsR0FEdUIsRUFFdkJrQyw2QkFGdUIsRUFHdkJYLGNBSHVCLENBQXpCO0FBS0Q7QUFDRjtBQUNGLEtBcENELE1Bb0NPLElBQUlULEVBQUUsQ0FBQ2xVLElBQUgsS0FBWSxTQUFaLElBQXlCa1UsRUFBRSxDQUFDbFUsSUFBSCxLQUFZLFVBQXpDLEVBQXFEO0FBQzFELFVBQU00VyxlQUFlLEdBQUc7QUFDdEJuQixRQUFBQSxXQUFXLEVBQUU5VSxNQUFNLENBQUMrVSxVQURFO0FBRXRCQyxRQUFBQSxZQUFZLEVBQUVoVixNQUFNLENBQUMrRCxXQUZDO0FBR3RCQyxRQUFBQSxJQUFJLEVBQUVrUSxTQUFTLENBQUNsUSxJQUhNO0FBSXRCOUIsUUFBQUEsS0FBSyxFQUFFZ1MsU0FBUyxDQUFDaFMsS0FKSztBQUt0QjJCLFFBQUFBLEdBQUcsRUFBRXFRLFNBQVMsQ0FBQ3JRLEdBTE87QUFNdEJxQyxRQUFBQSxNQUFNLEVBQUVnTyxTQUFTLENBQUNoTztBQU5JLE9BQXhCO0FBU0EsVUFBTWdQLE9BQU8sR0FBRztBQUNkcFEsUUFBQUEsU0FBUyxFQUFFa1AsY0FERztBQUVkN1EsUUFBQUEsUUFBUSxFQUFFOFM7QUFGSSxPQUFoQjs7QUFLQSxVQUNFLE9BQU9qVyxNQUFQLEtBQWtCLFdBQWxCLElBQ0EsaUJBQU9BLE1BQU0sQ0FBQ21WLE9BQWQsTUFBMEIsUUFEMUIsSUFFQW5WLE1BQU0sQ0FBQ21WLE9BQVAsQ0FBZTlWLElBQWYsS0FBd0IsVUFIMUIsRUFJRTtBQUNBK1YsUUFBQUEsVUFBVSxDQUFDQyxXQUFYLENBQXVCQyxVQUF2QixDQUFrQ0Msd0JBQWxDLEVBQTRETCxPQUE1RDtBQUNELE9BTkQsTUFNTyxJQUFJbFYsTUFBTSxDQUFDd1YsU0FBWCxFQUFzQjtBQUMzQixZQUFJeEIsY0FBYyxDQUFDalQsRUFBZixDQUFrQjNJLE1BQWxCLENBQXlCLGdCQUF6QixLQUE4QyxDQUFsRCxFQUFxRDtBQUNuRCxjQUFJMGIsU0FBUyxDQUFDQyxTQUFWLENBQW9CdmEsS0FBcEIsQ0FBMEIsVUFBMUIsQ0FBSixFQUEyQztBQUN6QzJHLFlBQUFBLE9BQU8sQ0FBQ3dWLGdDQUFSLENBQXlDM0IsY0FBYyxDQUFDalQsRUFBeEQ7QUFDRCxXQUZELE1BRU8sSUFBSStTLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLG1CQUExQixDQUFKLEVBQW9EO0FBQ3pEb2MsWUFBQUEsTUFBTSxDQUFDQyxlQUFQLENBQXVCRixnQ0FBdkIsQ0FBd0RHLFdBQXhELENBQ0U5QixjQUFjLENBQUNqVCxFQURqQjtBQUdEO0FBQ0YsU0FSRCxNQVFPLElBQUlpVCxjQUFjLENBQUNqVCxFQUFmLENBQWtCM0ksTUFBbEIsQ0FBeUIsZUFBekIsS0FBNkMsQ0FBakQsRUFBb0Q7QUFDekQsY0FBSTBiLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLFVBQTFCLENBQUosRUFBMkM7QUFDekMyRyxZQUFBQSxPQUFPLENBQUM0VixrQkFBUixDQUEyQi9CLGNBQWMsQ0FBQ2pULEVBQTFDO0FBQ0QsV0FGRCxNQUVPLElBQUkrUyxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixtQkFBMUIsQ0FBSixFQUFvRDtBQUN6RG9jLFlBQUFBLE1BQU0sQ0FBQ0MsZUFBUCxDQUF1QkUsa0JBQXZCLENBQTBDRCxXQUExQyxDQUNFOUIsY0FBYyxDQUFDalQsRUFEakI7QUFHRDtBQUNGO0FBQ0Y7O0FBRUR3UyxNQUFBQSxFQUFFLENBQUNwRSxlQUFIO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQVNwSCw2QkFBVCxDQUE2QlIsS0FBN0IsRUFBb0NDLEtBQXBDLEVBQTJDZixTQUEzQyxFQUFzRDtBQUNwRCxTQUNFLENBQUNjLEtBQUssQ0FBQ3ZELElBQU4sR0FBYXdELEtBQUssQ0FBQ3JCLEtBQW5CLElBQ0VNLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIscUJBQVcsQ0FBQ0gsS0FBSyxDQUFDdkQsSUFBUCxFQUFhd0QsS0FBSyxDQUFDckIsS0FBbkIsRUFBMEJNLFNBQTFCLENBRGhDLE1BRUNlLEtBQUssQ0FBQ3hELElBQU4sR0FBYXVELEtBQUssQ0FBQ3BCLEtBQW5CLElBQ0VNLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIscUJBQVcsQ0FBQ0YsS0FBSyxDQUFDeEQsSUFBUCxFQUFhdUQsS0FBSyxDQUFDcEIsS0FBbkIsRUFBMEJNLFNBQTFCLENBSGhDLE1BSUNjLEtBQUssQ0FBQzFELEdBQU4sR0FBWTJELEtBQUssQ0FBQ3BCLE1BQWxCLElBQ0VLLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIscUJBQVcsQ0FBQ0gsS0FBSyxDQUFDMUQsR0FBUCxFQUFZMkQsS0FBSyxDQUFDcEIsTUFBbEIsRUFBMEJLLFNBQTFCLENBTGhDLE1BTUNlLEtBQUssQ0FBQzNELEdBQU4sR0FBWTBELEtBQUssQ0FBQ25CLE1BQWxCLElBQ0VLLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIscUJBQVcsQ0FBQ0YsS0FBSyxDQUFDM0QsR0FBUCxFQUFZMEQsS0FBSyxDQUFDbkIsTUFBbEIsRUFBMEJLLFNBQTFCLENBUGhDLENBREY7QUFVRDs7QUFFRCxTQUFTUSxnQ0FBVCxDQUFnQ0ssS0FBaEMsRUFBdUM7QUFDckMsT0FBSyxJQUFJckosQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3FKLEtBQUssQ0FBQ3hPLE1BQTFCLEVBQWtDbUYsQ0FBQyxFQUFuQyxFQUF1QztBQUNyQyxTQUFLLElBQUlrSixDQUFDLEdBQUdsSixDQUFDLEdBQUcsQ0FBakIsRUFBb0JrSixDQUFDLEdBQUdHLEtBQUssQ0FBQ3hPLE1BQTlCLEVBQXNDcU8sQ0FBQyxFQUF2QyxFQUEyQztBQUN6QyxVQUFNSSxLQUFLLEdBQUdELEtBQUssQ0FBQ3JKLENBQUQsQ0FBbkI7QUFDQSxVQUFNdUosS0FBSyxHQUFHRixLQUFLLENBQUNILENBQUQsQ0FBbkI7O0FBQ0EsVUFBSUksS0FBSyxLQUFLQyxLQUFkLEVBQXFCO0FBQ25CLFlBQUk0SixNQUFKLEVBQVk7QUFDVnFFLFVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSw0Q0FBWjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0QsVUFBSXVDLDZCQUFtQixDQUFDUixLQUFELEVBQVFDLEtBQVIsRUFBZSxDQUFDLENBQWhCLENBQXZCLEVBQTJDO0FBQUE7QUFDekMsY0FBSXFCLEtBQUssR0FBRyxFQUFaO0FBQ0EsY0FBSUMsUUFBUSxTQUFaO0FBQ0EsY0FBSW9OLFVBQVUsU0FBZDtBQUNBLGNBQU1uTixjQUFjLEdBQUdDLHNCQUFZLENBQUN6QixLQUFELEVBQVFDLEtBQVIsQ0FBbkM7O0FBQ0EsY0FBSXVCLGNBQWMsQ0FBQ2pRLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDL0IrUCxZQUFBQSxLQUFLLEdBQUdFLGNBQVI7QUFDQUQsWUFBQUEsUUFBUSxHQUFHdkIsS0FBWDtBQUNBMk8sWUFBQUEsVUFBVSxHQUFHMU8sS0FBYjtBQUNELFdBSkQsTUFJTztBQUNMLGdCQUFNeUIsY0FBYyxHQUFHRCxzQkFBWSxDQUFDeEIsS0FBRCxFQUFRRCxLQUFSLENBQW5DOztBQUNBLGdCQUFJd0IsY0FBYyxDQUFDalEsTUFBZixHQUF3Qm1RLGNBQWMsQ0FBQ25RLE1BQTNDLEVBQW1EO0FBQ2pEK1AsY0FBQUEsS0FBSyxHQUFHRSxjQUFSO0FBQ0FELGNBQUFBLFFBQVEsR0FBR3ZCLEtBQVg7QUFDQTJPLGNBQUFBLFVBQVUsR0FBRzFPLEtBQWI7QUFDRCxhQUpELE1BSU87QUFDTHFCLGNBQUFBLEtBQUssR0FBR0ksY0FBUjtBQUNBSCxjQUFBQSxRQUFRLEdBQUd0QixLQUFYO0FBQ0EwTyxjQUFBQSxVQUFVLEdBQUczTyxLQUFiO0FBQ0Q7QUFDRjs7QUFDRCxjQUFJNkosTUFBSixFQUFZO0FBQ1YsZ0JBQU0rRSxPQUFPLEdBQUcsRUFBaEI7QUFDQUEsWUFBQUEsT0FBTyxDQUFDeGQsSUFBUixDQUFhdWQsVUFBYjtBQUNBelEsWUFBQUEsS0FBSyxDQUFDQyxTQUFOLENBQWdCL00sSUFBaEIsQ0FBcUJ1USxLQUFyQixDQUEyQmlOLE9BQTNCLEVBQW9DdE4sS0FBcEM7QUFDQXVOLFlBQUFBLGFBQWEsQ0FBQ0QsT0FBRCxDQUFiO0FBQ0Q7O0FBQ0QsY0FBSS9FLE1BQUosRUFBWTtBQUNWcUUsWUFBQUEsT0FBTyxDQUFDalEsR0FBUixtREFDNkNxRCxLQUFLLENBQUMvUCxNQURuRDtBQUdEOztBQUNELGNBQU1rTyxRQUFRLEdBQUdNLEtBQUssQ0FBQ1UsTUFBTixDQUFhLFVBQUNwRSxJQUFELEVBQVU7QUFDdEMsbUJBQU9BLElBQUksS0FBS2tGLFFBQWhCO0FBQ0QsV0FGZ0IsQ0FBakI7QUFHQXJELFVBQUFBLEtBQUssQ0FBQ0MsU0FBTixDQUFnQi9NLElBQWhCLENBQXFCdVEsS0FBckIsQ0FBMkJsQyxRQUEzQixFQUFxQzZCLEtBQXJDO0FBQ0E7QUFBQSxlQUFPNUIsZ0NBQXNCLENBQUNELFFBQUQ7QUFBN0I7QUFwQ3lDOztBQUFBO0FBcUMxQztBQUNGO0FBQ0Y7O0FBQ0QsU0FBT00sS0FBUDtBQUNEOztBQUVELFNBQVM4TyxhQUFULENBQXVCOU8sS0FBdkIsRUFBOEI7QUFDNUIsTUFBTStPLG9CQUFvQixHQUFHLEVBQTdCOztBQUQ0Qix3REFFUi9PLEtBRlE7QUFBQTs7QUFBQTtBQUU1Qiw4REFBMkI7QUFBQSxVQUFoQkMsS0FBZ0I7O0FBQUEsNERBQ0xELEtBREs7QUFBQTs7QUFBQTtBQUN6QixrRUFBMkI7QUFBQSxjQUFoQkUsS0FBZ0I7O0FBQ3pCLGNBQUlELEtBQUssS0FBS0MsS0FBZCxFQUFxQjtBQUNuQjtBQUNEOztBQUNELGNBQU04TyxJQUFJLEdBQUdELG9CQUFvQixDQUFDM2QsT0FBckIsQ0FBNkI2TyxLQUE3QixLQUF1QyxDQUFwRDtBQUNBLGNBQU1nUCxJQUFJLEdBQUdGLG9CQUFvQixDQUFDM2QsT0FBckIsQ0FBNkI4TyxLQUE3QixLQUF1QyxDQUFwRDs7QUFDQSxjQUFJLENBQUM4TyxJQUFELElBQVMsQ0FBQ0MsSUFBZCxFQUFvQjtBQUNsQixnQkFBSXhPLDZCQUFtQixDQUFDUixLQUFELEVBQVFDLEtBQVIsRUFBZSxDQUFDLENBQWhCLENBQXZCLEVBQTJDO0FBQ3pDLGtCQUFJLENBQUM4TyxJQUFMLEVBQVc7QUFDVEQsZ0JBQUFBLG9CQUFvQixDQUFDMWQsSUFBckIsQ0FBMEI0TyxLQUExQjtBQUNEOztBQUNELGtCQUFJLENBQUNnUCxJQUFMLEVBQVc7QUFDVEYsZ0JBQUFBLG9CQUFvQixDQUFDMWQsSUFBckIsQ0FBMEI2TyxLQUExQjtBQUNEOztBQUNEaU8sY0FBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLDBCQUFaO0FBQ0FpUSxjQUFBQSxPQUFPLENBQUNqUSxHQUFSLGtCQUNZK0IsS0FBSyxDQUFDMUQsR0FEbEIscUJBQ2dDMEQsS0FBSyxDQUFDbkIsTUFEdEMsbUJBQ3FEbUIsS0FBSyxDQUFDdkQsSUFEM0Qsb0JBQ3lFdUQsS0FBSyxDQUFDcEIsS0FEL0Usb0JBQzhGb0IsS0FBSyxDQUFDckYsS0FEcEcscUJBQ29IcUYsS0FBSyxDQUFDckIsTUFEMUg7QUFHQXVQLGNBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsa0JBQ1lnQyxLQUFLLENBQUMzRCxHQURsQixxQkFDZ0MyRCxLQUFLLENBQUNwQixNQUR0QyxtQkFDcURvQixLQUFLLENBQUN4RCxJQUQzRCxvQkFDeUV3RCxLQUFLLENBQUNyQixLQUQvRSxvQkFDOEZxQixLQUFLLENBQUN0RixLQURwRyxxQkFDb0hzRixLQUFLLENBQUN0QixNQUQxSDtBQUdBLGtCQUFNc1EsUUFBUSxHQUFHQyxlQUFlLENBQUNsUCxLQUFELEVBQVFDLEtBQVIsQ0FBaEM7QUFDQWlPLGNBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIscUJBQXlCZ1IsUUFBekI7QUFDQSxrQkFBTUUsUUFBUSxHQUFHQyxlQUFlLENBQUNwUCxLQUFELEVBQVFDLEtBQVIsQ0FBaEM7QUFDQWlPLGNBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIscUJBQXlCa1IsUUFBekI7QUFDRDtBQUNGO0FBQ0Y7QUE1QndCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2QjFCO0FBL0IyQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWdDNUIsTUFBSUwsb0JBQW9CLENBQUN2ZCxNQUF6QixFQUFpQztBQUMvQjJjLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsaUNBQXFDNlEsb0JBQW9CLENBQUN2ZCxNQUExRDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU2lPLDhCQUFULENBQThCTyxLQUE5QixFQUFxQ2IsU0FBckMsRUFBZ0Q7QUFDOUMsTUFBTTBCLFdBQVcsR0FBRyxJQUFJQyxHQUFKLENBQVFkLEtBQVIsQ0FBcEI7O0FBRDhDLHdEQUUzQkEsS0FGMkI7QUFBQTs7QUFBQTtBQUU5Qyw4REFBMEI7QUFBQSxVQUFmMUQsSUFBZTtBQUN4QixVQUFNd0QsU0FBUyxHQUFHeEQsSUFBSSxDQUFDMUIsS0FBTCxHQUFhLENBQWIsSUFBa0IwQixJQUFJLENBQUNzQyxNQUFMLEdBQWMsQ0FBbEQ7O0FBQ0EsVUFBSSxDQUFDa0IsU0FBTCxFQUFnQjtBQUNkLFlBQUlnSyxNQUFKLEVBQVk7QUFDVnFFLFVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSwwQkFBWjtBQUNEOztBQUNEMkMsUUFBQUEsV0FBVyxDQUFDRSxNQUFaLENBQW1CekUsSUFBbkI7QUFDQTtBQUNEOztBQVJ1Qiw0REFTYTBELEtBVGI7QUFBQTs7QUFBQTtBQVN4QixrRUFBNEM7QUFBQSxjQUFqQ2dCLHNCQUFpQzs7QUFDMUMsY0FBSTFFLElBQUksS0FBSzBFLHNCQUFiLEVBQXFDO0FBQ25DO0FBQ0Q7O0FBQ0QsY0FBSSxDQUFDSCxXQUFXLENBQUNJLEdBQVosQ0FBZ0JELHNCQUFoQixDQUFMLEVBQThDO0FBQzVDO0FBQ0Q7O0FBQ0QsY0FBSUUsc0JBQVksQ0FBQ0Ysc0JBQUQsRUFBeUIxRSxJQUF6QixFQUErQjZDLFNBQS9CLENBQWhCLEVBQTJEO0FBQ3pELGdCQUFJMkssTUFBSixFQUFZO0FBQ1ZxRSxjQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksK0JBQVo7QUFDRDs7QUFDRDJDLFlBQUFBLFdBQVcsQ0FBQ0UsTUFBWixDQUFtQnpFLElBQW5CO0FBQ0E7QUFDRDtBQUNGO0FBdkJ1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0J6QjtBQTFCNkM7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUEyQjlDLFNBQU82QixLQUFLLENBQUNnRCxJQUFOLENBQVdOLFdBQVgsQ0FBUDtBQUNEOztBQUVELFNBQVNULHFCQUFULENBQXFCMU0sQ0FBckIsRUFBd0JDLENBQXhCLEVBQTJCd0wsU0FBM0IsRUFBc0M7QUFDcEMsU0FBT3BOLElBQUksQ0FBQ2tCLEdBQUwsQ0FBU1MsQ0FBQyxHQUFHQyxDQUFiLEtBQW1Cd0wsU0FBMUI7QUFDRDs7QUFFRCxTQUFTMkMsdUJBQVQsQ0FBdUI3QixLQUF2QixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDbkMsTUFBTWlDLE9BQU8sR0FBR3BRLElBQUksQ0FBQ1ksR0FBTCxDQUFTc04sS0FBSyxDQUFDdkQsSUFBZixFQUFxQndELEtBQUssQ0FBQ3hELElBQTNCLENBQWhCO0FBQ0EsTUFBTTBGLFFBQVEsR0FBR3JRLElBQUksQ0FBQ0MsR0FBTCxDQUFTaU8sS0FBSyxDQUFDcEIsS0FBZixFQUFzQnFCLEtBQUssQ0FBQ3JCLEtBQTVCLENBQWpCO0FBQ0EsTUFBTXdELE1BQU0sR0FBR3RRLElBQUksQ0FBQ1ksR0FBTCxDQUFTc04sS0FBSyxDQUFDMUQsR0FBZixFQUFvQjJELEtBQUssQ0FBQzNELEdBQTFCLENBQWY7QUFDQSxNQUFNK0YsU0FBUyxHQUFHdlEsSUFBSSxDQUFDQyxHQUFMLENBQVNpTyxLQUFLLENBQUNuQixNQUFmLEVBQXVCb0IsS0FBSyxDQUFDcEIsTUFBN0IsQ0FBbEI7QUFDQSxNQUFNeEMsSUFBSSxHQUFHO0FBQ1h3QyxJQUFBQSxNQUFNLEVBQUV3RCxTQURHO0FBRVgxRCxJQUFBQSxNQUFNLEVBQUU3TSxJQUFJLENBQUNZLEdBQUwsQ0FBUyxDQUFULEVBQVkyUCxTQUFTLEdBQUdELE1BQXhCLENBRkc7QUFHWDNGLElBQUFBLElBQUksRUFBRXlGLE9BSEs7QUFJWHRELElBQUFBLEtBQUssRUFBRXVELFFBSkk7QUFLWDdGLElBQUFBLEdBQUcsRUFBRThGLE1BTE07QUFNWHpILElBQUFBLEtBQUssRUFBRTdJLElBQUksQ0FBQ1ksR0FBTCxDQUFTLENBQVQsRUFBWXlQLFFBQVEsR0FBR0QsT0FBdkI7QUFOSSxHQUFiO0FBUUEsU0FBTzdGLElBQVA7QUFDRDs7QUFFRCxTQUFTb0Ysc0JBQVQsQ0FBc0J6QixLQUF0QixFQUE2QkMsS0FBN0IsRUFBb0M7QUFDbEMsTUFBTTJCLGVBQWUsR0FBR0MsdUJBQWEsQ0FBQzVCLEtBQUQsRUFBUUQsS0FBUixDQUFyQzs7QUFDQSxNQUFJNEIsZUFBZSxDQUFDakQsTUFBaEIsS0FBMkIsQ0FBM0IsSUFBZ0NpRCxlQUFlLENBQUNqSCxLQUFoQixLQUEwQixDQUE5RCxFQUFpRTtBQUMvRCxXQUFPLENBQUNxRixLQUFELENBQVA7QUFDRDs7QUFDRCxNQUFNRCxLQUFLLEdBQUcsRUFBZDtBQUNBO0FBQ0UsUUFBTStCLEtBQUssR0FBRztBQUNaakQsTUFBQUEsTUFBTSxFQUFFbUIsS0FBSyxDQUFDbkIsTUFERjtBQUVaRixNQUFBQSxNQUFNLEVBQUUsQ0FGSTtBQUdabEMsTUFBQUEsSUFBSSxFQUFFdUQsS0FBSyxDQUFDdkQsSUFIQTtBQUlabUMsTUFBQUEsS0FBSyxFQUFFZ0QsZUFBZSxDQUFDbkYsSUFKWDtBQUtaSCxNQUFBQSxHQUFHLEVBQUUwRCxLQUFLLENBQUMxRCxHQUxDO0FBTVozQixNQUFBQSxLQUFLLEVBQUU7QUFOSyxLQUFkO0FBUUFtSCxJQUFBQSxLQUFLLENBQUNuSCxLQUFOLEdBQWNtSCxLQUFLLENBQUNsRCxLQUFOLEdBQWNrRCxLQUFLLENBQUNyRixJQUFsQztBQUNBcUYsSUFBQUEsS0FBSyxDQUFDbkQsTUFBTixHQUFlbUQsS0FBSyxDQUFDakQsTUFBTixHQUFlaUQsS0FBSyxDQUFDeEYsR0FBcEM7O0FBQ0EsUUFBSXdGLEtBQUssQ0FBQ25ELE1BQU4sS0FBaUIsQ0FBakIsSUFBc0JtRCxLQUFLLENBQUNuSCxLQUFOLEtBQWdCLENBQTFDLEVBQTZDO0FBQzNDb0YsTUFBQUEsS0FBSyxDQUFDM08sSUFBTixDQUFXMFEsS0FBWDtBQUNEO0FBQ0Y7QUFDRDtBQUNFLFFBQU1DLEtBQUssR0FBRztBQUNabEQsTUFBQUEsTUFBTSxFQUFFK0MsZUFBZSxDQUFDdEYsR0FEWjtBQUVacUMsTUFBQUEsTUFBTSxFQUFFLENBRkk7QUFHWmxDLE1BQUFBLElBQUksRUFBRW1GLGVBQWUsQ0FBQ25GLElBSFY7QUFJWm1DLE1BQUFBLEtBQUssRUFBRWdELGVBQWUsQ0FBQ2hELEtBSlg7QUFLWnRDLE1BQUFBLEdBQUcsRUFBRTBELEtBQUssQ0FBQzFELEdBTEM7QUFNWjNCLE1BQUFBLEtBQUssRUFBRTtBQU5LLEtBQWQ7QUFRQW9ILElBQUFBLEtBQUssQ0FBQ3BILEtBQU4sR0FBY29ILEtBQUssQ0FBQ25ELEtBQU4sR0FBY21ELEtBQUssQ0FBQ3RGLElBQWxDO0FBQ0FzRixJQUFBQSxLQUFLLENBQUNwRCxNQUFOLEdBQWVvRCxLQUFLLENBQUNsRCxNQUFOLEdBQWVrRCxLQUFLLENBQUN6RixHQUFwQzs7QUFDQSxRQUFJeUYsS0FBSyxDQUFDcEQsTUFBTixLQUFpQixDQUFqQixJQUFzQm9ELEtBQUssQ0FBQ3BILEtBQU4sS0FBZ0IsQ0FBMUMsRUFBNkM7QUFDM0NvRixNQUFBQSxLQUFLLENBQUMzTyxJQUFOLENBQVcyUSxLQUFYO0FBQ0Q7QUFDRjtBQUNEO0FBQ0UsUUFBTUMsS0FBSyxHQUFHO0FBQ1puRCxNQUFBQSxNQUFNLEVBQUVtQixLQUFLLENBQUNuQixNQURGO0FBRVpGLE1BQUFBLE1BQU0sRUFBRSxDQUZJO0FBR1psQyxNQUFBQSxJQUFJLEVBQUVtRixlQUFlLENBQUNuRixJQUhWO0FBSVptQyxNQUFBQSxLQUFLLEVBQUVnRCxlQUFlLENBQUNoRCxLQUpYO0FBS1p0QyxNQUFBQSxHQUFHLEVBQUVzRixlQUFlLENBQUMvQyxNQUxUO0FBTVpsRSxNQUFBQSxLQUFLLEVBQUU7QUFOSyxLQUFkO0FBUUFxSCxJQUFBQSxLQUFLLENBQUNySCxLQUFOLEdBQWNxSCxLQUFLLENBQUNwRCxLQUFOLEdBQWNvRCxLQUFLLENBQUN2RixJQUFsQztBQUNBdUYsSUFBQUEsS0FBSyxDQUFDckQsTUFBTixHQUFlcUQsS0FBSyxDQUFDbkQsTUFBTixHQUFlbUQsS0FBSyxDQUFDMUYsR0FBcEM7O0FBQ0EsUUFBSTBGLEtBQUssQ0FBQ3JELE1BQU4sS0FBaUIsQ0FBakIsSUFBc0JxRCxLQUFLLENBQUNySCxLQUFOLEtBQWdCLENBQTFDLEVBQTZDO0FBQzNDb0YsTUFBQUEsS0FBSyxDQUFDM08sSUFBTixDQUFXNFEsS0FBWDtBQUNEO0FBQ0Y7QUFDRDtBQUNFLFFBQU1DLEtBQUssR0FBRztBQUNacEQsTUFBQUEsTUFBTSxFQUFFbUIsS0FBSyxDQUFDbkIsTUFERjtBQUVaRixNQUFBQSxNQUFNLEVBQUUsQ0FGSTtBQUdabEMsTUFBQUEsSUFBSSxFQUFFbUYsZUFBZSxDQUFDaEQsS0FIVjtBQUlaQSxNQUFBQSxLQUFLLEVBQUVvQixLQUFLLENBQUNwQixLQUpEO0FBS1p0QyxNQUFBQSxHQUFHLEVBQUUwRCxLQUFLLENBQUMxRCxHQUxDO0FBTVozQixNQUFBQSxLQUFLLEVBQUU7QUFOSyxLQUFkO0FBUUFzSCxJQUFBQSxLQUFLLENBQUN0SCxLQUFOLEdBQWNzSCxLQUFLLENBQUNyRCxLQUFOLEdBQWNxRCxLQUFLLENBQUN4RixJQUFsQztBQUNBd0YsSUFBQUEsS0FBSyxDQUFDdEQsTUFBTixHQUFlc0QsS0FBSyxDQUFDcEQsTUFBTixHQUFlb0QsS0FBSyxDQUFDM0YsR0FBcEM7O0FBQ0EsUUFBSTJGLEtBQUssQ0FBQ3RELE1BQU4sS0FBaUIsQ0FBakIsSUFBc0JzRCxLQUFLLENBQUN0SCxLQUFOLEtBQWdCLENBQTFDLEVBQTZDO0FBQzNDb0YsTUFBQUEsS0FBSyxDQUFDM08sSUFBTixDQUFXNlEsS0FBWDtBQUNEO0FBQ0Y7QUFDRCxTQUFPbEMsS0FBUDtBQUNEOztBQUVELFNBQVNvQiwyQkFBVCxDQUEyQjlFLElBQTNCLEVBQWlDK0UsQ0FBakMsRUFBb0NDLENBQXBDLEVBQXVDbkMsU0FBdkMsRUFBa0Q7QUFDaEQsU0FDRSxDQUFDN0MsSUFBSSxDQUFDSSxJQUFMLEdBQVkyRSxDQUFaLElBQWlCakIscUJBQVcsQ0FBQzlELElBQUksQ0FBQ0ksSUFBTixFQUFZMkUsQ0FBWixFQUFlbEMsU0FBZixDQUE3QixNQUNDN0MsSUFBSSxDQUFDdUMsS0FBTCxHQUFhd0MsQ0FBYixJQUFrQmpCLHFCQUFXLENBQUM5RCxJQUFJLENBQUN1QyxLQUFOLEVBQWF3QyxDQUFiLEVBQWdCbEMsU0FBaEIsQ0FEOUIsTUFFQzdDLElBQUksQ0FBQ0MsR0FBTCxHQUFXK0UsQ0FBWCxJQUFnQmxCLHFCQUFXLENBQUM5RCxJQUFJLENBQUNDLEdBQU4sRUFBVytFLENBQVgsRUFBY25DLFNBQWQsQ0FGNUIsTUFHQzdDLElBQUksQ0FBQ3dDLE1BQUwsR0FBY3dDLENBQWQsSUFBbUJsQixxQkFBVyxDQUFDOUQsSUFBSSxDQUFDd0MsTUFBTixFQUFjd0MsQ0FBZCxFQUFpQm5DLFNBQWpCLENBSC9CLENBREY7QUFNRDs7QUFFRCxTQUFTK0Isc0JBQVQsQ0FBc0JqQixLQUF0QixFQUE2QkMsS0FBN0IsRUFBb0NmLFNBQXBDLEVBQStDO0FBQzdDLFNBQ0VpQywyQkFBaUIsQ0FBQ25CLEtBQUQsRUFBUUMsS0FBSyxDQUFDeEQsSUFBZCxFQUFvQndELEtBQUssQ0FBQzNELEdBQTFCLEVBQStCNEMsU0FBL0IsQ0FBakIsSUFDQWlDLDJCQUFpQixDQUFDbkIsS0FBRCxFQUFRQyxLQUFLLENBQUNyQixLQUFkLEVBQXFCcUIsS0FBSyxDQUFDM0QsR0FBM0IsRUFBZ0M0QyxTQUFoQyxDQURqQixJQUVBaUMsMkJBQWlCLENBQUNuQixLQUFELEVBQVFDLEtBQUssQ0FBQ3hELElBQWQsRUFBb0J3RCxLQUFLLENBQUNwQixNQUExQixFQUFrQ0ssU0FBbEMsQ0FGakIsSUFHQWlDLDJCQUFpQixDQUFDbkIsS0FBRCxFQUFRQyxLQUFLLENBQUNyQixLQUFkLEVBQXFCcUIsS0FBSyxDQUFDcEIsTUFBM0IsRUFBbUNLLFNBQW5DLENBSm5CO0FBTUQ7O0FBRUQsU0FBU3lCLHlCQUFULENBQXlCWCxLQUF6QixFQUFnQ0MsS0FBaEMsRUFBdUM7QUFDckMsTUFBTXhELElBQUksR0FBRzNLLElBQUksQ0FBQ0MsR0FBTCxDQUFTaU8sS0FBSyxDQUFDdkQsSUFBZixFQUFxQndELEtBQUssQ0FBQ3hELElBQTNCLENBQWI7QUFDQSxNQUFNbUMsS0FBSyxHQUFHOU0sSUFBSSxDQUFDWSxHQUFMLENBQVNzTixLQUFLLENBQUNwQixLQUFmLEVBQXNCcUIsS0FBSyxDQUFDckIsS0FBNUIsQ0FBZDtBQUNBLE1BQU10QyxHQUFHLEdBQUd4SyxJQUFJLENBQUNDLEdBQUwsQ0FBU2lPLEtBQUssQ0FBQzFELEdBQWYsRUFBb0IyRCxLQUFLLENBQUMzRCxHQUExQixDQUFaO0FBQ0EsTUFBTXVDLE1BQU0sR0FBRy9NLElBQUksQ0FBQ1ksR0FBTCxDQUFTc04sS0FBSyxDQUFDbkIsTUFBZixFQUF1Qm9CLEtBQUssQ0FBQ3BCLE1BQTdCLENBQWY7QUFDQSxTQUFPO0FBQ0xBLElBQUFBLE1BQU0sRUFBTkEsTUFESztBQUVMRixJQUFBQSxNQUFNLEVBQUVFLE1BQU0sR0FBR3ZDLEdBRlo7QUFHTEcsSUFBQUEsSUFBSSxFQUFKQSxJQUhLO0FBSUxtQyxJQUFBQSxLQUFLLEVBQUxBLEtBSks7QUFLTHRDLElBQUFBLEdBQUcsRUFBSEEsR0FMSztBQU1MM0IsSUFBQUEsS0FBSyxFQUFFaUUsS0FBSyxHQUFHbkM7QUFOVixHQUFQO0FBUUQ7O0FBRUQsU0FBUzZDLDRCQUFULENBQ0VTLEtBREYsRUFFRWIsU0FGRixFQUdFSCxrQ0FIRixFQUlFO0FBQ0EsT0FBSyxJQUFJckksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3FKLEtBQUssQ0FBQ3hPLE1BQTFCLEVBQWtDbUYsQ0FBQyxFQUFuQyxFQUF1QztBQUFBLCtCQUM1QmtKLENBRDRCO0FBRW5DLFVBQU1JLEtBQUssR0FBR0QsS0FBSyxDQUFDckosQ0FBRCxDQUFuQjtBQUNBLFVBQU11SixLQUFLLEdBQUdGLEtBQUssQ0FBQ0gsQ0FBRCxDQUFuQjs7QUFDQSxVQUFJSSxLQUFLLEtBQUtDLEtBQWQsRUFBcUI7QUFDbkIsWUFBSTRKLE1BQUosRUFBWTtBQUNWcUUsVUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLHdDQUFaO0FBQ0Q7O0FBQ0Q7QUFDRDs7QUFDRCxVQUFNaUMscUJBQXFCLEdBQ3pCQyxxQkFBVyxDQUFDSCxLQUFLLENBQUMxRCxHQUFQLEVBQVkyRCxLQUFLLENBQUMzRCxHQUFsQixFQUF1QjRDLFNBQXZCLENBQVgsSUFDQWlCLHFCQUFXLENBQUNILEtBQUssQ0FBQ25CLE1BQVAsRUFBZW9CLEtBQUssQ0FBQ3BCLE1BQXJCLEVBQTZCSyxTQUE3QixDQUZiO0FBR0EsVUFBTWtCLHVCQUF1QixHQUMzQkQscUJBQVcsQ0FBQ0gsS0FBSyxDQUFDdkQsSUFBUCxFQUFhd0QsS0FBSyxDQUFDeEQsSUFBbkIsRUFBeUJ5QyxTQUF6QixDQUFYLElBQ0FpQixxQkFBVyxDQUFDSCxLQUFLLENBQUNwQixLQUFQLEVBQWNxQixLQUFLLENBQUNyQixLQUFwQixFQUEyQk0sU0FBM0IsQ0FGYjtBQUdBLFVBQU1tQixpQkFBaUIsR0FBRyxDQUFDdEIsa0NBQTNCO0FBQ0EsVUFBTXVCLE9BQU8sR0FDVkYsdUJBQXVCLElBQUlDLGlCQUE1QixJQUNDSCxxQkFBcUIsSUFBSSxDQUFDRSx1QkFGN0I7QUFHQSxVQUFNRyxRQUFRLEdBQUdELE9BQU8sSUFBSUUsNkJBQW1CLENBQUNSLEtBQUQsRUFBUUMsS0FBUixFQUFlZixTQUFmLENBQS9DOztBQUNBLFVBQUlxQixRQUFKLEVBQWM7QUFDWixZQUFJc0osTUFBSixFQUFZO0FBQ1ZxRSxVQUFBQSxPQUFPLENBQUNqUSxHQUFSLHdEQUNrRGlDLHFCQURsRCwwQkFDdUZFLHVCQUR2RixlQUNtSHJCLGtDQURuSDtBQUdEOztBQUNELFlBQU1VLFFBQVEsR0FBR00sS0FBSyxDQUFDVSxNQUFOLENBQWEsVUFBQ3BFLElBQUQsRUFBVTtBQUN0QyxpQkFBT0EsSUFBSSxLQUFLMkQsS0FBVCxJQUFrQjNELElBQUksS0FBSzRELEtBQWxDO0FBQ0QsU0FGZ0IsQ0FBakI7QUFHQSxZQUFNUyxxQkFBcUIsR0FBR0MseUJBQWUsQ0FBQ1gsS0FBRCxFQUFRQyxLQUFSLENBQTdDO0FBQ0FSLFFBQUFBLFFBQVEsQ0FBQ3JPLElBQVQsQ0FBY3NQLHFCQUFkO0FBQ0E7QUFBQSxhQUFPcEIsNEJBQWtCLENBQ3ZCRyxRQUR1QixFQUV2QlAsU0FGdUIsRUFHdkJILGtDQUh1QjtBQUF6QjtBQUtEO0FBckNrQzs7QUFDckMsU0FBSyxJQUFJYSxDQUFDLEdBQUdsSixDQUFDLEdBQUcsQ0FBakIsRUFBb0JrSixDQUFDLEdBQUdHLEtBQUssQ0FBQ3hPLE1BQTlCLEVBQXNDcU8sQ0FBQyxFQUF2QyxFQUEyQztBQUFBLHdCQUFsQ0EsQ0FBa0M7O0FBQUEsZ0NBT3ZDO0FBUHVDO0FBcUMxQztBQUNGOztBQUNELFNBQU9HLEtBQVA7QUFDRDs7QUFFRCxTQUFTakIsaUNBQVQsQ0FBaUNoSSxLQUFqQyxFQUF3Q2lJLGtDQUF4QyxFQUE0RTtBQUMxRSxNQUFNc1EsZ0JBQWdCLEdBQUd2WSxLQUFLLENBQUNtSSxjQUFOLEVBQXpCO0FBQ0EsU0FBT3FRLHdCQUF3QixDQUM3QkQsZ0JBRDZCLEVBRTdCdFEsa0NBRjZCLENBQS9CO0FBSUQ7O0FBRUQsU0FBU3VRLHdCQUFULENBQ0V0USxXQURGLEVBRUVELGtDQUZGLEVBR0U7QUFDQSxNQUFNRyxTQUFTLEdBQUcsQ0FBbEI7QUFDQSxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7O0FBRkEsd0RBRzhCSCxXQUg5QjtBQUFBOztBQUFBO0FBR0EsOERBQTJDO0FBQUEsVUFBaENJLGVBQWdDO0FBQ3pDRCxNQUFBQSxhQUFhLENBQUMvTixJQUFkLENBQW1CO0FBQ2pCeU4sUUFBQUEsTUFBTSxFQUFFTyxlQUFlLENBQUNQLE1BRFA7QUFFakJGLFFBQUFBLE1BQU0sRUFBRVMsZUFBZSxDQUFDVCxNQUZQO0FBR2pCbEMsUUFBQUEsSUFBSSxFQUFFMkMsZUFBZSxDQUFDM0MsSUFITDtBQUlqQm1DLFFBQUFBLEtBQUssRUFBRVEsZUFBZSxDQUFDUixLQUpOO0FBS2pCdEMsUUFBQUEsR0FBRyxFQUFFOEMsZUFBZSxDQUFDOUMsR0FMSjtBQU1qQjNCLFFBQUFBLEtBQUssRUFBRXlFLGVBQWUsQ0FBQ3pFO0FBTk4sT0FBbkI7QUFRRDtBQVpEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBYUEsTUFBTTBFLFdBQVcsR0FBR0MsNEJBQWtCLENBQ3BDSCxhQURvQyxFQUVwQ0QsU0FGb0MsRUFHcENILGtDQUhvQyxDQUF0QztBQUtBLE1BQU1RLGdCQUFnQixHQUFHQyw4QkFBb0IsQ0FBQ0gsV0FBRCxFQUFjSCxTQUFkLENBQTdDO0FBQ0EsTUFBTU8sUUFBUSxHQUFHQyxnQ0FBc0IsQ0FBQ0gsZ0JBQUQsQ0FBdkM7QUFDQSxNQUFNSSxPQUFPLEdBQUcsSUFBSSxDQUFwQjs7QUFDQSxPQUFLLElBQUlDLENBQUMsR0FBR0gsUUFBUSxDQUFDbE8sTUFBVCxHQUFrQixDQUEvQixFQUFrQ3FPLENBQUMsSUFBSSxDQUF2QyxFQUEwQ0EsQ0FBQyxFQUEzQyxFQUErQztBQUM3QyxRQUFNdkQsSUFBSSxHQUFHb0QsUUFBUSxDQUFDRyxDQUFELENBQXJCO0FBQ0EsUUFBTUMsU0FBUyxHQUFHeEQsSUFBSSxDQUFDMUIsS0FBTCxHQUFhMEIsSUFBSSxDQUFDc0MsTUFBbEIsR0FBMkJnQixPQUE3Qzs7QUFDQSxRQUFJLENBQUNFLFNBQUwsRUFBZ0I7QUFDZCxVQUFJSixRQUFRLENBQUNsTyxNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCLFlBQUlzWSxNQUFKLEVBQVk7QUFDVnFFLFVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSwyQkFBWjtBQUNEOztBQUNEd0IsUUFBQUEsUUFBUSxDQUFDSyxNQUFULENBQWdCRixDQUFoQixFQUFtQixDQUFuQjtBQUNELE9BTEQsTUFLTztBQUNMLFlBQUlpSyxNQUFKLEVBQVk7QUFDVnFFLFVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSxzREFBWjtBQUNEOztBQUNEO0FBQ0Q7QUFDRjtBQUNGOztBQUNELE1BQUk0TCxNQUFKLEVBQVk7QUFDVmdGLElBQUFBLGFBQWEsQ0FBQ3BQLFFBQUQsQ0FBYjtBQUNEOztBQUNELE1BQUlvSyxNQUFKLEVBQVk7QUFDVnFFLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsZ0NBQzBCa0IsYUFBYSxDQUFDNU4sTUFEeEMsa0JBQ3NEa08sUUFBUSxDQUFDbE8sTUFEL0Q7QUFHRDs7QUFDRCxTQUFPa08sUUFBUDtBQUNEOztBQUVELFNBQVM0TSxXQUFULENBQXFCblcsUUFBckIsRUFBK0I7QUFDN0IsU0FDRUEsUUFBUSxJQUNSQSxRQUFRLENBQUMrRSxlQURULElBRUEvRSxRQUFRLENBQUMrRSxlQUFULENBQXlCc1UsU0FBekIsQ0FBbUM1WixRQUFuQyxDQUE0Q2lVLGVBQTVDLENBSEY7QUFLRDs7QUFFRCxTQUFTc0MsbUJBQVQsQ0FBNkJoVyxRQUE3QixFQUF1QztBQUNyQyxNQUFJQSxRQUFRLENBQUM2RCxnQkFBYixFQUErQjtBQUM3QixXQUFPN0QsUUFBUSxDQUFDNkQsZ0JBQWhCO0FBQ0Q7O0FBQ0QsU0FBTzdELFFBQVEsQ0FBQ21ELElBQWhCO0FBQ0Q7O0FBRUQsU0FBU21XLGVBQVQsQ0FBeUJ0RSxHQUF6QixFQUE4QnVFLGNBQTlCLEVBQThDO0FBQzVDLE1BQU12WixRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjs7QUFFQSxNQUFJLENBQUM2VCxvQkFBTCxFQUEyQjtBQUN6QixRQUFJLENBQUNJLHFCQUFMLEVBQTRCO0FBQzFCQSxNQUFBQSxxQkFBcUIsR0FBRyxJQUF4QjtBQUNBalUsTUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjWCxnQkFBZCxDQUNFLFdBREYsRUFFRSxVQUFDc1QsRUFBRCxFQUFRO0FBQ04vQixRQUFBQSxjQUFjLEdBQUcrQixFQUFFLENBQUMvSCxPQUFwQjtBQUNBaUcsUUFBQUEsY0FBYyxHQUFHOEIsRUFBRSxDQUFDOUgsT0FBcEI7QUFDRCxPQUxILEVBTUUsS0FORjtBQVFBaE8sTUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjWCxnQkFBZCxDQUNFLFNBREYsRUFFRSxVQUFDc1QsRUFBRCxFQUFRO0FBQ04sWUFDRWxhLElBQUksQ0FBQ2tCLEdBQUwsQ0FBU2lYLGNBQWMsR0FBRytCLEVBQUUsQ0FBQy9ILE9BQTdCLElBQXdDLENBQXhDLElBQ0FuUyxJQUFJLENBQUNrQixHQUFMLENBQVNrWCxjQUFjLEdBQUc4QixFQUFFLENBQUM5SCxPQUE3QixJQUF3QyxDQUYxQyxFQUdFO0FBQ0F1SyxVQUFBQSxpQkFBaUIsQ0FBQ3ZELEdBQUQsRUFBTWMsRUFBTixDQUFqQjtBQUNEO0FBQ0YsT0FUSCxFQVVFLEtBVkY7QUFZQTlWLE1BQUFBLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY1gsZ0JBQWQsQ0FDRSxXQURGLEVBRUUsVUFBQ3NULEVBQUQsRUFBUTtBQUNOeUMsUUFBQUEsaUJBQWlCLENBQUN2RCxHQUFELEVBQU1jLEVBQU4sQ0FBakI7QUFDRCxPQUpILEVBS0UsS0FMRjtBQVFBOVYsTUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjWCxnQkFBZCxDQUNFLFVBREYsRUFFRSxTQUFTZ1gsUUFBVCxDQUFrQjVSLENBQWxCLEVBQXFCO0FBQ25CaU8sUUFBQUEsaUJBQWlCLENBQUNiLEdBQUQsRUFBTXBOLENBQU4sQ0FBakI7QUFDRCxPQUpILEVBS0UsS0FMRjtBQU9EOztBQUNEaU0sSUFBQUEsb0JBQW9CLEdBQUc3VCxRQUFRLENBQUNtRSxhQUFULENBQXVCLEtBQXZCLENBQXZCOztBQUNBMFAsSUFBQUEsb0JBQW9CLENBQUN6UCxZQUFyQixDQUFrQyxJQUFsQyxFQUF3QzZPLHVCQUF4Qzs7QUFFQVksSUFBQUEsb0JBQW9CLENBQUN4UCxLQUFyQixDQUEyQk8sV0FBM0IsQ0FBdUMsZ0JBQXZDLEVBQXlELE1BQXpEOztBQUNBNUUsSUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjc04sTUFBZCxDQUFxQm9ELG9CQUFyQjtBQUNEOztBQUVELFNBQU9BLG9CQUFQO0FBQ0Q7O0FBRUQsU0FBUzRGLGlCQUFULEdBQTZCO0FBQzNCLE1BQUk1RixvQkFBSixFQUEwQjtBQUN4QkEsSUFBQUEsb0JBQW9CLENBQUNsUSxNQUFyQjs7QUFDQWtRLElBQUFBLG9CQUFvQixHQUFHLElBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTNkYsb0JBQVQsR0FBZ0M7QUFDOUJELEVBQUFBLGlCQUFpQjs7QUFDakI3RixFQUFBQSxXQUFXLENBQUNoSyxNQUFaLENBQW1CLENBQW5CLEVBQXNCZ0ssV0FBVyxDQUFDdlksTUFBbEM7QUFDRDs7QUFFTSxTQUFTc2UsZ0JBQVQsQ0FBMEJyVyxFQUExQixFQUE4QjtBQUNuQyxNQUFJOUMsQ0FBQyxHQUFHLENBQUMsQ0FBVDtBQUNBLE1BQUlvWixTQUFTLEdBQUdyWCxNQUFNLENBQUN2QyxRQUF2Qjs7QUFDQSxNQUFNcUgsU0FBUyxHQUFHdU0sV0FBVyxDQUFDK0IsSUFBWixDQUFpQixVQUFDQyxDQUFELEVBQUlsTSxDQUFKLEVBQVU7QUFDM0NsSixJQUFBQSxDQUFDLEdBQUdrSixDQUFKO0FBQ0EsV0FBT2tNLENBQUMsQ0FBQ3RTLEVBQUYsS0FBU0EsRUFBaEI7QUFDRCxHQUhpQixDQUFsQjs7QUFJQSxNQUFJK0QsU0FBUyxJQUFJN0csQ0FBQyxJQUFJLENBQWxCLElBQXVCQSxDQUFDLEdBQUdvVCxXQUFXLENBQUN2WSxNQUEzQyxFQUFtRDtBQUNqRHVZLElBQUFBLFdBQVcsQ0FBQ2hLLE1BQVosQ0FBbUJwSixDQUFuQixFQUFzQixDQUF0QjtBQUNEOztBQUNELE1BQU1xWixrQkFBa0IsR0FBR0QsU0FBUyxDQUFDcFcsY0FBVixDQUF5QkYsRUFBekIsQ0FBM0I7O0FBQ0EsTUFBSXVXLGtCQUFKLEVBQXdCO0FBQ3RCQSxJQUFBQSxrQkFBa0IsQ0FBQ2xXLE1BQW5CO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTbVcsYUFBVCxDQUF1QnBjLElBQXZCLEVBQTZCO0FBQzNCLFNBQU9BLElBQUksQ0FBQ0MsUUFBTCxLQUFrQkMsSUFBSSxDQUFDQyxZQUE5QjtBQUNEOztBQUVELFNBQVNrYyx3QkFBVCxDQUFrQzNiLE9BQWxDLEVBQTJDNGIsS0FBM0MsRUFBa0Q7QUFDaEQsTUFBSUMsS0FBSyxHQUFHLENBQUMsQ0FBYjtBQUNBLE1BQUlDLGFBQWEsR0FBRyxDQUFDLENBQXJCO0FBQ0EsTUFBSUMsa0JBQWtCLEdBQUcsS0FBekI7O0FBQ0EsT0FBSyxJQUFJM1osQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3BDLE9BQU8sQ0FBQ21DLFVBQVIsQ0FBbUJsRixNQUF2QyxFQUErQ21GLENBQUMsRUFBaEQsRUFBb0Q7QUFDbEQsUUFBTTRaLFNBQVMsR0FBR2hjLE9BQU8sQ0FBQ21DLFVBQVIsQ0FBbUJDLENBQW5CLENBQWxCO0FBQ0EsUUFBTTZaLE1BQU0sR0FBR1AsYUFBYSxDQUFDTSxTQUFELENBQTVCOztBQUNBLFFBQUlDLE1BQU0sSUFBSUYsa0JBQWQsRUFBa0M7QUFDaENELE1BQUFBLGFBQWEsSUFBSSxDQUFqQjtBQUNEOztBQUNELFFBQUlHLE1BQUosRUFBWTtBQUNWLFVBQUlELFNBQVMsS0FBS0osS0FBbEIsRUFBeUI7QUFDdkJDLFFBQUFBLEtBQUssR0FBR0MsYUFBUjtBQUNBO0FBQ0Q7QUFDRjs7QUFDREMsSUFBQUEsa0JBQWtCLEdBQUdDLFNBQVMsQ0FBQ3pjLFFBQVYsS0FBdUJDLElBQUksQ0FBQ0MsWUFBakQ7QUFDRDs7QUFDRCxTQUFPb2MsS0FBUDtBQUNEOztBQUVELFNBQVNLLHdCQUFULENBQWtDQyxLQUFsQyxFQUF5Q0MsS0FBekMsRUFBZ0Q7QUFDOUMsTUFBSUQsS0FBSyxDQUFDNWMsUUFBTixLQUFtQkMsSUFBSSxDQUFDQyxZQUF4QixJQUF3QzBjLEtBQUssS0FBS0MsS0FBdEQsRUFBNkQ7QUFDM0QsV0FBT0QsS0FBUDtBQUNEOztBQUNELE1BQUlBLEtBQUssQ0FBQzVjLFFBQU4sS0FBbUJDLElBQUksQ0FBQ0MsWUFBeEIsSUFBd0MwYyxLQUFLLENBQUM5YSxRQUFOLENBQWUrYSxLQUFmLENBQTVDLEVBQW1FO0FBQ2pFLFdBQU9ELEtBQVA7QUFDRDs7QUFDRCxNQUFJQyxLQUFLLENBQUM3YyxRQUFOLEtBQW1CQyxJQUFJLENBQUNDLFlBQXhCLElBQXdDMmMsS0FBSyxDQUFDL2EsUUFBTixDQUFlOGEsS0FBZixDQUE1QyxFQUFtRTtBQUNqRSxXQUFPQyxLQUFQO0FBQ0Q7O0FBQ0QsTUFBTUMseUJBQXlCLEdBQUcsRUFBbEM7QUFDQSxNQUFJamIsTUFBTSxHQUFHK2EsS0FBSyxDQUFDN0UsVUFBbkI7O0FBQ0EsU0FBT2xXLE1BQU0sSUFBSUEsTUFBTSxDQUFDN0IsUUFBUCxLQUFvQkMsSUFBSSxDQUFDQyxZQUExQyxFQUF3RDtBQUN0RDRjLElBQUFBLHlCQUF5QixDQUFDdmYsSUFBMUIsQ0FBK0JzRSxNQUEvQjtBQUNBQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ2tXLFVBQWhCO0FBQ0Q7O0FBQ0QsTUFBTWdGLHlCQUF5QixHQUFHLEVBQWxDO0FBQ0FsYixFQUFBQSxNQUFNLEdBQUdnYixLQUFLLENBQUM5RSxVQUFmOztBQUNBLFNBQU9sVyxNQUFNLElBQUlBLE1BQU0sQ0FBQzdCLFFBQVAsS0FBb0JDLElBQUksQ0FBQ0MsWUFBMUMsRUFBd0Q7QUFDdEQ2YyxJQUFBQSx5QkFBeUIsQ0FBQ3hmLElBQTFCLENBQStCc0UsTUFBL0I7QUFDQUEsSUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNrVyxVQUFoQjtBQUNEOztBQUNELE1BQUlpRixjQUFjLEdBQUdGLHlCQUF5QixDQUFDOUUsSUFBMUIsQ0FDbkIsVUFBQ2lGLG9CQUFELEVBQTBCO0FBQ3hCLFdBQU9GLHlCQUF5QixDQUFDemYsT0FBMUIsQ0FBa0MyZixvQkFBbEMsS0FBMkQsQ0FBbEU7QUFDRCxHQUhrQixDQUFyQjs7QUFLQSxNQUFJLENBQUNELGNBQUwsRUFBcUI7QUFDbkJBLElBQUFBLGNBQWMsR0FBR0QseUJBQXlCLENBQUMvRSxJQUExQixDQUErQixVQUFDa0Ysb0JBQUQsRUFBMEI7QUFDeEUsYUFBT0oseUJBQXlCLENBQUN4ZixPQUExQixDQUFrQzRmLG9CQUFsQyxLQUEyRCxDQUFsRTtBQUNELEtBRmdCLENBQWpCO0FBR0Q7O0FBQ0QsU0FBT0YsY0FBUDtBQUNEOztBQUVELFNBQVNHLHFCQUFULENBQStCcGQsSUFBL0IsRUFBcUM7QUFDbkMsTUFBSUEsSUFBSSxDQUFDQyxRQUFMLEtBQWtCQyxJQUFJLENBQUNDLFlBQTNCLEVBQXlDO0FBQ3ZDLFFBQU1rZCxhQUFhLEdBQ2hCcmQsSUFBSSxDQUFDc2QsU0FBTCxJQUFrQnRkLElBQUksQ0FBQ3NkLFNBQUwsQ0FBZTNWLFdBQWYsRUFBbkIsSUFDQTNILElBQUksQ0FBQ21VLFFBQUwsQ0FBY3hNLFdBQWQsRUFGRjtBQUdBLFdBQU8wVixhQUFQO0FBQ0QsR0FOa0MsQ0FPbkM7OztBQUNBLFNBQU9FLE9BQU8sQ0FBQ3ZkLElBQUQsRUFBTyxJQUFQLENBQWQ7QUFDRDs7QUFFTSxTQUFTd2QsdUJBQVQsR0FBbUM7QUFDeEMsTUFBTUMsU0FBUyxHQUFHNVksTUFBTSxDQUFDME8sWUFBUCxFQUFsQjs7QUFDQSxNQUFJLENBQUNrSyxTQUFMLEVBQWdCO0FBQ2QsV0FBT2xjLFNBQVA7QUFDRDs7QUFDRCxNQUFJa2MsU0FBUyxDQUFDakssV0FBZCxFQUEyQjtBQUN6QjhHLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSwwQkFBWjtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBQ0QsTUFBTW1jLE9BQU8sR0FBR0QsU0FBUyxDQUFDbFcsUUFBVixFQUFoQjtBQUNBLE1BQU1vVyxTQUFTLEdBQUdELE9BQU8sQ0FBQ2xXLElBQVIsR0FBZW9XLE9BQWYsQ0FBdUIsS0FBdkIsRUFBOEIsR0FBOUIsRUFBbUNBLE9BQW5DLENBQTJDLFFBQTNDLEVBQXFELEdBQXJELENBQWxCOztBQUNBLE1BQUlELFNBQVMsQ0FBQ2hnQixNQUFWLEtBQXFCLENBQXpCLEVBQTRCO0FBQzFCMmMsSUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLDJCQUFaO0FBQ0EsV0FBTzlJLFNBQVA7QUFDRDs7QUFDRCxNQUFJLENBQUNrYyxTQUFTLENBQUNJLFVBQVgsSUFBeUIsQ0FBQ0osU0FBUyxDQUFDSyxTQUF4QyxFQUFtRDtBQUNqRCxXQUFPdmMsU0FBUDtBQUNEOztBQUNELE1BQU0yQixLQUFLLEdBQ1R1YSxTQUFTLENBQUNNLFVBQVYsS0FBeUIsQ0FBekIsR0FDSU4sU0FBUyxDQUFDTyxVQUFWLENBQXFCLENBQXJCLENBREosR0FFSUMsa0JBQWtCLENBQ2hCUixTQUFTLENBQUNJLFVBRE0sRUFFaEJKLFNBQVMsQ0FBQ1MsWUFGTSxFQUdoQlQsU0FBUyxDQUFDSyxTQUhNLEVBSWhCTCxTQUFTLENBQUNVLFdBSk0sQ0FIeEI7O0FBU0EsTUFBSSxDQUFDamIsS0FBRCxJQUFVQSxLQUFLLENBQUNrYixTQUFwQixFQUErQjtBQUM3QjlELElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSw4REFBWjtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBQ0QsTUFBTThjLFNBQVMsR0FBR0MsWUFBWSxDQUFDcGIsS0FBRCxFQUFRa2EscUJBQVIsRUFBK0JtQixVQUEvQixDQUE5Qjs7QUFDQSxNQUFJLENBQUNGLFNBQUwsRUFBZ0I7QUFDZC9ELElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSxpQ0FBWjtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBRUQsTUFBSTBVLE1BQU0sSUFBSVUsYUFBZCxFQUE2QjtBQUMzQixRQUFNNkgsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQ25ILEdBQUcsQ0FBQ2hWLFFBQUwsRUFBZStiLFNBQWYsQ0FBdEM7O0FBQ0EsUUFBSUcsYUFBSixFQUFtQjtBQUNqQixVQUNFQSxhQUFhLENBQUNqYixXQUFkLEtBQThCTCxLQUFLLENBQUNLLFdBQXBDLElBQ0FpYixhQUFhLENBQUMvYSxTQUFkLEtBQTRCUCxLQUFLLENBQUNPLFNBRGxDLElBRUErYSxhQUFhLENBQUNsYixjQUFkLEtBQWlDSixLQUFLLENBQUNJLGNBRnZDLElBR0FrYixhQUFhLENBQUNoYixZQUFkLEtBQStCTixLQUFLLENBQUNNLFlBSnZDLEVBS0U7QUFDQThXLFFBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSw0Q0FBWjtBQUNELE9BUEQsTUFPTztBQUNMaVEsUUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLDJDQUFaO0FBQ0FxVSxRQUFBQSxTQUFTLENBQ1AsV0FETyxFQUVQakIsU0FBUyxDQUFDSSxVQUZILEVBR1BKLFNBQVMsQ0FBQ1MsWUFISCxFQUlQVCxTQUFTLENBQUNLLFNBSkgsRUFLUEwsU0FBUyxDQUFDVSxXQUxILEVBTVBRLGNBTk8sQ0FBVDtBQVFBRCxRQUFBQSxTQUFTLENBQ1AsOEJBRE8sRUFFUHhiLEtBQUssQ0FBQ0ksY0FGQyxFQUdQSixLQUFLLENBQUNLLFdBSEMsRUFJUEwsS0FBSyxDQUFDTSxZQUpDLEVBS1BOLEtBQUssQ0FBQ08sU0FMQyxFQU1Qa2IsY0FOTyxDQUFUO0FBUUFELFFBQUFBLFNBQVMsQ0FDUCxnQkFETyxFQUVQRixhQUFhLENBQUNsYixjQUZQLEVBR1BrYixhQUFhLENBQUNqYixXQUhQLEVBSVBpYixhQUFhLENBQUNoYixZQUpQLEVBS1BnYixhQUFhLENBQUMvYSxTQUxQLEVBTVBrYixjQU5PLENBQVQ7QUFRRDtBQUNGLEtBbkNELE1BbUNPO0FBQ0xyRSxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksb0NBQVo7QUFDRDtBQUNGLEdBeENELE1Bd0NPLENBQ047O0FBRUQsU0FBTztBQUNMVCxJQUFBQSxTQUFTLEVBQUVnVixrQkFBa0IsQ0FBQ1AsU0FBRCxDQUR4QjtBQUVMbmhCLElBQUFBLElBQUksRUFBRTtBQUNKeU0sTUFBQUEsU0FBUyxFQUFFK1Q7QUFEUDtBQUZELEdBQVA7QUFNRDs7QUFFRCxTQUFTbUIsZ0JBQVQsQ0FBMEI3YyxFQUExQixFQUE4QjtBQUM1QixNQUFJOGMsYUFBSjtBQUNBLE1BQU1sWixFQUFFLEdBQUc1RCxFQUFFLENBQUNxUyxZQUFILENBQWdCLElBQWhCLENBQVg7O0FBQ0EsTUFBSXpPLEVBQUUsSUFBSW1RLHVCQUF1QixDQUFDeFksT0FBeEIsQ0FBZ0NxSSxFQUFoQyxLQUF1QyxDQUFqRCxFQUFvRDtBQUNsRDBVLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSwwQkFBMEJ6RSxFQUF0QztBQUNBa1osSUFBQUEsYUFBYSxHQUFHbFosRUFBaEI7QUFDRDs7QUFDRCxNQUFJbVosZ0JBQUo7O0FBUDRCLHdEQVFUaEosdUJBUlM7QUFBQTs7QUFBQTtBQVE1Qiw4REFBNEM7QUFBQSxVQUFqQzdGLElBQWlDOztBQUMxQyxVQUFJbE8sRUFBRSxDQUFDMlosU0FBSCxDQUFhNVosUUFBYixDQUFzQm1PLElBQXRCLENBQUosRUFBaUM7QUFDL0JvSyxRQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksNkJBQTZCNkYsSUFBekM7QUFDQTZPLFFBQUFBLGdCQUFnQixHQUFHN08sSUFBbkI7QUFDQTtBQUNEO0FBQ0Y7QUFkMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFlNUIsTUFBSTRPLGFBQWEsSUFBSUMsZ0JBQXJCLEVBQXVDO0FBQ3JDLFdBQU8sSUFBUDtBQUNEOztBQUVELFNBQU8sS0FBUDtBQUNEOztBQUVELFNBQVN4QixPQUFULENBQWlCdmQsSUFBakIsRUFBdUJnZixTQUF2QixFQUFrQztBQUNoQyxNQUFJaGYsSUFBSSxDQUFDQyxRQUFMLEtBQWtCQyxJQUFJLENBQUNDLFlBQTNCLEVBQXlDO0FBQ3ZDLFdBQU8sRUFBUDtBQUNEOztBQUVELE1BQU04ZSxLQUFLLEdBQUcsRUFBZDtBQUNBLE1BQUlDLFdBQVcsR0FBR2xmLElBQWxCOztBQUNBLFNBQU9rZixXQUFQLEVBQW9CO0FBQ2xCLFFBQU1DLElBQUksR0FBR0MsWUFBWSxDQUFDRixXQUFELEVBQWMsQ0FBQyxDQUFDRixTQUFoQixFQUEyQkUsV0FBVyxLQUFLbGYsSUFBM0MsQ0FBekI7O0FBQ0EsUUFBSSxDQUFDbWYsSUFBTCxFQUFXO0FBQ1QsWUFEUyxDQUNGO0FBQ1I7O0FBQ0RGLElBQUFBLEtBQUssQ0FBQ3poQixJQUFOLENBQVcyaEIsSUFBSSxDQUFDM1YsS0FBaEI7O0FBQ0EsUUFBSTJWLElBQUksQ0FBQ0gsU0FBVCxFQUFvQjtBQUNsQjtBQUNEOztBQUNERSxJQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ2xILFVBQTFCO0FBQ0Q7O0FBQ0RpSCxFQUFBQSxLQUFLLENBQUNoUCxPQUFOO0FBQ0EsU0FBT2dQLEtBQUssQ0FBQ3ZVLElBQU4sQ0FBVyxLQUFYLENBQVA7QUFDRCxFQUNEO0FBQ0E7OztBQUNBLFNBQVMwVSxZQUFULENBQXNCcGYsSUFBdEIsRUFBNEJnZixTQUE1QixFQUF1Q0ssWUFBdkMsRUFBcUQ7QUFDbkQsV0FBU0MseUJBQVQsQ0FBbUNDLEVBQW5DLEVBQXVDO0FBQ3JDLFFBQU1DLGNBQWMsR0FBR0QsRUFBRSxDQUFDbEwsWUFBSCxDQUFnQixPQUFoQixDQUF2Qjs7QUFDQSxRQUFJLENBQUNtTCxjQUFMLEVBQXFCO0FBQ25CLGFBQU8sRUFBUDtBQUNEOztBQUVELFdBQU9BLGNBQWMsQ0FDbEJDLEtBREksQ0FDRSxNQURGLEVBRUo1UyxNQUZJLENBRUc2UyxPQUZILEVBR0pqZ0IsR0FISSxDQUdBLFVBQUNrZ0IsRUFBRCxFQUFRO0FBQ1g7QUFDQSxhQUFPLE1BQU1BLEVBQWI7QUFDRCxLQU5JLENBQVA7QUFPRDs7QUFFRCxXQUFTQyxVQUFULENBQW9CQyxHQUFwQixFQUF5QjtBQUN2QixXQUFPLE1BQU1DLHdCQUF3QixDQUFDRCxHQUFELENBQXJDO0FBQ0Q7O0FBRUQsV0FBU0Msd0JBQVQsQ0FBa0NDLEtBQWxDLEVBQXlDO0FBQ3ZDLFFBQUlDLGVBQWUsQ0FBQ0QsS0FBRCxDQUFuQixFQUE0QjtBQUMxQixhQUFPQSxLQUFQO0FBQ0Q7O0FBRUQsUUFBTUUsaUJBQWlCLEdBQUcsc0JBQXNCQyxJQUF0QixDQUEyQkgsS0FBM0IsQ0FBMUI7QUFDQSxRQUFNSSxTQUFTLEdBQUdKLEtBQUssQ0FBQ3BpQixNQUFOLEdBQWUsQ0FBakM7QUFDQSxXQUFPb2lCLEtBQUssQ0FBQ25DLE9BQU4sQ0FBYyxJQUFkLEVBQW9CLFVBQVV3QyxDQUFWLEVBQWFDLEVBQWIsRUFBaUI7QUFDMUMsYUFBUUosaUJBQWlCLElBQUlJLEVBQUUsS0FBSyxDQUE3QixJQUFtQyxDQUFDQyxjQUFjLENBQUNGLENBQUQsQ0FBbEQsR0FDSEcsZUFBZSxDQUFDSCxDQUFELEVBQUlDLEVBQUUsS0FBS0YsU0FBWCxDQURaLEdBRUhDLENBRko7QUFHRCxLQUpNLENBQVA7QUFLRDs7QUFFRCxXQUFTRyxlQUFULENBQXlCSCxDQUF6QixFQUE0QkksTUFBNUIsRUFBb0M7QUFDbEMsV0FBTyxPQUFPQyxTQUFTLENBQUNMLENBQUQsQ0FBaEIsSUFBdUJJLE1BQU0sR0FBRyxFQUFILEdBQVEsR0FBckMsQ0FBUDtBQUNEOztBQUVELFdBQVNDLFNBQVQsQ0FBbUJMLENBQW5CLEVBQXNCO0FBQ3BCLFFBQUlNLE9BQU8sR0FBR04sQ0FBQyxDQUFDTyxVQUFGLENBQWEsQ0FBYixFQUFnQnBaLFFBQWhCLENBQXlCLEVBQXpCLENBQWQ7O0FBQ0EsUUFBSW1aLE9BQU8sQ0FBQy9pQixNQUFSLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCK2lCLE1BQUFBLE9BQU8sR0FBRyxNQUFNQSxPQUFoQjtBQUNEOztBQUNELFdBQU9BLE9BQVA7QUFDRDs7QUFFRCxXQUFTSixjQUFULENBQXdCRixDQUF4QixFQUEyQjtBQUN6QixRQUFJLGdCQUFnQkYsSUFBaEIsQ0FBcUJFLENBQXJCLENBQUosRUFBNkI7QUFDM0IsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBT0EsQ0FBQyxDQUFDTyxVQUFGLENBQWEsQ0FBYixLQUFtQixJQUExQjtBQUNEOztBQUVELFdBQVNYLGVBQVQsQ0FBeUJ4VyxLQUF6QixFQUFnQztBQUM5QixXQUFPLDhCQUE4QjBXLElBQTlCLENBQW1DMVcsS0FBbkMsQ0FBUDtBQUNEOztBQUVELE1BQUl4SixJQUFJLENBQUNDLFFBQUwsS0FBa0JDLElBQUksQ0FBQ0MsWUFBM0IsRUFBeUM7QUFDdkMsV0FBT29CLFNBQVA7QUFDRDs7QUFDRCxNQUFNOGIsYUFBYSxHQUNoQnJkLElBQUksQ0FBQ3NkLFNBQUwsSUFBa0J0ZCxJQUFJLENBQUNzZCxTQUFMLENBQWUzVixXQUFmLEVBQW5CLElBQ0EzSCxJQUFJLENBQUNtVSxRQUFMLENBQWN4TSxXQUFkLEVBRkY7QUFJQSxNQUFNakgsT0FBTyxHQUFHVixJQUFoQjtBQUVBLE1BQU00RixFQUFFLEdBQUdsRixPQUFPLENBQUMyVCxZQUFSLENBQXFCLElBQXJCLENBQVg7O0FBRUEsTUFBSTJLLFNBQUosRUFBZTtBQUNiLFFBQUlwWixFQUFKLEVBQVE7QUFDTixhQUFPO0FBQ0xvWixRQUFBQSxTQUFTLEVBQUUsSUFETjtBQUVMeFYsUUFBQUEsS0FBSyxFQUFFb1csVUFBVSxDQUFDaGEsRUFBRDtBQUZaLE9BQVA7QUFJRDs7QUFDRCxRQUNFeVgsYUFBYSxLQUFLLE1BQWxCLElBQ0FBLGFBQWEsS0FBSyxNQURsQixJQUVBQSxhQUFhLEtBQUssTUFIcEIsRUFJRTtBQUNBLGFBQU87QUFDTDJCLFFBQUFBLFNBQVMsRUFBRSxJQUROO0FBRUx4VixRQUFBQSxLQUFLLEVBQUU2VCxhQUZGLENBRWlCOztBQUZqQixPQUFQO0FBSUQ7QUFDRjs7QUFFRCxNQUFNbEosUUFBUSxHQUFHa0osYUFBakIsQ0F2Rm1ELENBdUZuQjs7QUFDaEMsTUFBSXpYLEVBQUosRUFBUTtBQUNOLFdBQU87QUFDTG9aLE1BQUFBLFNBQVMsRUFBRSxJQUROO0FBRUx4VixNQUFBQSxLQUFLLEVBQUUySyxRQUFRLEdBQUd5TCxVQUFVLENBQUNoYSxFQUFEO0FBRnZCLEtBQVA7QUFJRDs7QUFFRCxNQUFNOUQsTUFBTSxHQUFHOUIsSUFBSSxDQUFDZ1ksVUFBcEI7O0FBRUEsTUFBSSxDQUFDbFcsTUFBRCxJQUFXQSxNQUFNLENBQUM3QixRQUFQLEtBQW9CQyxJQUFJLENBQUMwZ0IsYUFBeEMsRUFBdUQ7QUFDckQsV0FBTztBQUNMNUIsTUFBQUEsU0FBUyxFQUFFLElBRE47QUFFTHhWLE1BQUFBLEtBQUssRUFBRTJLO0FBRkYsS0FBUDtBQUlEOztBQUVELE1BQU0wTSwyQkFBMkIsR0FBR3ZCLHlCQUF5QixDQUFDNWUsT0FBRCxDQUE3RDtBQUVBLE1BQU1vZ0IsMEJBQTBCLEdBQUcsRUFBbkMsQ0ExR21ELENBMEdaOztBQUN2Q0QsRUFBQUEsMkJBQTJCLENBQUNwUCxPQUE1QixDQUFvQyxVQUFDc1AsT0FBRCxFQUFhO0FBQy9DLFFBQUlELDBCQUEwQixDQUFDdmpCLE9BQTNCLENBQW1Dd2pCLE9BQW5DLElBQThDLENBQWxELEVBQXFEO0FBQ25ERCxNQUFBQSwwQkFBMEIsQ0FBQ3RqQixJQUEzQixDQUFnQ3VqQixPQUFoQztBQUNEO0FBQ0YsR0FKRDtBQU1BLE1BQUlDLGVBQWUsR0FBRyxLQUF0QjtBQUNBLE1BQUlDLGFBQWEsR0FBRyxLQUFwQjtBQUNBLE1BQUlDLFFBQVEsR0FBRyxDQUFDLENBQWhCO0FBQ0EsTUFBSUMsWUFBWSxHQUFHLENBQUMsQ0FBcEI7QUFDQSxNQUFNQyxRQUFRLEdBQUd0ZixNQUFNLENBQUNvUixRQUF4Qjs7QUFySG1ELCtCQXdIN0NwUSxDQXhINkM7QUE0SGpELFFBQU12QyxPQUFPLEdBQUc2Z0IsUUFBUSxDQUFDdGUsQ0FBRCxDQUF4Qjs7QUFDQSxRQUFJdkMsT0FBTyxDQUFDTixRQUFSLEtBQXFCQyxJQUFJLENBQUNDLFlBQTlCLEVBQTRDO0FBQzFDO0FBQ0Q7O0FBQ0RnaEIsSUFBQUEsWUFBWSxJQUFJLENBQWhCOztBQUNBLFFBQUk1Z0IsT0FBTyxLQUFLUCxJQUFoQixFQUFzQjtBQUNwQmtoQixNQUFBQSxRQUFRLEdBQUdDLFlBQVg7QUFDQTtBQUNEOztBQUNELFFBQUlGLGFBQUosRUFBbUI7QUFDakI7QUFDRCxLQXZJZ0QsQ0F5SWpEOzs7QUFDQSxRQUFNSSxXQUFXLEdBQ2Q5Z0IsT0FBTyxDQUFDK2MsU0FBUixJQUFxQi9jLE9BQU8sQ0FBQytjLFNBQVIsQ0FBa0IzVixXQUFsQixFQUF0QixJQUNBcEgsT0FBTyxDQUFDNFQsUUFBUixDQUFpQnhNLFdBQWpCLEVBRkY7O0FBR0EsUUFBSTBaLFdBQVcsS0FBS2xOLFFBQXBCLEVBQThCO0FBQzVCO0FBQ0Q7O0FBQ0Q2TSxJQUFBQSxlQUFlLEdBQUcsSUFBbEI7QUFFQSxRQUFNTSxhQUFhLEdBQUcsRUFBdEI7QUFDQVIsSUFBQUEsMEJBQTBCLENBQUNyUCxPQUEzQixDQUFtQyxVQUFDc1AsT0FBRCxFQUFhO0FBQzlDTyxNQUFBQSxhQUFhLENBQUM5akIsSUFBZCxDQUFtQnVqQixPQUFuQjtBQUNELEtBRkQ7QUFHQSxRQUFJUSxpQkFBaUIsR0FBR0QsYUFBYSxDQUFDM2pCLE1BQXRDOztBQUVBLFFBQUk0akIsaUJBQWlCLEtBQUssQ0FBMUIsRUFBNkI7QUFDM0JOLE1BQUFBLGFBQWEsR0FBRyxJQUFoQjtBQUNBO0FBQ0Q7O0FBQ0QsUUFBTU8sdUJBQXVCLEdBQUdsQyx5QkFBeUIsQ0FBQy9lLE9BQUQsQ0FBekQ7QUFDQSxRQUFNa2hCLHNCQUFzQixHQUFHLEVBQS9CLENBN0ppRCxDQTZKZDs7QUFDbkNELElBQUFBLHVCQUF1QixDQUFDL1AsT0FBeEIsQ0FBZ0MsVUFBQ3NQLE9BQUQsRUFBYTtBQUMzQyxVQUFJVSxzQkFBc0IsQ0FBQ2xrQixPQUF2QixDQUErQndqQixPQUEvQixJQUEwQyxDQUE5QyxFQUFpRDtBQUMvQ1UsUUFBQUEsc0JBQXNCLENBQUNqa0IsSUFBdkIsQ0FBNEJ1akIsT0FBNUI7QUFDRDtBQUNGLEtBSkQ7O0FBTUEsOENBQTJCVSxzQkFBM0IsNkNBQW1EO0FBQTlDLFVBQU1DLFlBQVksNkJBQWxCO0FBQ0gsVUFBTUMsR0FBRyxHQUFHTCxhQUFhLENBQUMvakIsT0FBZCxDQUFzQm1rQixZQUF0QixDQUFaOztBQUNBLFVBQUlDLEdBQUcsR0FBRyxDQUFWLEVBQWE7QUFDWDtBQUNEOztBQUVETCxNQUFBQSxhQUFhLENBQUNwVixNQUFkLENBQXFCeVYsR0FBckIsRUFBMEIsQ0FBMUIsRUFOaUQsQ0FNbkI7O0FBRTlCLFVBQUksQ0FBQyxHQUFFSixpQkFBUCxFQUEwQjtBQUN4Qk4sUUFBQUEsYUFBYSxHQUFHLElBQWhCO0FBQ0E7QUFDRDtBQUNGO0FBaExnRDs7QUF1SG5ELE9BQ0UsSUFBSW5lLENBQUMsR0FBRyxDQURWLEVBRUUsQ0FBQ29lLFFBQVEsS0FBSyxDQUFDLENBQWQsSUFBbUIsQ0FBQ0QsYUFBckIsS0FBdUNuZSxDQUFDLEdBQUdzZSxRQUFRLENBQUN6akIsTUFGdEQsRUFHRSxFQUFFbUYsQ0FISixFQUlFO0FBQUEsdUJBSElBLENBR0o7O0FBQUEsOEJBK0JFO0FBdUJIOztBQUVELE1BQUk4ZSxNQUFNLEdBQUd6TixRQUFiOztBQUNBLE1BQ0VrTCxZQUFZLElBQ1psTCxRQUFRLEtBQUssT0FEYixJQUVBelQsT0FBTyxDQUFDMlQsWUFBUixDQUFxQixNQUFyQixDQUZBLElBR0EsQ0FBQzNULE9BQU8sQ0FBQzJULFlBQVIsQ0FBcUIsSUFBckIsQ0FIRCxJQUlBLENBQUMzVCxPQUFPLENBQUMyVCxZQUFSLENBQXFCLE9BQXJCLENBTEgsRUFNRTtBQUNBdU4sSUFBQUEsTUFBTSxJQUFJLFlBQVlsaEIsT0FBTyxDQUFDMlQsWUFBUixDQUFxQixNQUFyQixDQUFaLEdBQTJDLElBQXJEO0FBQ0Q7O0FBQ0QsTUFBSTRNLGFBQUosRUFBbUI7QUFDakJXLElBQUFBLE1BQU0sSUFBSSxpQkFBaUJWLFFBQVEsR0FBRyxDQUE1QixJQUFpQyxHQUEzQztBQUNELEdBRkQsTUFFTyxJQUFJRixlQUFKLEVBQXFCO0FBQUEsMERBQ0NGLDBCQUREO0FBQUE7O0FBQUE7QUFDMUIsZ0VBQXVEO0FBQUEsWUFBNUNlLFlBQTRDO0FBQ3JERCxRQUFBQSxNQUFNLElBQUksTUFBTTlCLHdCQUF3QixDQUFDK0IsWUFBWSxDQUFDQyxNQUFiLENBQW9CLENBQXBCLENBQUQsQ0FBeEM7QUFDRDtBQUh5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSTNCOztBQUVELFNBQU87QUFDTDlDLElBQUFBLFNBQVMsRUFBRSxLQUROO0FBRUx4VixJQUFBQSxLQUFLLEVBQUVvWTtBQUZGLEdBQVA7QUFJRDs7QUFFRCxTQUFTckQsVUFBVCxDQUFvQnZlLElBQXBCLEVBQTBCO0FBQ3hCO0FBQ0EsTUFBSUEsSUFBSSxDQUFDQyxRQUFMLEtBQWtCQyxJQUFJLENBQUNDLFlBQTNCLEVBQXlDO0FBQ3ZDLFdBQU9vQixTQUFQO0FBQ0Q7O0FBRUQsTUFBSXdnQixHQUFHLEdBQUcsRUFBVjtBQUVBLE1BQUlDLGNBQWMsR0FBR2hpQixJQUFyQjs7QUFDQSxTQUNFZ2lCLGNBQWMsQ0FBQ2hLLFVBQWYsSUFDQWdLLGNBQWMsQ0FBQ2hLLFVBQWYsQ0FBMEIvWCxRQUExQixLQUF1Q0MsSUFBSSxDQUFDQyxZQUY5QyxFQUdFO0FBQ0EsUUFBTThoQixXQUFXLEdBQUdwRCxnQkFBZ0IsQ0FBQ21ELGNBQUQsQ0FBcEM7O0FBQ0EsUUFBSSxDQUFDQyxXQUFMLEVBQWtCO0FBQ2hCLFVBQU1DLDRCQUE0QixHQUFHRixjQUFjLENBQUNoSyxVQUFmLENBQTBCOUUsUUFBL0Q7QUFDQSxVQUFJaVAsbUJBQW1CLEdBQUcsQ0FBQyxDQUEzQjs7QUFDQSxXQUFLLElBQUlyZixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHb2YsNEJBQTRCLENBQUN2a0IsTUFBakQsRUFBeURtRixDQUFDLEVBQTFELEVBQThEO0FBQzVELFlBQUlrZixjQUFjLEtBQUtFLDRCQUE0QixDQUFDcGYsQ0FBRCxDQUFuRCxFQUF3RDtBQUN0RHFmLFVBQUFBLG1CQUFtQixHQUFHcmYsQ0FBdEI7QUFDQTtBQUNEO0FBQ0Y7O0FBQ0QsVUFBSXFmLG1CQUFtQixJQUFJLENBQTNCLEVBQThCO0FBQzVCLFlBQU1DLFFBQVEsR0FBRyxDQUFDRCxtQkFBbUIsR0FBRyxDQUF2QixJQUE0QixDQUE3QztBQUNBSixRQUFBQSxHQUFHLEdBQ0RLLFFBQVEsSUFDUEosY0FBYyxDQUFDcGMsRUFBZixHQUFvQixNQUFNb2MsY0FBYyxDQUFDcGMsRUFBckIsR0FBMEIsR0FBOUMsR0FBb0QsRUFEN0MsQ0FBUixJQUVDbWMsR0FBRyxDQUFDcGtCLE1BQUosR0FBYSxNQUFNb2tCLEdBQW5CLEdBQXlCLEVBRjFCLENBREY7QUFJRDtBQUNGOztBQUNEQyxJQUFBQSxjQUFjLEdBQUdBLGNBQWMsQ0FBQ2hLLFVBQWhDO0FBQ0Q7O0FBRUQsU0FBTyxNQUFNK0osR0FBYjtBQUNEOztBQUVELFNBQVNNLGdCQUFULENBQTBCelksU0FBMUIsRUFBcUNrTyxLQUFyQyxFQUE0Q3dLLGtCQUE1QyxFQUFnRXBlLElBQWhFLEVBQXNFO0FBQ3BFLE1BQU1tYSxTQUFTLEdBQUdrRSxrQkFBa0IsQ0FBQzNZLFNBQUQsQ0FBcEM7QUFDQSxNQUFNNFksU0FBUyxhQUFNbkUsU0FBUyxDQUFDMEQsR0FBaEIsU0FBc0IxRCxTQUFTLENBQUNvRSxnQ0FBaEMsU0FBbUVwRSxTQUFTLENBQUNxRSxnQ0FBN0UsU0FBZ0hyRSxTQUFTLENBQUM5YSxXQUExSCxTQUF3SThhLFNBQVMsQ0FBQ3NFLDhCQUFsSixTQUFtTHRFLFNBQVMsQ0FBQ3VFLDhCQUE3TCxTQUE4TnZFLFNBQVMsQ0FBQzVhLFNBQXhPLENBQWY7O0FBRUEsTUFBTW9mLElBQUksR0FBR0MsbUJBQU8sQ0FBQyxJQUFELENBQXBCOztBQUNBLE1BQU1DLFNBQVMsR0FBR0YsSUFBSSxDQUFDRyxNQUFMLEdBQWMzUixNQUFkLENBQXFCbVIsU0FBckIsRUFBZ0NTLE1BQWhDLENBQXVDLEtBQXZDLENBQWxCO0FBRUEsTUFBSXJkLEVBQUo7O0FBQ0EsTUFBSTFCLElBQUksSUFBSXFSLHVCQUFaLEVBQXFDO0FBQ25DM1AsSUFBQUEsRUFBRSxHQUFHLGtCQUFrQm1kLFNBQXZCO0FBQ0QsR0FGRCxNQUVPO0FBQ0xuZCxJQUFBQSxFQUFFLEdBQUcsbUJBQW1CbWQsU0FBeEI7QUFDRDs7QUFFRDlHLEVBQUFBLGdCQUFnQixDQUFDclcsRUFBRCxDQUFoQjtBQUVBLE1BQU0rRCxTQUFTLEdBQUc7QUFDaEJtTyxJQUFBQSxLQUFLLEVBQUVBLEtBQUssR0FBR0EsS0FBSCxHQUFXbEIsd0JBRFA7QUFFaEJoUixJQUFBQSxFQUFFLEVBQUZBLEVBRmdCO0FBR2hCMGMsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFIZ0I7QUFJaEJqRSxJQUFBQSxTQUFTLEVBQVRBO0FBSmdCLEdBQWxCOztBQU1BbkksRUFBQUEsV0FBVyxDQUFDMVksSUFBWixDQUFpQm1NLFNBQWpCOztBQUNBdVosRUFBQUEsa0JBQWtCLENBQ2hCcmUsTUFEZ0IsRUFFaEI4RSxTQUZnQixFQUdoQnpGLElBQUksSUFBSXNSLHVCQUFSLEdBQWtDLElBQWxDLEdBQXlDLEtBSHpCLENBQWxCO0FBTUEsU0FBTzdMLFNBQVA7QUFDRDs7QUFFTSxTQUFTd1osZUFBVCxDQUF5QkMsYUFBekIsRUFBd0N0TCxLQUF4QyxFQUErQ3dLLGtCQUEvQyxFQUFtRTtBQUN4RSxTQUFPRCxnQkFBZ0IsQ0FDckJlLGFBRHFCLEVBRXJCdEwsS0FGcUIsRUFHckJ3SyxrQkFIcUIsRUFJckIvTSx1QkFKcUIsQ0FBdkI7QUFNRDtBQUVNLFNBQVM4TixnQkFBVCxDQUEwQnpkLEVBQTFCLEVBQThCO0FBQ25DLE1BQUk5QyxDQUFDLEdBQUcsQ0FBQyxDQUFUOztBQUVBLE1BQU02RyxTQUFTLEdBQUd1TSxXQUFXLENBQUMrQixJQUFaLENBQWlCLFVBQUNDLENBQUQsRUFBSWxNLENBQUosRUFBVTtBQUMzQ2xKLElBQUFBLENBQUMsR0FBR2tKLENBQUo7QUFDQSxXQUFPa00sQ0FBQyxDQUFDdFMsRUFBRixLQUFTQSxFQUFoQjtBQUNELEdBSGlCLENBQWxCOztBQUlBLE1BQUk5QyxDQUFDLElBQUlvVCxXQUFXLENBQUN2WSxNQUFyQixFQUE2QjtBQUU3QixNQUFJaU0sU0FBUyxHQUFHO0FBQ2RBLElBQUFBLFNBQVMsRUFBRWdWLGtCQUFrQixDQUFDalYsU0FBUyxDQUFDMFUsU0FBWDtBQURmLEdBQWhCO0FBSUEsU0FBT2dFLGdCQUFnQixDQUNyQnpZLFNBRHFCLEVBRXJCRCxTQUFTLENBQUNtTyxLQUZXLEVBR3JCLElBSHFCLEVBSXJCdEMsdUJBSnFCLENBQXZCO0FBTUQ7O0FBRUQsU0FBUzBOLGtCQUFULENBQTRCNUwsR0FBNUIsRUFBaUMzTixTQUFqQyxFQUE0Q2tTLGNBQTVDLEVBQTREO0FBQzFELE1BQU12WixRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjtBQUVBLE1BQU1naEIsS0FBSyxHQUNULEtBQ0NoTSxHQUFHLENBQUNpTSxRQUFKLElBQWdCak0sR0FBRyxDQUFDaU0sUUFBSixDQUFhQyxhQUE3QixHQUNHbE0sR0FBRyxDQUFDaU0sUUFBSixDQUFhRSxnQkFEaEIsR0FFRyxDQUhKLENBREY7QUFNQSxNQUFNcEwsYUFBYSxHQUFHQyxtQkFBbUIsQ0FBQ2hXLFFBQUQsQ0FBekM7QUFFQSxNQUFNWSxLQUFLLEdBQUd1YixnQkFBZ0IsQ0FBQ25jLFFBQUQsRUFBV3FILFNBQVMsQ0FBQzBVLFNBQXJCLENBQTlCOztBQUNBLE1BQUksQ0FBQ25iLEtBQUwsRUFBWTtBQUNWLFdBQU8zQixTQUFQO0FBQ0Q7O0FBRUQsTUFBTWlYLFNBQVMsR0FBR0MsV0FBVyxDQUFDblcsUUFBRCxDQUE3QjtBQUNBLE1BQU1vaEIsbUJBQW1CLEdBQUc5SCxlQUFlLENBQUN0RSxHQUFELEVBQU11RSxjQUFOLENBQTNDO0FBQ0EsTUFBTTdDLGVBQWUsR0FBRzFXLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBeEI7QUFFQXVTLEVBQUFBLGVBQWUsQ0FBQ3RTLFlBQWhCLENBQTZCLElBQTdCLEVBQW1DaUQsU0FBUyxDQUFDL0QsRUFBN0M7QUFDQW9ULEVBQUFBLGVBQWUsQ0FBQ3RTLFlBQWhCLENBQTZCLE9BQTdCLEVBQXNDK08seUJBQXRDO0FBRUFuVCxFQUFBQSxRQUFRLENBQUNtRCxJQUFULENBQWNrQixLQUFkLENBQW9CcUIsUUFBcEIsR0FBK0IsVUFBL0I7QUFDQWdSLEVBQUFBLGVBQWUsQ0FBQ3JTLEtBQWhCLENBQXNCTyxXQUF0QixDQUFrQyxnQkFBbEMsRUFBb0QsTUFBcEQ7O0FBQ0EsTUFBSXlDLFNBQVMsQ0FBQzJZLGtCQUFkLEVBQWtDO0FBQ2hDdEosSUFBQUEsZUFBZSxDQUFDdFMsWUFBaEIsQ0FBNkIsWUFBN0IsRUFBMkMsR0FBM0M7QUFDRDs7QUFFRCxNQUFNZ1MsUUFBUSxHQUFHcFcsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcUMscUJBQWQsRUFBakI7QUFDQSxNQUFNMFAsTUFBTSxHQUFHLENBQUNiLGFBQUQsSUFBa0JILE9BQWpDLENBOUIwRCxDQStCMUQ7O0FBQ0EsTUFBTW1OLGFBQWEsR0FBRyxLQUF0QjtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLEtBQTFCO0FBQ0EsTUFBTXpZLGtDQUFrQyxHQUFHd1ksYUFBYSxJQUFJQyxpQkFBNUQsQ0FsQzBELENBbUMxRDs7QUFDQSxNQUFNeFksV0FBVyxHQUFHRixpQ0FBdUIsQ0FDekNoSSxLQUR5QyxFQUV6Q2lJLGtDQUZ5QyxDQUEzQztBQUlBLE1BQUkwWSx1QkFBSjtBQUNBLE1BQU1DLGFBQWEsR0FBRyxDQUF0QjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLENBQTNCO0FBQ0EsTUFBTUMsMEJBQTBCLEdBQUcsQ0FBbkM7QUFDQSxNQUFNbk0sT0FBTyxHQUFHcEIsZ0NBQWhCO0FBQ0EsTUFBSXdOLEtBQUssR0FBRyxFQUFaO0FBQ0EsTUFBTUMsaUNBQWlDLEdBQ3JDQyxxQ0FBcUMsQ0FBQzdNLEdBQUQsRUFBTTNOLFNBQVMsQ0FBQy9ELEVBQWhCLENBRHZDO0FBR0EsTUFBSW9NLE9BQUo7QUFDQSxNQUFJQyxPQUFKO0FBQ0EsTUFBSW1TLGdCQUFKOztBQUVBLE1BQUl6TCxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixVQUExQixDQUFKLEVBQTJDO0FBQ3pDMlQsSUFBQUEsT0FBTyxHQUFHd0csU0FBUyxHQUFHLENBQUNILGFBQWEsQ0FBQ2pRLFVBQWxCLEdBQStCc1EsUUFBUSxDQUFDN1AsSUFBM0Q7QUFDQW9KLElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFDSCxhQUFhLENBQUNuUSxTQUFsQixHQUE4QndRLFFBQVEsQ0FBQ2hRLEdBQTFEO0FBQ0EwYixJQUFBQSxnQkFBZ0IsR0FDZGpkLFFBQVEsQ0FDTixDQUFDK2MsaUNBQWlDLENBQUNsWixLQUFsQyxHQUEwQ2dILE9BQTNDLElBQXNEbk4sTUFBTSxDQUFDaU4sVUFEdkQsQ0FBUixHQUVJLENBSE47QUFJRCxHQVBELE1BT08sSUFBSTZHLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLG1CQUExQixDQUFKLEVBQW9EO0FBQ3pEMlQsSUFBQUEsT0FBTyxHQUFHd0csU0FBUyxHQUFHLENBQUgsR0FBTyxDQUFDSCxhQUFhLENBQUNqUSxVQUF6QztBQUNBNkosSUFBQUEsT0FBTyxHQUFHdUcsU0FBUyxHQUFHLENBQUgsR0FBT0UsUUFBUSxDQUFDaFEsR0FBbkM7QUFDQTBiLElBQUFBLGdCQUFnQixHQUFHamQsUUFBUSxDQUN6QitjLGlDQUFpQyxDQUFDbFosS0FBbEMsR0FBMENuRyxNQUFNLENBQUNpTixVQUFqRCxHQUE4RCxDQURyQyxDQUEzQjtBQUdEOztBQWxFeUQsd0RBb0VqQzFHLFdBcEVpQztBQUFBOztBQUFBO0FBb0UxRCw4REFBc0M7QUFBQSxVQUEzQndILFVBQTJCOztBQUNwQyxVQUFJNEUsTUFBSixFQUFZO0FBQ1YsWUFBTTZNLGVBQWUsR0FBRyxDQUF4Qjs7QUFDQSxZQUFJLENBQUNSLHVCQUFMLEVBQThCO0FBQzVCQSxVQUFBQSx1QkFBdUIsR0FBR3ZoQixRQUFRLENBQUNnaUIsc0JBQVQsRUFBMUI7QUFDRDs7QUFDRCxZQUFNQyxvQkFBb0IsR0FBR2ppQixRQUFRLENBQUNraUIsZUFBVCxDQUMzQjVNLGlCQUQyQixFQUUzQixNQUYyQixDQUE3QjtBQUtBMk0sUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUFrQyxPQUFsQyxFQUEyQ2lQLG9CQUEzQztBQUNBNE8sUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUNFLE9BREYsc0JBRWVpRCxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUYvQixlQUV1Q3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZ2RCxlQUVpRW5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUZqRix5Q0FFb0hnQixPQUZwSDtBQUlBME0sUUFBQUEsb0JBQW9CLENBQUNqQixLQUFyQixHQUE2QkEsS0FBN0I7QUFFQTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVNLFlBQUl6SCxjQUFKLEVBQW9CO0FBQ2xCMEksVUFBQUEsb0JBQW9CLENBQUM5YixJQUFyQixHQUE0QjtBQUMxQnNDLFlBQUFBLE1BQU0sRUFBRWlNLGdCQURrQjtBQUNBO0FBQzFCbk8sWUFBQUEsSUFBSSxFQUFFaEUsTUFBTSxDQUFDaU4sVUFBUCxHQUFvQnNTLGdCQUFwQixHQUF1Q3BOLGdCQUZuQjtBQUcxQnRPLFlBQUFBLEdBQUcsRUFBRXdiLGlDQUFpQyxDQUFDeGIsR0FBbEMsR0FBd0N1SixPQUhuQjtBQUkxQmxMLFlBQUFBLEtBQUssRUFBRWlRO0FBSm1CLFdBQTVCO0FBTUQsU0FQRCxNQU9PO0FBQ0x1TixVQUFBQSxvQkFBb0IsQ0FBQzliLElBQXJCLEdBQTRCO0FBQzFCc0MsWUFBQUEsTUFBTSxFQUFFNkgsVUFBVSxDQUFDN0gsTUFETztBQUUxQmxDLFlBQUFBLElBQUksRUFBRStKLFVBQVUsQ0FBQy9KLElBQVgsR0FBa0JtSixPQUZFO0FBRzFCdEosWUFBQUEsR0FBRyxFQUFFa0ssVUFBVSxDQUFDbEssR0FBWCxHQUFpQnVKLE9BSEk7QUFJMUJsTCxZQUFBQSxLQUFLLEVBQUU2TCxVQUFVLENBQUM3TDtBQUpRLFdBQTVCO0FBTUQ7O0FBRUR3ZCxRQUFBQSxvQkFBb0IsQ0FBQzdkLFlBQXJCLENBQWtDLElBQWxDLFlBQTJDb2QsYUFBYSxHQUFHUixLQUEzRDtBQUNBaUIsUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUFrQyxJQUFsQyxZQUEyQ29kLGFBQWEsR0FBR1IsS0FBM0Q7QUFDQWlCLFFBQUFBLG9CQUFvQixDQUFDN2QsWUFBckIsQ0FDRSxHQURGLFlBRUssQ0FBQzZkLG9CQUFvQixDQUFDOWIsSUFBckIsQ0FBMEJJLElBQTFCLEdBQWlDd2IsZUFBbEMsSUFBcURmLEtBRjFEO0FBSUFpQixRQUFBQSxvQkFBb0IsQ0FBQzdkLFlBQXJCLENBQ0UsR0FERixZQUVLLENBQUM2ZCxvQkFBb0IsQ0FBQzliLElBQXJCLENBQTBCQyxHQUExQixHQUFnQzJiLGVBQWpDLElBQW9EZixLQUZ6RDtBQUlBaUIsUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUNFLFFBREYsWUFFSyxDQUFDNmQsb0JBQW9CLENBQUM5YixJQUFyQixDQUEwQnNDLE1BQTFCLEdBQW1Dc1osZUFBZSxHQUFHLENBQXRELElBQTJEZixLQUZoRTtBQUlBaUIsUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUNFLE9BREYsWUFFSyxDQUFDNmQsb0JBQW9CLENBQUM5YixJQUFyQixDQUEwQjFCLEtBQTFCLEdBQWtDc2QsZUFBZSxHQUFHLENBQXJELElBQTBEZixLQUYvRDtBQUlBTyxRQUFBQSx1QkFBdUIsQ0FBQy9jLFdBQXhCLENBQW9DeWQsb0JBQXBDOztBQUNBLFlBQUlaLGFBQUosRUFBbUI7QUFDakIsY0FBTWMsb0JBQW9CLEdBQUduaUIsUUFBUSxDQUFDa2lCLGVBQVQsQ0FDM0I1TSxpQkFEMkIsRUFFM0IsTUFGMkIsQ0FBN0I7QUFJQTJNLFVBQUFBLG9CQUFvQixDQUFDN2QsWUFBckIsQ0FBa0MsT0FBbEMsRUFBMkNpUCxvQkFBM0M7QUFDQThPLFVBQUFBLG9CQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxPQURGLGlEQUdJcWQsa0JBQWtCLEdBQUdULEtBSHpCLDJCQUltQjNaLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBSm5DLGVBSTJDcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBSjNELGVBS0luTixTQUFTLENBQUNtTyxLQUFWLENBQWdCakIsSUFMcEIsMkNBTW1DZ0IsT0FObkM7QUFRQTRNLFVBQUFBLG9CQUFvQixDQUFDbkIsS0FBckIsR0FBNkJBLEtBQTdCO0FBQ0E7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDUSxjQUFJekgsY0FBSixFQUFvQjtBQUNsQjRJLFlBQUFBLG9CQUFvQixDQUFDaGMsSUFBckIsR0FBNEI7QUFDMUJzQyxjQUFBQSxNQUFNLEVBQUVpTSxnQkFEa0I7QUFDQTtBQUMxQm5PLGNBQUFBLElBQUksRUFBRWhFLE1BQU0sQ0FBQ2lOLFVBQVAsR0FBb0JzUyxnQkFBcEIsR0FBdUNwTixnQkFGbkI7QUFHMUJ0TyxjQUFBQSxHQUFHLEVBQUV3YixpQ0FBaUMsQ0FBQ3hiLEdBQWxDLEdBQXdDdUosT0FIbkI7QUFJMUJsTCxjQUFBQSxLQUFLLEVBQUVpUTtBQUptQixhQUE1QjtBQU1ELFdBUEQsTUFPTztBQUNMeU4sWUFBQUEsb0JBQW9CLENBQUNoYyxJQUFyQixHQUE0QjtBQUMxQnNDLGNBQUFBLE1BQU0sRUFBRTZILFVBQVUsQ0FBQzdILE1BRE87QUFFMUJsQyxjQUFBQSxJQUFJLEVBQUUrSixVQUFVLENBQUMvSixJQUFYLEdBQWtCbUosT0FGRTtBQUcxQnRKLGNBQUFBLEdBQUcsRUFBRWtLLFVBQVUsQ0FBQ2xLLEdBQVgsR0FBaUJ1SixPQUhJO0FBSTFCbEwsY0FBQUEsS0FBSyxFQUFFNkwsVUFBVSxDQUFDN0w7QUFKUSxhQUE1QjtBQU1EOztBQUVELGNBQU0yZCxVQUFVLEdBQ2RELG9CQUFvQixDQUFDaGMsSUFBckIsQ0FBMEIxQixLQUExQixHQUFrQytjLGFBQWxDLEdBQWtEQSxhQUFsRCxHQUFrRSxDQURwRTtBQUVBVyxVQUFBQSxvQkFBb0IsQ0FBQy9kLFlBQXJCLENBQ0UsSUFERixZQUVLLENBQUMrZCxvQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCSSxJQUExQixHQUFpQzZiLFVBQWxDLElBQWdEcEIsS0FGckQ7QUFJQW1CLFVBQUFBLG9CQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxJQURGLFlBR0ksQ0FBQytkLG9CQUFvQixDQUFDaGMsSUFBckIsQ0FBMEJJLElBQTFCLEdBQ0M0YixvQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCMUIsS0FEM0IsR0FFQzJkLFVBRkYsSUFHQXBCLEtBTko7QUFTQSxjQUFNN1YsQ0FBQyxHQUNMLENBQUNnWCxvQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCQyxHQUExQixHQUNDK2Isb0JBQW9CLENBQUNoYyxJQUFyQixDQUEwQnNDLE1BRDNCLEdBRUNnWixrQkFBa0IsR0FBRyxDQUZ2QixJQUdBVCxLQUpGO0FBS0FtQixVQUFBQSxvQkFBb0IsQ0FBQy9kLFlBQXJCLENBQWtDLElBQWxDLFlBQTJDK0csQ0FBM0M7QUFDQWdYLFVBQUFBLG9CQUFvQixDQUFDL2QsWUFBckIsQ0FBa0MsSUFBbEMsWUFBMkMrRyxDQUEzQztBQUNBZ1gsVUFBQUEsb0JBQW9CLENBQUMvZCxZQUFyQixDQUNFLFFBREYsWUFFSytkLG9CQUFvQixDQUFDaGMsSUFBckIsQ0FBMEJzQyxNQUExQixHQUFtQ3VZLEtBRnhDO0FBSUFtQixVQUFBQSxvQkFBb0IsQ0FBQy9kLFlBQXJCLENBQ0UsT0FERixZQUVLK2Qsb0JBQW9CLENBQUNoYyxJQUFyQixDQUEwQjFCLEtBQTFCLEdBQWtDdWMsS0FGdkM7QUFJQU8sVUFBQUEsdUJBQXVCLENBQUMvYyxXQUF4QixDQUFvQzJkLG9CQUFwQztBQUNEOztBQUNELFlBQUliLGlCQUFKLEVBQXVCO0FBQ3JCLGNBQU1hLHFCQUFvQixHQUFHbmlCLFFBQVEsQ0FBQ2tpQixlQUFULENBQzNCNU0saUJBRDJCLEVBRTNCLE1BRjJCLENBQTdCOztBQUtBMk0sVUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUFrQyxPQUFsQyxFQUEyQ2lQLG9CQUEzQzs7QUFDQThPLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxPQURGLGdEQUdJc2QsMEJBQTBCLEdBQUdWLEtBSGpDLDJCQUltQjNaLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBSm5DLGVBSTJDcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBSjNELGVBS0luTixTQUFTLENBQUNtTyxLQUFWLENBQWdCakIsSUFMcEIsMkNBTW1DZ0IsT0FObkM7O0FBUUE0TSxVQUFBQSxxQkFBb0IsQ0FBQ25CLEtBQXJCLEdBQTZCQSxLQUE3QjtBQUVBO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRVEsY0FBSXpILGNBQUosRUFBb0I7QUFDbEI0SSxZQUFBQSxxQkFBb0IsQ0FBQ2hjLElBQXJCLEdBQTRCO0FBQzFCc0MsY0FBQUEsTUFBTSxFQUFFaU0sZ0JBRGtCO0FBQ0E7QUFDMUJuTyxjQUFBQSxJQUFJLEVBQUVoRSxNQUFNLENBQUNpTixVQUFQLEdBQW9Cc1MsZ0JBQXBCLEdBQXVDcE4sZ0JBRm5CO0FBRzFCdE8sY0FBQUEsR0FBRyxFQUFFd2IsaUNBQWlDLENBQUN4YixHQUFsQyxHQUF3Q3VKLE9BSG5CO0FBSTFCbEwsY0FBQUEsS0FBSyxFQUFFaVE7QUFKbUIsYUFBNUI7QUFNRCxXQVBELE1BT087QUFDTHlOLFlBQUFBLHFCQUFvQixDQUFDaGMsSUFBckIsR0FBNEI7QUFDMUJzQyxjQUFBQSxNQUFNLEVBQUU2SCxVQUFVLENBQUM3SCxNQURPO0FBRTFCbEMsY0FBQUEsSUFBSSxFQUFFK0osVUFBVSxDQUFDL0osSUFBWCxHQUFrQm1KLE9BRkU7QUFHMUJ0SixjQUFBQSxHQUFHLEVBQUVrSyxVQUFVLENBQUNsSyxHQUFYLEdBQWlCdUosT0FISTtBQUkxQmxMLGNBQUFBLEtBQUssRUFBRTZMLFVBQVUsQ0FBQzdMO0FBSlEsYUFBNUI7QUFNRDs7QUFFRDBkLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxJQURGLFlBRUsrZCxxQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCSSxJQUExQixHQUFpQ3lhLEtBRnRDOztBQUlBbUIsVUFBQUEscUJBQW9CLENBQUMvZCxZQUFyQixDQUNFLElBREYsWUFHSSxDQUFDK2QscUJBQW9CLENBQUNoYyxJQUFyQixDQUEwQkksSUFBMUIsR0FBaUM0YixxQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCMUIsS0FBNUQsSUFDQXVjLEtBSko7O0FBT0EsY0FBTW9CLFdBQVUsR0FBR0QscUJBQW9CLENBQUNoYyxJQUFyQixDQUEwQnNDLE1BQTFCLEdBQW1DLENBQXREOztBQUNBLGNBQU0wQyxFQUFDLEdBQUcsQ0FBQ2dYLHFCQUFvQixDQUFDaGMsSUFBckIsQ0FBMEJDLEdBQTFCLEdBQWdDZ2MsV0FBakMsSUFBK0NwQixLQUF6RDs7QUFDQW1CLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FBa0MsSUFBbEMsWUFBMkMrRyxFQUEzQzs7QUFDQWdYLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FBa0MsSUFBbEMsWUFBMkMrRyxFQUEzQzs7QUFDQWdYLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxRQURGLFlBRUsrZCxxQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCc0MsTUFBMUIsR0FBbUN1WSxLQUZ4Qzs7QUFJQW1CLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxPQURGLFlBRUsrZCxxQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCMUIsS0FBMUIsR0FBa0N1YyxLQUZ2Qzs7QUFJQU8sVUFBQUEsdUJBQXVCLENBQUMvYyxXQUF4QixDQUFvQzJkLHFCQUFwQztBQUNEO0FBQ0YsT0F2TUQsTUF1TU87QUFDTCxZQUFNaE4sYUFBYSxHQUFHblYsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixLQUF2QixDQUF0QjtBQUVBZ1IsUUFBQUEsYUFBYSxDQUFDL1EsWUFBZCxDQUEyQixPQUEzQixFQUFvQ2lQLG9CQUFwQzs7QUFFQSxZQUFJZ0IsYUFBSixFQUFtQjtBQUNqQixjQUFNZ08sR0FBRyxHQUFHem1CLElBQUksQ0FBQ3NJLEtBQUwsQ0FBVyxXQUFXdEksSUFBSSxDQUFDMG1CLE1BQUwsRUFBdEIsQ0FBWjtBQUNBLGNBQU1DLENBQUMsR0FBR0YsR0FBRyxJQUFJLEVBQWpCO0FBQ0EsY0FBTUcsQ0FBQyxHQUFJSCxHQUFHLElBQUksQ0FBUixHQUFhLEdBQXZCO0FBQ0EsY0FBTTdrQixDQUFDLEdBQUc2a0IsR0FBRyxHQUFHLEdBQWhCO0FBQ0FWLFVBQUFBLEtBQUssZ0NBQXlCWSxDQUF6QixlQUErQkMsQ0FBL0IsZUFBcUNobEIsQ0FBckMsdUVBQUw7QUFDRCxTQU5ELE1BTU87QUFDTCxjQUFJNmpCLGFBQUosRUFBbUI7QUFDakJNLFlBQUFBLEtBQUssNkJBQXNCRixrQkFBa0IsR0FBR1QsS0FBM0MsMkJBQ0gzWixTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQURiLGVBRUFwTixTQUFTLENBQUNtTyxLQUFWLENBQWdCaEIsS0FGaEIsZUFHSG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUhiLGVBSUFnQixPQUpBLGlCQUFMO0FBS0Q7QUFDRjs7QUFDREosUUFBQUEsYUFBYSxDQUFDL1EsWUFBZCxDQUNFLE9BREYsMkJBRW9Cb2QsYUFGcEIsbURBRTBFbmEsU0FBUyxDQUFDbU8sS0FBVixDQUFnQmYsR0FGMUYsZUFFa0dwTixTQUFTLENBQUNtTyxLQUFWLENBQWdCaEIsS0FGbEgsZUFFNEhuTixTQUFTLENBQUNtTyxLQUFWLENBQWdCakIsSUFGNUksZUFFcUpnQixPQUZySiwyQkFFNktvTSxLQUY3SztBQUlBeE0sUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQk8sV0FBcEIsQ0FBZ0MsZ0JBQWhDLEVBQWtELE1BQWxEO0FBQ0F1USxRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CcUIsUUFBcEIsR0FBK0J3USxTQUFTLEdBQUcsT0FBSCxHQUFhLFVBQXJEO0FBQ0FmLFFBQUFBLGFBQWEsQ0FBQzZMLEtBQWQsR0FBc0JBLEtBQXRCO0FBQ0E7QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDTSxZQUFJekgsY0FBSixFQUFvQjtBQUNsQnBFLFVBQUFBLGFBQWEsQ0FBQ2hQLElBQWQsR0FBcUI7QUFDbkJzQyxZQUFBQSxNQUFNLEVBQUVpTSxnQkFEVztBQUNPO0FBQzFCbk8sWUFBQUEsSUFBSSxFQUFFaEUsTUFBTSxDQUFDaU4sVUFBUCxHQUFvQnNTLGdCQUFwQixHQUF1Q3BOLGdCQUYxQjtBQUduQnRPLFlBQUFBLEdBQUcsRUFBRXdiLGlDQUFpQyxDQUFDeGIsR0FBbEMsR0FBd0N1SixPQUgxQjtBQUluQmxMLFlBQUFBLEtBQUssRUFBRWlRO0FBSlksV0FBckI7QUFNRCxTQVBELE1BT087QUFDTFMsVUFBQUEsYUFBYSxDQUFDaFAsSUFBZCxHQUFxQjtBQUNuQnNDLFlBQUFBLE1BQU0sRUFBRTZILFVBQVUsQ0FBQzdILE1BREE7QUFFbkJsQyxZQUFBQSxJQUFJLEVBQUUrSixVQUFVLENBQUMvSixJQUFYLEdBQWtCbUosT0FGTDtBQUduQnRKLFlBQUFBLEdBQUcsRUFBRWtLLFVBQVUsQ0FBQ2xLLEdBQVgsR0FBaUJ1SixPQUhIO0FBSW5CbEwsWUFBQUEsS0FBSyxFQUFFNkwsVUFBVSxDQUFDN0w7QUFKQyxXQUFyQjtBQU1EOztBQUVEMFEsUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQkksS0FBcEIsYUFBK0IwUSxhQUFhLENBQUNoUCxJQUFkLENBQW1CMUIsS0FBbkIsR0FBMkJ1YyxLQUExRDtBQUNBN0wsUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQm9FLE1BQXBCLGFBQWdDME0sYUFBYSxDQUFDaFAsSUFBZCxDQUFtQnNDLE1BQW5CLEdBQTRCdVksS0FBNUQ7QUFDQTdMLFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0JrQyxJQUFwQixhQUE4QjRPLGFBQWEsQ0FBQ2hQLElBQWQsQ0FBbUJJLElBQW5CLEdBQTBCeWEsS0FBeEQ7QUFDQTdMLFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0IrQixHQUFwQixhQUE2QitPLGFBQWEsQ0FBQ2hQLElBQWQsQ0FBbUJDLEdBQW5CLEdBQXlCNGEsS0FBdEQ7QUFDQXRLLFFBQUFBLGVBQWUsQ0FBQ2pHLE1BQWhCLENBQXVCMEUsYUFBdkI7O0FBQ0EsWUFBSSxDQUFDZCxhQUFELElBQWtCaU4saUJBQXRCLEVBQXlDO0FBQ3ZDO0FBQ0EsY0FBTW1CLGlCQUFpQixHQUFHemlCLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBMUI7QUFDQXNlLFVBQUFBLGlCQUFpQixDQUFDcmUsWUFBbEIsQ0FBK0IsT0FBL0IsRUFBd0NpUCxvQkFBeEM7QUFFQW9QLFVBQUFBLGlCQUFpQixDQUFDcmUsWUFBbEIsQ0FDRSxPQURGLG1DQUU0QmlELFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBRjVDLGVBRW9EcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBRnBFLGVBRThFbk4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmpCLElBRjlGLGVBRXVHZ0IsT0FGdkc7QUFJQWtOLFVBQUFBLGlCQUFpQixDQUFDcGUsS0FBbEIsQ0FBd0JPLFdBQXhCLENBQW9DLGdCQUFwQyxFQUFzRCxNQUF0RDtBQUNBNmQsVUFBQUEsaUJBQWlCLENBQUNwZSxLQUFsQixDQUF3QnFCLFFBQXhCLEdBQW1Dd1EsU0FBUyxHQUFHLE9BQUgsR0FBYSxVQUF6RDtBQUNBdU0sVUFBQUEsaUJBQWlCLENBQUN6QixLQUFsQixHQUEwQkEsS0FBMUI7QUFDQTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVRLGNBQUl6SCxjQUFKLEVBQW9CO0FBQ2xCa0osWUFBQUEsaUJBQWlCLENBQUN0YyxJQUFsQixHQUF5QjtBQUN2QnNDLGNBQUFBLE1BQU0sRUFBRWlNLGdCQURlO0FBQ0c7QUFDMUJuTyxjQUFBQSxJQUFJLEVBQUVoRSxNQUFNLENBQUNpTixVQUFQLEdBQW9Cc1MsZ0JBQXBCLEdBQXVDcE4sZ0JBRnRCO0FBR3ZCdE8sY0FBQUEsR0FBRyxFQUFFd2IsaUNBQWlDLENBQUN4YixHQUFsQyxHQUF3Q3VKLE9BSHRCO0FBSXZCbEwsY0FBQUEsS0FBSyxFQUFFaVE7QUFKZ0IsYUFBekI7QUFNRCxXQVBELE1BT087QUFDTCtOLFlBQUFBLGlCQUFpQixDQUFDdGMsSUFBbEIsR0FBeUI7QUFDdkJzQyxjQUFBQSxNQUFNLEVBQUU2SCxVQUFVLENBQUM3SCxNQURJO0FBRXZCbEMsY0FBQUEsSUFBSSxFQUFFK0osVUFBVSxDQUFDL0osSUFBWCxHQUFrQm1KLE9BRkQ7QUFHdkJ0SixjQUFBQSxHQUFHLEVBQUVrSyxVQUFVLENBQUNsSyxHQUFYLEdBQWlCdUosT0FIQztBQUl2QmxMLGNBQUFBLEtBQUssRUFBRTZMLFVBQVUsQ0FBQzdMO0FBSkssYUFBekI7QUFNRDs7QUFFRGdlLFVBQUFBLGlCQUFpQixDQUFDcGUsS0FBbEIsQ0FBd0JJLEtBQXhCLGFBQ0VnZSxpQkFBaUIsQ0FBQ3RjLElBQWxCLENBQXVCMUIsS0FBdkIsR0FBK0J1YyxLQURqQztBQUdBeUIsVUFBQUEsaUJBQWlCLENBQUNwZSxLQUFsQixDQUF3Qm9FLE1BQXhCLGFBQ0VpWiwwQkFBMEIsR0FBR1YsS0FEL0I7QUFHQXlCLFVBQUFBLGlCQUFpQixDQUFDcGUsS0FBbEIsQ0FBd0JrQyxJQUF4QixhQUNFa2MsaUJBQWlCLENBQUN0YyxJQUFsQixDQUF1QkksSUFBdkIsR0FBOEJ5YSxLQURoQztBQUdBeUIsVUFBQUEsaUJBQWlCLENBQUNwZSxLQUFsQixDQUF3QitCLEdBQXhCLGFBQ0UsQ0FBQ3FjLGlCQUFpQixDQUFDdGMsSUFBbEIsQ0FBdUJDLEdBQXZCLEdBQ0NxYyxpQkFBaUIsQ0FBQ3RjLElBQWxCLENBQXVCc0MsTUFBdkIsR0FBZ0MsQ0FEakMsR0FFQ2laLDBCQUEwQixHQUFHLENBRi9CLElBR0FWLEtBSkY7QUFNQXRLLFVBQUFBLGVBQWUsQ0FBQ2pHLE1BQWhCLENBQXVCZ1MsaUJBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJbEosY0FBSixFQUFvQjtBQUNsQjtBQUNEO0FBQ0Y7QUEvWHlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBaVkxRCxNQUFJckUsTUFBTSxJQUFJcU0sdUJBQWQsRUFBdUM7QUFDckMsUUFBTW1CLGdCQUFnQixHQUFHMWlCLFFBQVEsQ0FBQ2tpQixlQUFULENBQXlCNU0saUJBQXpCLEVBQTRDLEtBQTVDLENBQXpCO0FBQ0FvTixJQUFBQSxnQkFBZ0IsQ0FBQ3RlLFlBQWpCLENBQThCLGdCQUE5QixFQUFnRCxNQUFoRDtBQUNBc2UsSUFBQUEsZ0JBQWdCLENBQUNyZSxLQUFqQixDQUF1QnFCLFFBQXZCLEdBQWtDd1EsU0FBUyxHQUFHLE9BQUgsR0FBYSxVQUF4RDtBQUNBd00sSUFBQUEsZ0JBQWdCLENBQUNyZSxLQUFqQixDQUF1QnNlLFFBQXZCLEdBQWtDLFNBQWxDO0FBQ0FELElBQUFBLGdCQUFnQixDQUFDcmUsS0FBakIsQ0FBdUJrQyxJQUF2QixHQUE4QixHQUE5QjtBQUNBbWMsSUFBQUEsZ0JBQWdCLENBQUNyZSxLQUFqQixDQUF1QitCLEdBQXZCLEdBQTZCLEdBQTdCO0FBQ0FzYyxJQUFBQSxnQkFBZ0IsQ0FBQ2pTLE1BQWpCLENBQXdCOFEsdUJBQXhCO0FBQ0E3SyxJQUFBQSxlQUFlLENBQUNqRyxNQUFoQixDQUF1QmlTLGdCQUF2QjtBQUNEOztBQUVELE1BQU03TixpQkFBaUIsR0FBRzdVLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBMUI7O0FBRUEsTUFBSW9WLGNBQUosRUFBb0I7QUFDbEIxRSxJQUFBQSxpQkFBaUIsQ0FBQ3pRLFlBQWxCLENBQStCLE9BQS9CLEVBQXdDb1AsOEJBQXhDO0FBQ0FxQixJQUFBQSxpQkFBaUIsQ0FBQ3pRLFlBQWxCLENBQ0UsT0FERiwyQkFFb0JvZCxhQUZwQixtREFFMEVuYSxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUYxRixlQUVrR3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZsSCxlQUU0SG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUY1SSxlQUVxSmdCLE9BRnJKLDJCQUU2S29NLEtBRjdLO0FBSUQsR0FORCxNQU1PO0FBQ0w5TSxJQUFBQSxpQkFBaUIsQ0FBQ3pRLFlBQWxCLENBQStCLE9BQS9CLEVBQXdDbVAsNkJBQXhDO0FBQ0Q7O0FBRURzQixFQUFBQSxpQkFBaUIsQ0FBQ3hRLEtBQWxCLENBQXdCTyxXQUF4QixDQUFvQyxnQkFBcEMsRUFBc0QsTUFBdEQ7QUFDQWlRLEVBQUFBLGlCQUFpQixDQUFDeFEsS0FBbEIsQ0FBd0JxQixRQUF4QixHQUFtQ3dRLFNBQVMsR0FBRyxPQUFILEdBQWEsVUFBekQ7QUFDQXJCLEVBQUFBLGlCQUFpQixDQUFDbU0sS0FBbEIsR0FBMEJBLEtBQTFCOztBQUVBLE1BQUkzTSxhQUFKLEVBQW1CO0FBQ2pCUSxJQUFBQSxpQkFBaUIsQ0FBQ3pRLFlBQWxCLENBQ0UsT0FERjtBQUlEOztBQUVELE1BQUltVixjQUFKLEVBQW9CO0FBQ2xCMUUsSUFBQUEsaUJBQWlCLENBQUMxTyxJQUFsQixHQUF5QjtBQUN2QnNDLE1BQUFBLE1BQU0sRUFBRWlNLGdCQURlO0FBQ0c7QUFDMUJuTyxNQUFBQSxJQUFJLEVBQUVoRSxNQUFNLENBQUNpTixVQUFQLEdBQW9Cc1MsZ0JBQXBCLEdBQXVDcE4sZ0JBRnRCO0FBR3ZCdE8sTUFBQUEsR0FBRyxFQUFFd2IsaUNBQWlDLENBQUN4YixHQUFsQyxHQUF3Q3VKLE9BSHRCO0FBSXZCbEwsTUFBQUEsS0FBSyxFQUFFaVE7QUFKZ0IsS0FBekI7QUFNRCxHQVBELE1BT087QUFDTCxRQUFNa08sdUJBQXVCLEdBQUdoaUIsS0FBSyxDQUFDNEUscUJBQU4sRUFBaEM7QUFDQXFQLElBQUFBLGlCQUFpQixDQUFDMU8sSUFBbEIsR0FBeUI7QUFDdkJzQyxNQUFBQSxNQUFNLEVBQUVtYSx1QkFBdUIsQ0FBQ25hLE1BRFQ7QUFFdkJsQyxNQUFBQSxJQUFJLEVBQUVxYyx1QkFBdUIsQ0FBQ3JjLElBQXhCLEdBQStCbUosT0FGZDtBQUd2QnRKLE1BQUFBLEdBQUcsRUFBRXdjLHVCQUF1QixDQUFDeGMsR0FBeEIsR0FBOEJ1SixPQUhaO0FBSXZCbEwsTUFBQUEsS0FBSyxFQUFFbWUsdUJBQXVCLENBQUNuZTtBQUpSLEtBQXpCO0FBTUQ7O0FBRURvUSxFQUFBQSxpQkFBaUIsQ0FBQ3hRLEtBQWxCLENBQXdCSSxLQUF4QixhQUFtQ29RLGlCQUFpQixDQUFDMU8sSUFBbEIsQ0FBdUIxQixLQUF2QixHQUErQnVjLEtBQWxFO0FBQ0FuTSxFQUFBQSxpQkFBaUIsQ0FBQ3hRLEtBQWxCLENBQXdCb0UsTUFBeEIsYUFBb0NvTSxpQkFBaUIsQ0FBQzFPLElBQWxCLENBQXVCc0MsTUFBdkIsR0FBZ0N1WSxLQUFwRTtBQUNBbk0sRUFBQUEsaUJBQWlCLENBQUN4USxLQUFsQixDQUF3QmtDLElBQXhCLGFBQWtDc08saUJBQWlCLENBQUMxTyxJQUFsQixDQUF1QkksSUFBdkIsR0FBOEJ5YSxLQUFoRTtBQUNBbk0sRUFBQUEsaUJBQWlCLENBQUN4USxLQUFsQixDQUF3QitCLEdBQXhCLGFBQWlDeU8saUJBQWlCLENBQUMxTyxJQUFsQixDQUF1QkMsR0FBdkIsR0FBNkI0YSxLQUE5RDtBQUVBdEssRUFBQUEsZUFBZSxDQUFDakcsTUFBaEIsQ0FBdUJvRSxpQkFBdkI7QUFDQXVNLEVBQUFBLG1CQUFtQixDQUFDM1EsTUFBcEIsQ0FBMkJpRyxlQUEzQjtBQUVBLFNBQU9BLGVBQVA7QUFDRDs7QUFFRCxTQUFTaUYsa0JBQVQsQ0FBNEJrSCxTQUE1QixFQUF1QzVoQixXQUF2QyxFQUFvRDZoQixPQUFwRCxFQUE2RDNoQixTQUE3RCxFQUF3RTtBQUN0RSxNQUFNUCxLQUFLLEdBQUcsSUFBSUMsS0FBSixFQUFkO0FBQ0FELEVBQUFBLEtBQUssQ0FBQ0UsUUFBTixDQUFlK2hCLFNBQWYsRUFBMEI1aEIsV0FBMUI7QUFDQUwsRUFBQUEsS0FBSyxDQUFDRyxNQUFOLENBQWEraEIsT0FBYixFQUFzQjNoQixTQUF0Qjs7QUFDQSxNQUFJLENBQUNQLEtBQUssQ0FBQ2tiLFNBQVgsRUFBc0I7QUFDcEIsV0FBT2xiLEtBQVA7QUFDRDs7QUFDRG9YLEVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSxxREFBWjtBQUNBLE1BQU1nYixZQUFZLEdBQUcsSUFBSWxpQixLQUFKLEVBQXJCO0FBQ0FraUIsRUFBQUEsWUFBWSxDQUFDamlCLFFBQWIsQ0FBc0JnaUIsT0FBdEIsRUFBK0IzaEIsU0FBL0I7QUFDQTRoQixFQUFBQSxZQUFZLENBQUNoaUIsTUFBYixDQUFvQjhoQixTQUFwQixFQUErQjVoQixXQUEvQjs7QUFDQSxNQUFJLENBQUM4aEIsWUFBWSxDQUFDakgsU0FBbEIsRUFBNkI7QUFDM0I5RCxJQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksMENBQVo7QUFDQSxXQUFPbkgsS0FBUDtBQUNEOztBQUNEb1gsRUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLHVEQUFaO0FBQ0EsU0FBTzlJLFNBQVA7QUFDRDs7QUFFRCxTQUFTK2MsWUFBVCxDQUFzQnBiLEtBQXRCLEVBQTZCeWIsY0FBN0IsRUFBNkMyRyxpQkFBN0MsRUFBZ0U7QUFDOUQsTUFBTUMsY0FBYyxHQUFHcmlCLEtBQUssQ0FBQ0ksY0FBTixDQUFxQnJELFFBQXJCLEtBQWtDQyxJQUFJLENBQUNDLFlBQTlEO0FBQ0EsTUFBTXFsQixxQkFBcUIsR0FBR0QsY0FBYyxHQUN4Q3JpQixLQUFLLENBQUNJLGNBRGtDLEdBRXhDSixLQUFLLENBQUNJLGNBQU4sQ0FBcUIwVSxVQUFyQixJQUNBOVUsS0FBSyxDQUFDSSxjQUFOLENBQXFCMFUsVUFBckIsQ0FBZ0MvWCxRQUFoQyxLQUE2Q0MsSUFBSSxDQUFDQyxZQURsRCxHQUVBK0MsS0FBSyxDQUFDSSxjQUFOLENBQXFCMFUsVUFGckIsR0FHQXpXLFNBTEo7O0FBTUEsTUFBSSxDQUFDaWtCLHFCQUFMLEVBQTRCO0FBQzFCLFdBQU9qa0IsU0FBUDtBQUNEOztBQUNELE1BQU1taEIsZ0NBQWdDLEdBQUc2QyxjQUFjLEdBQ25ELENBQUMsQ0FEa0QsR0FFbkRqYixLQUFLLENBQUNnRCxJQUFOLENBQVdrWSxxQkFBcUIsQ0FBQzNpQixVQUFqQyxFQUE2Q3RGLE9BQTdDLENBQ0UyRixLQUFLLENBQUNJLGNBRFIsQ0FGSjs7QUFLQSxNQUFJb2YsZ0NBQWdDLEdBQUcsQ0FBQyxDQUF4QyxFQUEyQztBQUN6QyxXQUFPbmhCLFNBQVA7QUFDRDs7QUFDRCxNQUFNa2hCLGdDQUFnQyxHQUFHOUQsY0FBYyxDQUNyRDZHLHFCQURxRCxDQUF2RDtBQUdBLE1BQU1DLFlBQVksR0FBR3ZpQixLQUFLLENBQUNNLFlBQU4sQ0FBbUJ2RCxRQUFuQixLQUFnQ0MsSUFBSSxDQUFDQyxZQUExRDtBQUNBLE1BQU11bEIsbUJBQW1CLEdBQUdELFlBQVksR0FDcEN2aUIsS0FBSyxDQUFDTSxZQUQ4QixHQUVwQ04sS0FBSyxDQUFDTSxZQUFOLENBQW1Cd1UsVUFBbkIsSUFDQTlVLEtBQUssQ0FBQ00sWUFBTixDQUFtQndVLFVBQW5CLENBQThCL1gsUUFBOUIsS0FBMkNDLElBQUksQ0FBQ0MsWUFEaEQsR0FFQStDLEtBQUssQ0FBQ00sWUFBTixDQUFtQndVLFVBRm5CLEdBR0F6VyxTQUxKOztBQU1BLE1BQUksQ0FBQ21rQixtQkFBTCxFQUEwQjtBQUN4QixXQUFPbmtCLFNBQVA7QUFDRDs7QUFDRCxNQUFNcWhCLDhCQUE4QixHQUFHNkMsWUFBWSxHQUMvQyxDQUFDLENBRDhDLEdBRS9DbmIsS0FBSyxDQUFDZ0QsSUFBTixDQUFXb1ksbUJBQW1CLENBQUM3aUIsVUFBL0IsRUFBMkN0RixPQUEzQyxDQUFtRDJGLEtBQUssQ0FBQ00sWUFBekQsQ0FGSjs7QUFHQSxNQUFJb2YsOEJBQThCLEdBQUcsQ0FBQyxDQUF0QyxFQUF5QztBQUN2QyxXQUFPcmhCLFNBQVA7QUFDRDs7QUFDRCxNQUFNb2hCLDhCQUE4QixHQUFHaEUsY0FBYyxDQUFDK0csbUJBQUQsQ0FBckQ7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRy9JLHdCQUF3QixDQUNwRDFaLEtBQUssQ0FBQ0ksY0FEOEMsRUFFcERKLEtBQUssQ0FBQ00sWUFGOEMsQ0FBdEQ7O0FBSUEsTUFBSSxDQUFDbWlCLHFCQUFMLEVBQTRCO0FBQzFCckwsSUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLGdDQUFaO0FBQ0EsV0FBTzlJLFNBQVA7QUFDRDs7QUFDRCxNQUFJMkIsS0FBSyxDQUFDMGlCLHVCQUFWLEVBQW1DO0FBQ2pDLFFBQU1DLDBCQUEwQixHQUM5QjNpQixLQUFLLENBQUMwaUIsdUJBQU4sQ0FBOEIzbEIsUUFBOUIsS0FBMkNDLElBQUksQ0FBQ0MsWUFBaEQsR0FDSStDLEtBQUssQ0FBQzBpQix1QkFEVixHQUVJMWlCLEtBQUssQ0FBQzBpQix1QkFBTixDQUE4QjVOLFVBSHBDOztBQUlBLFFBQ0U2TiwwQkFBMEIsSUFDMUJBLDBCQUEwQixDQUFDNWxCLFFBQTNCLEtBQXdDQyxJQUFJLENBQUNDLFlBRi9DLEVBR0U7QUFDQSxVQUFJd2xCLHFCQUFxQixLQUFLRSwwQkFBOUIsRUFBMEQ7QUFDeER2TCxRQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksMENBQVo7QUFDQWlRLFFBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWXNVLGNBQWMsQ0FBQ2dILHFCQUFELENBQTFCO0FBQ0FyTCxRQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVlzVSxjQUFjLENBQUNrSCwwQkFBRCxDQUExQjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxNQUFNQyxjQUFjLEdBQUdSLGlCQUFpQixDQUFDSyxxQkFBRCxDQUF4QztBQUNBLE1BQU1JLGVBQWUsR0FBR1QsaUJBQWlCLENBQUNFLHFCQUFELENBQXpDO0FBQ0EsTUFBTVEsYUFBYSxHQUFHVixpQkFBaUIsQ0FBQ0ksbUJBQUQsQ0FBdkM7QUFDQSxNQUFJM0QsR0FBSjs7QUFDQSxNQUFJK0QsY0FBYyxJQUFJQyxlQUFsQixJQUFxQ0MsYUFBekMsRUFBd0Q7QUFDdEQsUUFBSUMscUJBQXFCLEdBQUdGLGVBQTVCOztBQUNBLFFBQUksQ0FBQ1IsY0FBTCxFQUFxQjtBQUNuQixVQUFNVyxzQ0FBc0MsR0FBRzdKLHdCQUF3QixDQUNyRW1KLHFCQURxRSxFQUVyRXRpQixLQUFLLENBQUNJLGNBRitELENBQXZFO0FBSUEyaUIsTUFBQUEscUJBQXFCLEdBQ25CRixlQUFlLEdBQ2YsR0FEQSxHQUVBRyxzQ0FGQSxHQUdBLEdBSEEsR0FJQWhqQixLQUFLLENBQUNLLFdBTFI7QUFNRCxLQVhELE1BV087QUFDTCxVQUNFTCxLQUFLLENBQUNLLFdBQU4sSUFBcUIsQ0FBckIsSUFDQUwsS0FBSyxDQUFDSyxXQUFOLEdBQW9CaWlCLHFCQUFxQixDQUFDM2lCLFVBQXRCLENBQWlDbEYsTUFGdkQsRUFHRTtBQUNBLFlBQU0rZSxTQUFTLEdBQUc4SSxxQkFBcUIsQ0FBQzNpQixVQUF0QixDQUFpQ0ssS0FBSyxDQUFDSyxXQUF2QyxDQUFsQjs7QUFDQSxZQUFJbVosU0FBUyxDQUFDemMsUUFBVixLQUF1QkMsSUFBSSxDQUFDQyxZQUFoQyxFQUE4QztBQUM1QzhsQixVQUFBQSxxQkFBcUIsR0FDbkJGLGVBQWUsR0FBRyxHQUFsQixHQUF3QixDQUFDN2lCLEtBQUssQ0FBQ0ssV0FBTixHQUFvQixDQUFyQixJQUEwQixDQURwRDtBQUVELFNBSEQsTUFHTztBQUNMLGNBQU00aUIsZ0JBQWdCLEdBQUc5Six3QkFBd0IsQ0FDL0NtSixxQkFEK0MsRUFFL0M5SSxTQUYrQyxDQUFqRDtBQUlBdUosVUFBQUEscUJBQXFCLEdBQUdGLGVBQWUsR0FBRyxHQUFsQixHQUF3QkksZ0JBQWhEO0FBQ0Q7QUFDRixPQWZELE1BZU87QUFDTCxZQUFNQyxxQkFBcUIsR0FDekJaLHFCQUFxQixDQUFDYSxpQkFBdEIsR0FBMEMsQ0FENUM7QUFFQSxZQUFNQyxhQUFhLEdBQ2pCZCxxQkFBcUIsQ0FBQzNpQixVQUF0QixDQUNFMmlCLHFCQUFxQixDQUFDM2lCLFVBQXRCLENBQWlDbEYsTUFBakMsR0FBMEMsQ0FENUMsQ0FERjs7QUFJQSxZQUFJMm9CLGFBQWEsQ0FBQ3JtQixRQUFkLEtBQTJCQyxJQUFJLENBQUNDLFlBQXBDLEVBQWtEO0FBQ2hEOGxCLFVBQUFBLHFCQUFxQixHQUNuQkYsZUFBZSxHQUFHLEdBQWxCLElBQXlCSyxxQkFBcUIsR0FBRyxDQUFqRCxDQURGO0FBRUQsU0FIRCxNQUdPO0FBQ0xILFVBQUFBLHFCQUFxQixHQUNuQkYsZUFBZSxHQUFHLEdBQWxCLElBQXlCSyxxQkFBcUIsR0FBRyxDQUFqRCxDQURGO0FBRUQ7QUFDRjtBQUNGOztBQUNELFFBQUlHLG1CQUFtQixHQUFHUCxhQUExQjs7QUFDQSxRQUFJLENBQUNQLFlBQUwsRUFBbUI7QUFDakIsVUFBTWUsb0NBQW9DLEdBQUduSyx3QkFBd0IsQ0FDbkVxSixtQkFEbUUsRUFFbkV4aUIsS0FBSyxDQUFDTSxZQUY2RCxDQUFyRTtBQUlBK2lCLE1BQUFBLG1CQUFtQixHQUNqQlAsYUFBYSxHQUNiLEdBREEsR0FFQVEsb0NBRkEsR0FHQSxHQUhBLEdBSUF0akIsS0FBSyxDQUFDTyxTQUxSO0FBTUQsS0FYRCxNQVdPO0FBQ0wsVUFDRVAsS0FBSyxDQUFDTyxTQUFOLElBQW1CLENBQW5CLElBQ0FQLEtBQUssQ0FBQ08sU0FBTixHQUFrQmlpQixtQkFBbUIsQ0FBQzdpQixVQUFwQixDQUErQmxGLE1BRm5ELEVBR0U7QUFDQSxZQUFNK2UsVUFBUyxHQUFHZ0osbUJBQW1CLENBQUM3aUIsVUFBcEIsQ0FBK0JLLEtBQUssQ0FBQ08sU0FBckMsQ0FBbEI7O0FBQ0EsWUFBSWlaLFVBQVMsQ0FBQ3pjLFFBQVYsS0FBdUJDLElBQUksQ0FBQ0MsWUFBaEMsRUFBOEM7QUFDNUNvbUIsVUFBQUEsbUJBQW1CLEdBQUdQLGFBQWEsR0FBRyxHQUFoQixHQUFzQixDQUFDOWlCLEtBQUssQ0FBQ08sU0FBTixHQUFrQixDQUFuQixJQUF3QixDQUFwRTtBQUNELFNBRkQsTUFFTztBQUNMLGNBQU0waUIsaUJBQWdCLEdBQUc5Six3QkFBd0IsQ0FDL0NxSixtQkFEK0MsRUFFL0NoSixVQUYrQyxDQUFqRDs7QUFJQTZKLFVBQUFBLG1CQUFtQixHQUFHUCxhQUFhLEdBQUcsR0FBaEIsR0FBc0JHLGlCQUE1QztBQUNEO0FBQ0YsT0FkRCxNQWNPO0FBQ0wsWUFBTUMsc0JBQXFCLEdBQUdWLG1CQUFtQixDQUFDVyxpQkFBcEIsR0FBd0MsQ0FBdEU7O0FBQ0EsWUFBTUMsY0FBYSxHQUNqQlosbUJBQW1CLENBQUM3aUIsVUFBcEIsQ0FDRTZpQixtQkFBbUIsQ0FBQzdpQixVQUFwQixDQUErQmxGLE1BQS9CLEdBQXdDLENBRDFDLENBREY7O0FBSUEsWUFBSTJvQixjQUFhLENBQUNybUIsUUFBZCxLQUEyQkMsSUFBSSxDQUFDQyxZQUFwQyxFQUFrRDtBQUNoRG9tQixVQUFBQSxtQkFBbUIsR0FDakJQLGFBQWEsR0FBRyxHQUFoQixJQUF1Qkksc0JBQXFCLEdBQUcsQ0FBL0MsQ0FERjtBQUVELFNBSEQsTUFHTztBQUNMRyxVQUFBQSxtQkFBbUIsR0FDakJQLGFBQWEsR0FBRyxHQUFoQixJQUF1Qkksc0JBQXFCLEdBQUcsQ0FBL0MsQ0FERjtBQUVEO0FBQ0Y7QUFDRjs7QUFDRHJFLElBQUFBLEdBQUcsR0FDRCtELGNBQWMsR0FDZCxHQURBLEdBRUFHLHFCQUFxQixDQUFDckksT0FBdEIsQ0FBOEJrSSxjQUE5QixFQUE4QyxFQUE5QyxDQUZBLEdBR0EsR0FIQSxHQUlBUyxtQkFBbUIsQ0FBQzNJLE9BQXBCLENBQTRCa0ksY0FBNUIsRUFBNEMsRUFBNUMsQ0FMRjtBQU1EOztBQUNELFNBQU87QUFDTC9ELElBQUFBLEdBQUcsRUFBSEEsR0FESztBQUVMYSxJQUFBQSw4QkFBOEIsRUFBOUJBLDhCQUZLO0FBR0xELElBQUFBLDhCQUE4QixFQUE5QkEsOEJBSEs7QUFJTGxmLElBQUFBLFNBQVMsRUFBRVAsS0FBSyxDQUFDTyxTQUpaO0FBS0xpZixJQUFBQSxnQ0FBZ0MsRUFBaENBLGdDQUxLO0FBTUxELElBQUFBLGdDQUFnQyxFQUFoQ0EsZ0NBTks7QUFPTGxmLElBQUFBLFdBQVcsRUFBRUwsS0FBSyxDQUFDSztBQVBkLEdBQVA7QUFTRDs7QUFFRCxTQUFTa2IsZ0JBQVQsQ0FBMEJuYyxRQUExQixFQUFvQytiLFNBQXBDLEVBQStDO0FBQzdDLE1BQU1vSSxZQUFZLEdBQUdua0IsUUFBUSxDQUFDd0gsYUFBVCxDQUNuQnVVLFNBQVMsQ0FBQ29FLGdDQURTLENBQXJCOztBQUdBLE1BQUksQ0FBQ2dFLFlBQUwsRUFBbUI7QUFDakJuTSxJQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksc0RBQVo7QUFDQSxXQUFPOUksU0FBUDtBQUNEOztBQUNELE1BQUkrQixjQUFjLEdBQUdtakIsWUFBckI7O0FBQ0EsTUFBSXBJLFNBQVMsQ0FBQ3FFLGdDQUFWLElBQThDLENBQWxELEVBQXFEO0FBQ25ELFFBQ0VyRSxTQUFTLENBQUNxRSxnQ0FBVixJQUNBK0QsWUFBWSxDQUFDNWpCLFVBQWIsQ0FBd0JsRixNQUYxQixFQUdFO0FBQ0EyYyxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQ0UscUdBREY7QUFHQSxhQUFPOUksU0FBUDtBQUNEOztBQUNEK0IsSUFBQUEsY0FBYyxHQUNabWpCLFlBQVksQ0FBQzVqQixVQUFiLENBQXdCd2IsU0FBUyxDQUFDcUUsZ0NBQWxDLENBREY7O0FBRUEsUUFBSXBmLGNBQWMsQ0FBQ3JELFFBQWYsS0FBNEJDLElBQUksQ0FBQ0UsU0FBckMsRUFBZ0Q7QUFDOUNrYSxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQ0UsbUVBREY7QUFHQSxhQUFPOUksU0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsTUFBTW1sQixVQUFVLEdBQUdwa0IsUUFBUSxDQUFDd0gsYUFBVCxDQUNqQnVVLFNBQVMsQ0FBQ3NFLDhCQURPLENBQW5COztBQUdBLE1BQUksQ0FBQytELFVBQUwsRUFBaUI7QUFDZnBNLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSxvREFBWjtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBQ0QsTUFBSWlDLFlBQVksR0FBR2tqQixVQUFuQjs7QUFDQSxNQUFJckksU0FBUyxDQUFDdUUsOEJBQVYsSUFBNEMsQ0FBaEQsRUFBbUQ7QUFDakQsUUFDRXZFLFNBQVMsQ0FBQ3VFLDhCQUFWLElBQTRDOEQsVUFBVSxDQUFDN2pCLFVBQVgsQ0FBc0JsRixNQURwRSxFQUVFO0FBQ0EyYyxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQ0UsaUdBREY7QUFHQSxhQUFPOUksU0FBUDtBQUNEOztBQUNEaUMsSUFBQUEsWUFBWSxHQUNWa2pCLFVBQVUsQ0FBQzdqQixVQUFYLENBQXNCd2IsU0FBUyxDQUFDdUUsOEJBQWhDLENBREY7O0FBRUEsUUFBSXBmLFlBQVksQ0FBQ3ZELFFBQWIsS0FBMEJDLElBQUksQ0FBQ0UsU0FBbkMsRUFBOEM7QUFDNUNrYSxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQ0UsaUVBREY7QUFHQSxhQUFPOUksU0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBTzBjLGtCQUFrQixDQUN2QjNhLGNBRHVCLEVBRXZCK2EsU0FBUyxDQUFDOWEsV0FGYSxFQUd2QkMsWUFIdUIsRUFJdkI2YSxTQUFTLENBQUM1YSxTQUphLENBQXpCO0FBTUQ7O0FBRUQsU0FBUzBnQixxQ0FBVCxDQUErQzdNLEdBQS9DLEVBQW9EMVIsRUFBcEQsRUFBd0Q7QUFDdEQsTUFBSXdGLFdBQVcsR0FBR3ViLHVCQUF1QixDQUFDL2dCLEVBQUQsQ0FBekM7QUFDQSxNQUFJLENBQUN3RixXQUFMLEVBQWtCO0FBRWxCLE1BQUl3YixhQUFhLEdBQUd4YixXQUFXLENBQUMsQ0FBRCxDQUEvQjtBQUNBLE1BQUl5YixTQUFTLEdBQUdELGFBQWEsQ0FBQzdiLE1BQTlCOztBQUxzRCx3REFNN0JLLFdBTjZCO0FBQUE7O0FBQUE7QUFNdEQsOERBQXNDO0FBQUEsVUFBM0J3SCxVQUEyQjtBQUNwQyxVQUFJQSxVQUFVLENBQUNsSyxHQUFYLEdBQWlCa2UsYUFBYSxDQUFDbGUsR0FBbkMsRUFBd0NrZSxhQUFhLEdBQUdoVSxVQUFoQjtBQUN4QyxVQUFJQSxVQUFVLENBQUM3SCxNQUFYLEdBQW9COGIsU0FBeEIsRUFBbUNBLFNBQVMsR0FBR2pVLFVBQVUsQ0FBQzdILE1BQXZCO0FBQ3BDO0FBVHFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBV3RELE1BQU16SSxRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjtBQUVBLE1BQU0rVixhQUFhLEdBQUdDLG1CQUFtQixDQUFDaFcsUUFBRCxDQUF6QztBQUNBLE1BQU1rVyxTQUFTLEdBQUdDLFdBQVcsQ0FBQ25XLFFBQUQsQ0FBN0I7QUFDQSxNQUFNb1csUUFBUSxHQUFHcFcsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcUMscUJBQWQsRUFBakI7QUFDQSxNQUFJbUssT0FBSjs7QUFDQSxNQUFJMEcsU0FBUyxDQUFDQyxTQUFWLENBQW9CdmEsS0FBcEIsQ0FBMEIsVUFBMUIsQ0FBSixFQUEyQztBQUN6QzRULElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFDSCxhQUFhLENBQUNuUSxTQUFsQixHQUE4QndRLFFBQVEsQ0FBQ2hRLEdBQTFEO0FBQ0QsR0FGRCxNQUVPLElBQUlpUSxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixtQkFBMUIsQ0FBSixFQUFvRDtBQUN6RDRULElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFILEdBQU9FLFFBQVEsQ0FBQ2hRLEdBQW5DO0FBQ0Q7O0FBQ0QsTUFBSW9lLE1BQU0sR0FBR0YsYUFBYSxDQUFDbGUsR0FBM0I7O0FBRUEsTUFBSXlOLG9CQUFKLEVBQTBCO0FBQ3hCLE9BQUc7QUFDRCxVQUFJNFEsYUFBYSxHQUFHemtCLFFBQVEsQ0FBQzBrQixzQkFBVCxDQUNsQmxSLDhCQURrQixDQUFwQjtBQUdBLFVBQUl5RyxLQUFLLEdBQUcsS0FBWixDQUpDLENBS0Q7O0FBQ0EsV0FDRSxJQUFJelosQ0FBQyxHQUFHLENBQVIsRUFBV21rQixHQUFHLEdBQUdGLGFBQWEsQ0FBQ3BwQixNQUFkLEdBQXVCLENBRDFDLEVBRUVtRixDQUFDLEdBQUdta0IsR0FGTixFQUdFbmtCLENBQUMsR0FBSUEsQ0FBQyxHQUFHLENBQUwsR0FBVSxDQUhoQixFQUlFO0FBQ0EsWUFBSW9rQixZQUFZLEdBQUdILGFBQWEsQ0FBQ2prQixDQUFELENBQWhDOztBQUNBLFlBQUk1RSxJQUFJLENBQUNrQixHQUFMLENBQVM4bkIsWUFBWSxDQUFDemUsSUFBYixDQUFrQkMsR0FBbEIsSUFBeUJvZSxNQUFNLEdBQUc3VSxPQUFsQyxDQUFULElBQXVELENBQTNELEVBQThEO0FBQzVENlUsVUFBQUEsTUFBTSxJQUFJSSxZQUFZLENBQUN6ZSxJQUFiLENBQWtCc0MsTUFBNUI7QUFDQXdSLFVBQUFBLEtBQUssR0FBRyxJQUFSO0FBQ0E7QUFDRDtBQUNGO0FBQ0YsS0FsQkQsUUFrQlNBLEtBbEJUO0FBbUJEOztBQUVEcUssRUFBQUEsYUFBYSxDQUFDbGUsR0FBZCxHQUFvQm9lLE1BQXBCO0FBQ0FGLEVBQUFBLGFBQWEsQ0FBQzdiLE1BQWQsR0FBdUI4YixTQUF2QjtBQUVBLFNBQU9ELGFBQVA7QUFDRDs7QUFFRCxTQUFTTyxlQUFULENBQXlCdmhCLEVBQXpCLEVBQTZCO0FBQzNCLE1BQUk5QyxDQUFDLEdBQUcsQ0FBQyxDQUFUOztBQUNBLE1BQU02RyxTQUFTLEdBQUd1TSxXQUFXLENBQUMrQixJQUFaLENBQWlCLFVBQUNDLENBQUQsRUFBSWxNLENBQUosRUFBVTtBQUMzQ2xKLElBQUFBLENBQUMsR0FBR2tKLENBQUo7QUFDQSxXQUFPa00sQ0FBQyxDQUFDdFMsRUFBRixLQUFTQSxFQUFoQjtBQUNELEdBSGlCLENBQWxCOztBQUlBLFNBQU8rRCxTQUFQO0FBQ0Q7O0FBRUQsU0FBU2dkLHVCQUFULENBQWlDL2dCLEVBQWpDLEVBQXFDO0FBQ25DLE1BQU0rRCxTQUFTLEdBQUd3ZCxlQUFlLENBQUN2aEIsRUFBRCxDQUFqQztBQUNBLE1BQUksQ0FBQytELFNBQUwsRUFBZ0I7QUFFaEIsTUFBTXJILFFBQVEsR0FBR3VDLE1BQU0sQ0FBQ3ZDLFFBQXhCO0FBQ0EsTUFBTStWLGFBQWEsR0FBR0MsbUJBQW1CLENBQUNoVyxRQUFELENBQXpDO0FBQ0EsTUFBTVksS0FBSyxHQUFHdWIsZ0JBQWdCLENBQUNuYyxRQUFELEVBQVdxSCxTQUFTLENBQUMwVSxTQUFyQixDQUE5Qjs7QUFDQSxNQUFJLENBQUNuYixLQUFMLEVBQVk7QUFDVixXQUFPM0IsU0FBUDtBQUNEOztBQUVELE1BQU1vaUIsYUFBYSxHQUFHLEtBQXRCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsS0FBMUI7QUFDQSxNQUFNelksa0NBQWtDLEdBQUd3WSxhQUFhLElBQUlDLGlCQUE1RCxDQWJtQyxDQWNuQzs7QUFDQSxNQUFNeFksV0FBVyxHQUFHRixpQ0FBdUIsQ0FDekNoSSxLQUR5QyxFQUV6Q2lJLGtDQUZ5QyxDQUEzQztBQUtBLFNBQU9DLFdBQVA7QUFDRDs7QUFFRCxTQUFTd1Qsa0JBQVQsQ0FBNEJQLFNBQTVCLEVBQXVDO0FBQ3JDLFNBQU87QUFDTHhVLElBQUFBLFdBQVcsRUFBRXdVLFNBQVMsQ0FBQ29FLGdDQURsQjtBQUVMMkUsSUFBQUEsVUFBVSxFQUFFL0ksU0FBUyxDQUFDMEQsR0FGakI7QUFHTHNGLElBQUFBLFFBQVEsRUFBRTtBQUNSNXBCLE1BQUFBLEtBQUssRUFBRTtBQUNMb00sUUFBQUEsV0FBVyxFQUFFd1UsU0FBUyxDQUFDb0UsZ0NBRGxCO0FBRUxqRyxRQUFBQSxhQUFhLEVBQUU2QixTQUFTLENBQUNxRSxnQ0FGcEI7QUFHTHZqQixRQUFBQSxNQUFNLEVBQUVrZixTQUFTLENBQUM5YTtBQUhiLE9BREM7QUFNUjdGLE1BQUFBLEdBQUcsRUFBRTtBQUNIbU0sUUFBQUEsV0FBVyxFQUFFd1UsU0FBUyxDQUFDc0UsOEJBRHBCO0FBRUhuRyxRQUFBQSxhQUFhLEVBQUU2QixTQUFTLENBQUN1RSw4QkFGdEI7QUFHSHpqQixRQUFBQSxNQUFNLEVBQUVrZixTQUFTLENBQUM1YTtBQUhmO0FBTkc7QUFITCxHQUFQO0FBZ0JEOztBQUVELFNBQVM4ZSxrQkFBVCxDQUE0QitFLFFBQTVCLEVBQXNDO0FBQ3BDLE1BQU0xZCxTQUFTLEdBQUcwZCxRQUFRLENBQUMxZCxTQUEzQjtBQUNBLE1BQU15ZCxRQUFRLEdBQUd6ZCxTQUFTLENBQUN5ZCxRQUEzQjtBQUNBLE1BQU01cEIsS0FBSyxHQUFHNHBCLFFBQVEsQ0FBQzVwQixLQUF2QjtBQUNBLE1BQU1DLEdBQUcsR0FBRzJwQixRQUFRLENBQUMzcEIsR0FBckI7QUFFQSxTQUFPO0FBQ0xxa0IsSUFBQUEsR0FBRyxFQUFFdUYsUUFBUSxDQUFDRixVQURUO0FBRUx4RSxJQUFBQSw4QkFBOEIsRUFBRWxsQixHQUFHLENBQUM4ZSxhQUYvQjtBQUdMbUcsSUFBQUEsOEJBQThCLEVBQUVqbEIsR0FBRyxDQUFDbU0sV0FIL0I7QUFJTHBHLElBQUFBLFNBQVMsRUFBRS9GLEdBQUcsQ0FBQ3lCLE1BSlY7QUFLTHVqQixJQUFBQSxnQ0FBZ0MsRUFBRWpsQixLQUFLLENBQUMrZSxhQUxuQztBQU1MaUcsSUFBQUEsZ0NBQWdDLEVBQUVobEIsS0FBSyxDQUFDb00sV0FObkM7QUFPTHRHLElBQUFBLFdBQVcsRUFBRTlGLEtBQUssQ0FBQzBCO0FBUGQsR0FBUDtBQVNEOztBQUVNLFNBQVNvb0IsMkJBQVQsQ0FBcUMzaEIsRUFBckMsRUFBeUM7QUFDOUMsTUFBTStELFNBQVMsR0FBR3dkLGVBQWUsQ0FBQ3ZoQixFQUFELENBQWpDO0FBQ0EsTUFBSSxDQUFDK0QsU0FBTCxFQUFnQjtBQUVoQixNQUFNckgsUUFBUSxHQUFHdUMsTUFBTSxDQUFDdkMsUUFBeEI7QUFDQSxNQUFNK1YsYUFBYSxHQUFHQyxtQkFBbUIsQ0FBQ2hXLFFBQUQsQ0FBekM7QUFDQSxNQUFNWSxLQUFLLEdBQUd1YixnQkFBZ0IsQ0FBQ25jLFFBQUQsRUFBV3FILFNBQVMsQ0FBQzBVLFNBQXJCLENBQTlCOztBQUNBLE1BQUksQ0FBQ25iLEtBQUwsRUFBWTtBQUNWLFdBQU8zQixTQUFQO0FBQ0Q7O0FBRUQsTUFBTW9pQixhQUFhLEdBQUcsS0FBdEI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxLQUExQjtBQUNBLE1BQU16WSxrQ0FBa0MsR0FBR3dZLGFBQWEsSUFBSUMsaUJBQTVELENBYjhDLENBYzlDOztBQUNBLE1BQU14WSxXQUFXLEdBQUdGLGlDQUF1QixDQUN6Q2hJLEtBRHlDLEVBRXpDaUksa0NBRnlDLENBQTNDO0FBSUEsTUFBSTBFLElBQUksR0FBRztBQUNUOEosSUFBQUEsV0FBVyxFQUFFOVUsTUFBTSxDQUFDK1UsVUFEWDtBQUVUQyxJQUFBQSxZQUFZLEVBQUVoVixNQUFNLENBQUNpVixXQUZaO0FBR1RqUixJQUFBQSxJQUFJLEVBQUV1QyxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWV2QyxJQUhaO0FBSVQ5QixJQUFBQSxLQUFLLEVBQUVxRSxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWVyRSxLQUpiO0FBS1QyQixJQUFBQSxHQUFHLEVBQUUwQyxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWUxQyxHQUxYO0FBTVRxQyxJQUFBQSxNQUFNLEVBQUVLLFdBQVcsQ0FBQyxDQUFELENBQVgsQ0FBZUw7QUFOZCxHQUFYO0FBU0EsU0FBTzhFLElBQVA7QUFDRDtBQUVNLFNBQVMyWCxnQkFBVCxHQUE0QjtBQUNqQyxNQUFJO0FBQ0YsUUFBSUMsR0FBRyxHQUFHNWlCLE1BQU0sQ0FBQzBPLFlBQVAsRUFBVjs7QUFDQSxRQUFJLENBQUNrVSxHQUFMLEVBQVU7QUFDUjtBQUNEOztBQUNELFFBQUl2a0IsS0FBSyxHQUFHdWtCLEdBQUcsQ0FBQ3pKLFVBQUosQ0FBZSxDQUFmLENBQVo7QUFFQSxRQUFNcEwsVUFBVSxHQUFHMVAsS0FBSyxDQUFDNEUscUJBQU4sRUFBbkI7QUFFQSxRQUFJNGYsWUFBWSxHQUFHO0FBQ2pCL04sTUFBQUEsV0FBVyxFQUFFOVUsTUFBTSxDQUFDK1UsVUFESDtBQUVqQkMsTUFBQUEsWUFBWSxFQUFFaFYsTUFBTSxDQUFDaVYsV0FGSjtBQUdqQmpSLE1BQUFBLElBQUksRUFBRStKLFVBQVUsQ0FBQy9KLElBSEE7QUFJakI5QixNQUFBQSxLQUFLLEVBQUU2TCxVQUFVLENBQUM3TCxLQUpEO0FBS2pCMkIsTUFBQUEsR0FBRyxFQUFFa0ssVUFBVSxDQUFDbEssR0FMQztBQU1qQnFDLE1BQUFBLE1BQU0sRUFBRTZILFVBQVUsQ0FBQzdIO0FBTkYsS0FBbkI7QUFRQSxXQUFPMmMsWUFBUDtBQUNELEdBbEJELENBa0JFLE9BQU94ZCxDQUFQLEVBQVU7QUFDVixXQUFPLElBQVA7QUFDRDtBQUNGO0FBRU0sU0FBU3lkLGFBQVQsQ0FBdUJDLElBQXZCLEVBQTZCO0FBQ2xDLE1BQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1R0bEIsSUFBQUEsUUFBUSxDQUFDK0UsZUFBVCxDQUF5QnNVLFNBQXpCLENBQW1DM0ssR0FBbkMsQ0FBdUNnRixlQUF2QztBQUNELEdBRkQsTUFFTztBQUNMMVQsSUFBQUEsUUFBUSxDQUFDK0UsZUFBVCxDQUF5QnNVLFNBQXpCLENBQW1DMVYsTUFBbkMsQ0FBMEMrUCxlQUExQztBQUNEO0FBQ0Y7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7QUN6ekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRU8sU0FBUzZSLHVCQUFULEdBQW1DO0FBQ3hDLE1BQU1ubkIsT0FBTyxHQUFHb25CLDRCQUE0QixFQUE1Qzs7QUFDQSxNQUFJLENBQUNwbkIsT0FBTCxFQUFjO0FBQ1osV0FBT2EsU0FBUDtBQUNEOztBQUVELFNBQU87QUFDTHFJLElBQUFBLFNBQVMsRUFBRTtBQUNUQyxNQUFBQSxXQUFXLEVBQUU4VSx3QkFBYyxDQUFDamUsT0FBRDtBQURsQixLQUROO0FBSUx4RCxJQUFBQSxJQUFJLEVBQUU7QUFDSnlNLE1BQUFBLFNBQVMsRUFBRWpKLE9BQU8sQ0FBQ0w7QUFEZjtBQUpELEdBQVA7QUFRRDs7QUFFRCxTQUFTeW5CLDRCQUFULEdBQXdDO0FBQ3RDLFNBQU9DLFdBQVcsQ0FDaEJ6bEIsUUFBUSxDQUFDbUQsSUFETyxFQUVoQixVQUFDL0UsT0FBRDtBQUFBLFdBQWFtRSxNQUFNLENBQUN1QyxnQkFBUCxDQUF3QjFHLE9BQXhCLEVBQWlDc25CLE9BQWpDLElBQTRDLE9BQXpEO0FBQUEsR0FGZ0IsQ0FBbEI7QUFJRDs7QUFFRCxTQUFTRCxXQUFULENBQXFCRSxXQUFyQixFQUFrQ0MsWUFBbEMsRUFBZ0Q7QUFDOUMsTUFBSXBQLFlBQVksR0FBR3ZYLFNBQW5COztBQUNBLE9BQUssSUFBSXVCLENBQUMsR0FBR21sQixXQUFXLENBQUMvVSxRQUFaLENBQXFCdlYsTUFBckIsR0FBOEIsQ0FBM0MsRUFBOENtRixDQUFDLElBQUksQ0FBbkQsRUFBc0RBLENBQUMsRUFBdkQsRUFBMkQ7QUFDekQsUUFBTXdaLEtBQUssR0FBRzJMLFdBQVcsQ0FBQy9VLFFBQVosQ0FBcUJwUSxDQUFyQixDQUFkO0FBQ0EsUUFBTXBDLE9BQU8sR0FBR3FuQixXQUFXLENBQUN6TCxLQUFELEVBQVE0TCxZQUFSLENBQTNCOztBQUNBLFFBQUl4bkIsT0FBSixFQUFhO0FBQ1gsYUFBT0EsT0FBUDtBQUNEO0FBQ0Y7O0FBRUQsTUFBSXluQixnQkFBZ0IsQ0FBQ0YsV0FBRCxFQUFjMW1CLFNBQWQsRUFBeUIybUIsWUFBekIsQ0FBcEIsRUFBNEQ7QUFDMUQsV0FBT0QsV0FBUDtBQUNEO0FBQ0YsRUFFRDs7O0FBQ0EsU0FBU0UsZ0JBQVQsQ0FBMEJ6bkIsT0FBMUIsRUFBbUMwbkI7QUFBUTtBQUEzQyxFQUEyREYsWUFBM0QsRUFBeUU7QUFDdkUsTUFDRUcsT0FBTyxDQUFDN0UsYUFBUixJQUNBOWlCLE9BQU8sS0FBSzRCLFFBQVEsQ0FBQ21ELElBRHJCLElBRUEvRSxPQUFPLEtBQUs0QixRQUFRLENBQUMrRSxlQUh2QixFQUlFO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsTUFDRSxDQUFDL0UsUUFBRCxJQUNBLENBQUNBLFFBQVEsQ0FBQytFLGVBRFYsSUFFQSxDQUFDL0UsUUFBUSxDQUFDbUQsSUFGVixJQUdDeWlCLFlBQVksSUFBSUEsWUFBWSxDQUFDeG5CLE9BQUQsQ0FKL0IsRUFLRTtBQUNBLFdBQU8sS0FBUDtBQUNEOztBQUVELE1BQU00bkIsT0FBTyxHQUFHbGhCLGdCQUFnQixDQUFDMUcsT0FBRCxDQUFoQzs7QUFDQSxNQUFJNG5CLE9BQUosRUFBYTtBQUNYLFFBQU1OLE9BQU8sR0FBR00sT0FBTyxDQUFDaGhCLGdCQUFSLENBQXlCLFNBQXpCLENBQWhCOztBQUNBLFFBQUkwZ0IsT0FBTyxLQUFLLE1BQWhCLEVBQXdCO0FBQ3RCLGFBQU8sS0FBUDtBQUNELEtBSlUsQ0FLWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFFBQU1uUSxPQUFPLEdBQUd5USxPQUFPLENBQUNoaEIsZ0JBQVIsQ0FBeUIsU0FBekIsQ0FBaEI7O0FBQ0EsUUFBSXVRLE9BQU8sS0FBSyxHQUFoQixFQUFxQjtBQUNuQixhQUFPLEtBQVA7QUFDRDtBQUNGOztBQUVELE1BQU1wUCxJQUFJLEdBQUcyZixPQUFPLElBQUkxbkIsT0FBTyxDQUFDb0gscUJBQVIsRUFBeEI7QUFFQSxNQUFNdVEsYUFBYSxHQUFHL1YsUUFBUSxDQUFDNkQsZ0JBQS9COztBQUNBLE1BQUlKLG1CQUFtQixFQUF2QixFQUEyQjtBQUN6QixXQUFPMEMsSUFBSSxDQUFDQyxHQUFMLElBQVksQ0FBWixJQUFpQkQsSUFBSSxDQUFDQyxHQUFMLElBQVlwRyxRQUFRLENBQUMrRSxlQUFULENBQXlCZ00sWUFBN0Q7QUFDRCxHQUZELE1BRU87QUFDTCxXQUFPNUssSUFBSSxDQUFDSSxJQUFMLEdBQVl2QyxTQUFuQjtBQUNEO0FBQ0YsQzs7Ozs7QUMzRkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7Q0FHQTs7QUFDQTtBQUNBaWlCLHdDQUFBO0FBRUEsSUFBTTNkLGVBQUssR0FBRyxJQUFkO0FBRU8sU0FBUzZkLG1CQUFULEdBQStCO0FBQ3BDLE1BQU12ckIsSUFBSSxHQUFHd3JCLHVCQUF1QixFQUFwQzs7QUFDQSxNQUFJLENBQUN4ckIsSUFBTCxFQUFXO0FBQ1QsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsTUFBTXVMLElBQUksR0FBRytlLDBCQUFnQixFQUE3QjtBQUNBLFNBQU87QUFBRXRxQixJQUFBQSxJQUFJLEVBQUpBLElBQUY7QUFBUXVMLElBQUFBLElBQUksRUFBSkE7QUFBUixHQUFQO0FBQ0Q7O0FBRUQsU0FBUytlLDBCQUFULEdBQTRCO0FBQzFCLE1BQUk7QUFDRixRQUFJQyxHQUFHLEdBQUc1aUIsTUFBTSxDQUFDME8sWUFBUCxFQUFWOztBQUNBLFFBQUksQ0FBQ2tVLEdBQUwsRUFBVTtBQUNSO0FBQ0Q7O0FBQ0QsUUFBSXZrQixLQUFLLEdBQUd1a0IsR0FBRyxDQUFDekosVUFBSixDQUFlLENBQWYsQ0FBWjtBQUVBLFdBQU9uVCxZQUFZLENBQUMzSCxLQUFLLENBQUM0RSxxQkFBTixFQUFELENBQW5CO0FBQ0QsR0FSRCxDQVFFLE9BQU9vQyxDQUFQLEVBQVU7QUFDVmpGLElBQUFBLFFBQVEsQ0FBQ2lGLENBQUQsQ0FBUjtBQUNBLFdBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU3dlLHVCQUFULEdBQW1DO0FBQ2pDLE1BQU1qTCxTQUFTLEdBQUc1WSxNQUFNLENBQUMwTyxZQUFQLEVBQWxCOztBQUNBLE1BQUksQ0FBQ2tLLFNBQUwsRUFBZ0I7QUFDZCxXQUFPbGMsU0FBUDtBQUNEOztBQUNELE1BQUlrYyxTQUFTLENBQUNqSyxXQUFkLEVBQTJCO0FBQ3pCLFdBQU9qUyxTQUFQO0FBQ0Q7O0FBQ0QsTUFBTW9JLFNBQVMsR0FBRzhULFNBQVMsQ0FBQ2xXLFFBQVYsRUFBbEI7QUFDQSxNQUFNb2hCLGNBQWMsR0FBR2hmLFNBQVMsQ0FDN0JuQyxJQURvQixHQUVwQm9XLE9BRm9CLENBRVosS0FGWSxFQUVMLEdBRkssRUFHcEJBLE9BSG9CLENBR1osUUFIWSxFQUdGLEdBSEUsQ0FBdkI7O0FBSUEsTUFBSStLLGNBQWMsQ0FBQ2hyQixNQUFmLEtBQTBCLENBQTlCLEVBQWlDO0FBQy9CLFdBQU80RCxTQUFQO0FBQ0Q7O0FBQ0QsTUFBSSxDQUFDa2MsU0FBUyxDQUFDSSxVQUFYLElBQXlCLENBQUNKLFNBQVMsQ0FBQ0ssU0FBeEMsRUFBbUQ7QUFDakQsV0FBT3ZjLFNBQVA7QUFDRDs7QUFDRCxNQUFNMkIsS0FBSyxHQUNUdWEsU0FBUyxDQUFDTSxVQUFWLEtBQXlCLENBQXpCLEdBQ0lOLFNBQVMsQ0FBQ08sVUFBVixDQUFxQixDQUFyQixDQURKLEdBRUlDLDRCQUFrQixDQUNoQlIsU0FBUyxDQUFDSSxVQURNLEVBRWhCSixTQUFTLENBQUNTLFlBRk0sRUFHaEJULFNBQVMsQ0FBQ0ssU0FITSxFQUloQkwsU0FBUyxDQUFDVSxXQUpNLENBSHhCOztBQVNBLE1BQUksQ0FBQ2piLEtBQUQsSUFBVUEsS0FBSyxDQUFDa2IsU0FBcEIsRUFBK0I7QUFDN0IvVCxJQUFBQSxhQUFHLENBQUMsOERBQUQsQ0FBSDtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBRUQsTUFBTXJFLElBQUksR0FBR29GLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY3BGLFdBQTNCO0FBQ0EsTUFBTTRELFNBQVMsR0FBR2xCLDhCQUFBLENBQW9CRyxLQUFwQixFQUEyQkYsVUFBM0IsQ0FBc0NWLFFBQVEsQ0FBQ21ELElBQS9DLENBQWxCO0FBQ0EsTUFBTWhJLEtBQUssR0FBR3dHLFNBQVMsQ0FBQ3hHLEtBQVYsQ0FBZ0IwQixNQUE5QjtBQUNBLE1BQU16QixHQUFHLEdBQUd1RyxTQUFTLENBQUN2RyxHQUFWLENBQWN5QixNQUExQjtBQUVBLE1BQU15cEIsYUFBYSxHQUFHLEdBQXRCLENBdENpQyxDQXdDakM7O0FBQ0EsTUFBSTVlLE1BQU0sR0FBRzlNLElBQUksQ0FBQzJCLEtBQUwsQ0FBV1gsSUFBSSxDQUFDWSxHQUFMLENBQVMsQ0FBVCxFQUFZckIsS0FBSyxHQUFHbXJCLGFBQXBCLENBQVgsRUFBK0NuckIsS0FBL0MsQ0FBYjtBQUNBLE1BQUlvckIsY0FBYyxHQUFHN2UsTUFBTSxDQUFDL00sTUFBUCxDQUFjLDA5ZEFBZCxDQUFyQjs7QUFDQSxNQUFJNHJCLGNBQWMsS0FBSyxDQUFDLENBQXhCLEVBQTJCO0FBQ3pCN2UsSUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNuTCxLQUFQLENBQWFncUIsY0FBYyxHQUFHLENBQTlCLENBQVQ7QUFDRCxHQTdDZ0MsQ0ErQ2pDOzs7QUFDQSxNQUFJNWUsS0FBSyxHQUFHL00sSUFBSSxDQUFDMkIsS0FBTCxDQUFXbkIsR0FBWCxFQUFnQlEsSUFBSSxDQUFDQyxHQUFMLENBQVNqQixJQUFJLENBQUNTLE1BQWQsRUFBc0JELEdBQUcsR0FBR2tyQixhQUE1QixDQUFoQixDQUFaO0FBQ0EsTUFBSUUsV0FBVyxHQUFHeGUsS0FBSyxDQUFDZ0QsSUFBTixDQUFXckQsS0FBSyxDQUFDc2UsUUFBTixDQUFlLDA5ZEFBZixDQUFYLEVBQTJDUSxHQUEzQyxFQUFsQjs7QUFDQSxNQUFJRCxXQUFXLEtBQUt2bkIsU0FBaEIsSUFBNkJ1bkIsV0FBVyxDQUFDM1gsS0FBWixHQUFvQixDQUFyRCxFQUF3RDtBQUN0RGxILElBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDcEwsS0FBTixDQUFZLENBQVosRUFBZWlxQixXQUFXLENBQUMzWCxLQUFaLEdBQW9CLENBQW5DLENBQVI7QUFDRDs7QUFFRCxTQUFPO0FBQUV4SCxJQUFBQSxTQUFTLEVBQVRBLFNBQUY7QUFBYUssSUFBQUEsTUFBTSxFQUFOQSxNQUFiO0FBQXFCQyxJQUFBQSxLQUFLLEVBQUxBO0FBQXJCLEdBQVA7QUFDRDs7QUFFRCxTQUFTZ1UsNEJBQVQsQ0FBNEJrSCxTQUE1QixFQUF1QzVoQixXQUF2QyxFQUFvRDZoQixPQUFwRCxFQUE2RDNoQixTQUE3RCxFQUF3RTtBQUN0RSxNQUFNUCxLQUFLLEdBQUcsSUFBSUMsS0FBSixFQUFkO0FBQ0FELEVBQUFBLEtBQUssQ0FBQ0UsUUFBTixDQUFlK2hCLFNBQWYsRUFBMEI1aEIsV0FBMUI7QUFDQUwsRUFBQUEsS0FBSyxDQUFDRyxNQUFOLENBQWEraEIsT0FBYixFQUFzQjNoQixTQUF0Qjs7QUFDQSxNQUFJLENBQUNQLEtBQUssQ0FBQ2tiLFNBQVgsRUFBc0I7QUFDcEIsV0FBT2xiLEtBQVA7QUFDRDs7QUFDRG1ILEVBQUFBLGFBQUcsQ0FBQyxxREFBRCxDQUFIO0FBQ0EsTUFBTWdiLFlBQVksR0FBRyxJQUFJbGlCLEtBQUosRUFBckI7QUFDQWtpQixFQUFBQSxZQUFZLENBQUNqaUIsUUFBYixDQUFzQmdpQixPQUF0QixFQUErQjNoQixTQUEvQjtBQUNBNGhCLEVBQUFBLFlBQVksQ0FBQ2hpQixNQUFiLENBQW9COGhCLFNBQXBCLEVBQStCNWhCLFdBQS9COztBQUNBLE1BQUksQ0FBQzhoQixZQUFZLENBQUNqSCxTQUFsQixFQUE2QjtBQUMzQi9ULElBQUFBLGFBQUcsQ0FBQywwQ0FBRCxDQUFIO0FBQ0EsV0FBT25ILEtBQVA7QUFDRDs7QUFDRG1ILEVBQUFBLGFBQUcsQ0FBQyx1REFBRCxDQUFIO0FBQ0EsU0FBTzlJLFNBQVA7QUFDRDs7QUFFTSxTQUFTa2QsMEJBQVQsQ0FBMEJuYyxRQUExQixFQUFvQytiLFNBQXBDLEVBQStDO0FBQ3BELE1BQU1vSSxZQUFZLEdBQUdua0IsUUFBUSxDQUFDd0gsYUFBVCxDQUNuQnVVLFNBQVMsQ0FBQ29FLGdDQURTLENBQXJCOztBQUdBLE1BQUksQ0FBQ2dFLFlBQUwsRUFBbUI7QUFDakJwYyxJQUFBQSxhQUFHLENBQUMsc0RBQUQsQ0FBSDtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBQ0QsTUFBSStCLGNBQWMsR0FBR21qQixZQUFyQjs7QUFDQSxNQUFJcEksU0FBUyxDQUFDcUUsZ0NBQVYsSUFBOEMsQ0FBbEQsRUFBcUQ7QUFDbkQsUUFDRXJFLFNBQVMsQ0FBQ3FFLGdDQUFWLElBQ0ErRCxZQUFZLENBQUM1akIsVUFBYixDQUF3QmxGLE1BRjFCLEVBR0U7QUFDQTBNLE1BQUFBLGFBQUcsQ0FDRCxxR0FEQyxDQUFIO0FBR0EsYUFBTzlJLFNBQVA7QUFDRDs7QUFDRCtCLElBQUFBLGNBQWMsR0FDWm1qQixZQUFZLENBQUM1akIsVUFBYixDQUF3QndiLFNBQVMsQ0FBQ3FFLGdDQUFsQyxDQURGOztBQUVBLFFBQUlwZixjQUFjLENBQUNyRCxRQUFmLEtBQTRCQyxJQUFJLENBQUNFLFNBQXJDLEVBQWdEO0FBQzlDaUssTUFBQUEsYUFBRyxDQUFDLG1FQUFELENBQUg7QUFDQSxhQUFPOUksU0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsTUFBTW1sQixVQUFVLEdBQUdwa0IsUUFBUSxDQUFDd0gsYUFBVCxDQUNqQnVVLFNBQVMsQ0FBQ3NFLDhCQURPLENBQW5COztBQUdBLE1BQUksQ0FBQytELFVBQUwsRUFBaUI7QUFDZnJjLElBQUFBLGFBQUcsQ0FBQyxvREFBRCxDQUFIO0FBQ0EsV0FBTzlJLFNBQVA7QUFDRDs7QUFDRCxNQUFJaUMsWUFBWSxHQUFHa2pCLFVBQW5COztBQUNBLE1BQUlySSxTQUFTLENBQUN1RSw4QkFBVixJQUE0QyxDQUFoRCxFQUFtRDtBQUNqRCxRQUNFdkUsU0FBUyxDQUFDdUUsOEJBQVYsSUFBNEM4RCxVQUFVLENBQUM3akIsVUFBWCxDQUFzQmxGLE1BRHBFLEVBRUU7QUFDQTBNLE1BQUFBLGFBQUcsQ0FDRCxpR0FEQyxDQUFIO0FBR0EsYUFBTzlJLFNBQVA7QUFDRDs7QUFDRGlDLElBQUFBLFlBQVksR0FDVmtqQixVQUFVLENBQUM3akIsVUFBWCxDQUFzQndiLFNBQVMsQ0FBQ3VFLDhCQUFoQyxDQURGOztBQUVBLFFBQUlwZixZQUFZLENBQUN2RCxRQUFiLEtBQTBCQyxJQUFJLENBQUNFLFNBQW5DLEVBQThDO0FBQzVDaUssTUFBQUEsYUFBRyxDQUFDLGlFQUFELENBQUg7QUFDQSxhQUFPOUksU0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBTzBjLDRCQUFrQixDQUN2QjNhLGNBRHVCLEVBRXZCK2EsU0FBUyxDQUFDOWEsV0FGYSxFQUd2QkMsWUFIdUIsRUFJdkI2YSxTQUFTLENBQUM1YSxTQUphLENBQXpCO0FBTUQ7QUFFTSxTQUFTOGUsNEJBQVQsQ0FBNEIrRSxRQUE1QixFQUFzQztBQUMzQyxNQUFNMWQsU0FBUyxHQUFHMGQsUUFBUSxDQUFDMWQsU0FBM0I7QUFDQSxNQUFNeWQsUUFBUSxHQUFHemQsU0FBUyxDQUFDeWQsUUFBM0I7QUFDQSxNQUFNNXBCLEtBQUssR0FBRzRwQixRQUFRLENBQUM1cEIsS0FBdkI7QUFDQSxNQUFNQyxHQUFHLEdBQUcycEIsUUFBUSxDQUFDM3BCLEdBQXJCO0FBRUEsU0FBTztBQUNMa2xCLElBQUFBLDhCQUE4QixFQUFFbGxCLEdBQUcsQ0FBQzhlLGFBRC9CO0FBRUxtRyxJQUFBQSw4QkFBOEIsRUFBRWpsQixHQUFHLENBQUNtTSxXQUYvQjtBQUdMcEcsSUFBQUEsU0FBUyxFQUFFL0YsR0FBRyxDQUFDeUIsTUFIVjtBQUlMdWpCLElBQUFBLGdDQUFnQyxFQUFFamxCLEtBQUssQ0FBQytlLGFBSm5DO0FBS0xpRyxJQUFBQSxnQ0FBZ0MsRUFBRWhsQixLQUFLLENBQUNvTSxXQUxuQztBQU1MdEcsSUFBQUEsV0FBVyxFQUFFOUYsS0FBSyxDQUFDMEI7QUFOZCxHQUFQO0FBUUQ7O0FBRUQsU0FBU2tMLGFBQVQsR0FBZTtBQUNiLE1BQUlPLGVBQUosRUFBVztBQUNURCxJQUFBQSxTQUFBLENBQWdCLElBQWhCLEVBQXNCRixTQUF0QjtBQUNEO0FBQ0YsQzs7QUNsTUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQVdBO0FBU0E7QUFDQTtDQUdBOztBQUNBNUYsTUFBTSxDQUFDd2pCLE9BQVAsR0FBaUI7QUFDZjtBQUNBemdCLEVBQUFBLFVBQVUsRUFBRUEsVUFGRztBQUdmRyxFQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBSEg7QUFJZk8sRUFBQUEsWUFBWSxFQUFFQSxZQUpDO0FBS2ZGLEVBQUFBLFVBQVUsRUFBRUEsVUFMRztBQU1mZ0IsRUFBQUEsV0FBVyxFQUFFQSxXQU5FO0FBT2ZMLEVBQUFBLGFBQWEsRUFBRUEsYUFQQTtBQVFmRSxFQUFBQSxXQUFXLEVBQUVBLFdBUkU7QUFTZi9CLEVBQUFBLFdBQVcsRUFBRUEsV0FURTtBQVVma0QsRUFBQUEsY0FBYyxFQUFFQSxjQVZEO0FBWWY7QUFDQXFlLEVBQUFBLG1CQUFtQixFQUFFQSxtQkFiTjtBQWVmO0FBQ0FPLEVBQUFBLDJCQUEyQixFQUFFbGEsaUJBaEJkO0FBaUJmUSxFQUFBQSxjQUFjLEVBQUVBLGNBakJEO0FBbUJmO0FBQ0F1WSxFQUFBQSx1QkFBdUIsRUFBRUEsdUJBQXVCQTtBQXBCakMsQ0FBakIsRUF1QkE7O0FBQ0FoakIsTUFBTSxDQUFDd2UsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBeGUsTUFBTSxDQUFDc2UsZUFBUCxHQUF5QkEsZUFBekI7QUFDQXRlLE1BQU0sQ0FBQ29YLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQXBYLE1BQU0sQ0FBQzJZLHVCQUFQLEdBQWlDQSx1QkFBakM7QUFDQTNZLE1BQU0sQ0FBQzJpQixnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0EzaUIsTUFBTSxDQUFDMGlCLDJCQUFQLEdBQXFDQSwyQkFBckM7QUFDQTFpQixNQUFNLENBQUM4aUIsYUFBUCxHQUF1QkEsYUFBdkIsQzs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTlpQixNQUFNLENBQUN3akIsT0FBUCxDQUFlWSxZQUFmLEdBQThCLElBQTlCO0FBRUEzbUIsUUFBUSxDQUFDd0MsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLFlBQVk7QUFDeEQ7QUFDQSxNQUFJb2tCLElBQUksR0FBRzVtQixRQUFRLENBQUNtRSxhQUFULENBQXVCLE1BQXZCLENBQVg7QUFDQXlpQixFQUFBQSxJQUFJLENBQUN4aUIsWUFBTCxDQUFrQixNQUFsQixFQUEwQixVQUExQjtBQUNBd2lCLEVBQUFBLElBQUksQ0FBQ3hpQixZQUFMLENBQ0UsU0FERixFQUVFLDhGQUZGO0FBSUFwRSxFQUFBQSxRQUFRLENBQUM2bUIsSUFBVCxDQUFjcmlCLFdBQWQsQ0FBMEJvaUIsSUFBMUI7QUFDRCxDQVREIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvbWF0Y2gtcXVvdGUuanM/ZGQ2YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlLmpzP2ZkZWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXMuanM/NDAwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3V0aWxzLmpzPzAyNWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9yZWN0LmpzPzRkNWEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kZWNvcmF0b3IuanM/MWIwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2dlc3R1cmVzLmpzPzE0YzIiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9oaWdobGlnaHQuanM/OGRhOCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RvbS5qcz9jYmYwIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvc2VsZWN0aW9uLmpzPzU5YWMiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC5qcz9iNjM1Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXgtcmVmbG93YWJsZS5qcz8zOTI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgc2Nyb2xsVG9SZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SZWN0KHJlY3QpIHtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvU3RhcnQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvU3RhcnRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0VuZCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9FbmRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGggKiBmYWN0b3JcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIGxlZnQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbExlZnQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYIC0gcGFnZVdpZHRoO1xuICB2YXIgbWluT2Zmc2V0ID0gaXNSVEwoKSA/IC0oZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aCkgOiAwO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5tYXgob2Zmc2V0LCBtaW5PZmZzZXQpKTtcbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSByaWdodC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUmlnaHQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYICsgcGFnZVdpZHRoO1xuICB2YXIgbWF4T2Zmc2V0ID0gaXNSVEwoKSA/IDAgOiBkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5taW4ob2Zmc2V0LCBtYXhPZmZzZXQpKTtcbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZ2l2ZW4gbGVmdCBvZmZzZXQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGNsb3NlIGVub3VnaCB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuZnVuY3Rpb24gc2Nyb2xsVG9PZmZzZXQob2Zmc2V0KSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvT2Zmc2V0IFwiICsgb2Zmc2V0KTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IFwiQ2FsbGVkIHNjcm9sbFRvT2Zmc2V0KCkgd2l0aCBzY3JvbGwgbW9kZSBlbmFibGVkLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gcGFnaW5hdGVkIG1vZGUuXCI7XG4gIH1cblxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIC8vIEluIHNvbWUgY2FzZSB0aGUgc2Nyb2xsWCBjYW5ub3QgcmVhY2ggdGhlIHBvc2l0aW9uIHJlc3BlY3RpbmcgdG8gaW5uZXJXaWR0aFxuICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpIC8gcGFnZVdpZHRoO1xuICByZXR1cm4gZGlmZiA+IDAuMDE7XG59XG5cbi8vIFNuYXAgdGhlIG9mZnNldCB0byB0aGUgc2NyZWVuIHdpZHRoIChwYWdlIHdpZHRoKS5cbmZ1bmN0aW9uIHNuYXBPZmZzZXQob2Zmc2V0KSB7XG4gIHZhciB2YWx1ZSA9IG9mZnNldCArIChpc1JUTCgpID8gLTEgOiAxKTtcbiAgcmV0dXJuIHZhbHVlIC0gKHZhbHVlICUgcGFnZVdpZHRoKTtcbn1cblxuLy8gU25hcHMgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRoZSBwYWdlIHdpZHRoLlxuZnVuY3Rpb24gc25hcEN1cnJlbnRPZmZzZXQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNuYXBDdXJyZW50T2Zmc2V0XCIpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIC8vIEFkZHMgaGFsZiBhIHBhZ2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNuYXAgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICB2YXIgZGVsdGEgPSBmYWN0b3IgKiAocGFnZVdpZHRoIC8gMik7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoY3VycmVudE9mZnNldCArIGRlbHRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlRnJvbUxvY2F0b3IobG9jYXRvcikge1xuICBsZXQgdGV4dCA9IGxvY2F0b3IudGV4dDtcbiAgaWYgKCF0ZXh0IHx8ICF0ZXh0LmhpZ2hsaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIHJvb3Q7XG4gICAgbGV0IGxvY2F0aW9ucyA9IGxvY2F0b3IubG9jYXRpb25zO1xuICAgIGlmIChsb2NhdGlvbnMgJiYgbG9jYXRpb25zLmNzc1NlbGVjdG9yKSB7XG4gICAgICByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihsb2NhdGlvbnMuY3NzU2VsZWN0b3IpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIGxldCBhbmNob3IgPSBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuaGlnaGxpZ2h0LCB7XG4gICAgICBwcmVmaXg6IHRleHQuYmVmb3JlLFxuICAgICAgc3VmZml4OiB0ZXh0LmFmdGVyLFxuICAgIH0pO1xuICAgIHJldHVybiBhbmNob3IudG9SYW5nZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8vIFVzZXIgU2V0dGluZ3MuXG5cbi8vIEZvciBzZXR0aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG59XG5cbi8vIEZvciByZW1vdmluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHkoa2V5KSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcbn1cblxuLy8vIFRvb2xraXRcblxuZXhwb3J0IGZ1bmN0aW9uIGxvZygpIHtcbiAgdmFyIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO1xuICBBbmRyb2lkLmxvZyhtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0Vycm9yKG1lc3NhZ2UpIHtcbiAgQW5kcm9pZC5sb2dFcnJvcihtZXNzYWdlLCBcIlwiLCAwKTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGZhbHNlO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgRE9NUmVjdCBpbnRvIGEgSlNPTiBvYmplY3QgdW5kZXJzdGFuZGFibGUgYnkgdGhlIG5hdGl2ZSBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYXRpdmVSZWN0KHJlY3QpIHtcbiAgY29uc3QgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCB3aWR0aCA9IHJlY3Qud2lkdGggKiBwaXhlbFJhdGlvO1xuICBjb25zdCBoZWlnaHQgPSByZWN0LmhlaWdodCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGxlZnQgPSByZWN0LmxlZnQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCB0b3AgPSByZWN0LnRvcCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQ7XG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gIHJhbmdlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcblxuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZyhgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWApO1xuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgbG9nKFxuICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQge1xuICBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCxcbiAgcmVjdENvbnRhaW5zUG9pbnQsXG4gIHRvTmF0aXZlUmVjdCxcbn0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgbG9nLCBsb2dFcnJvciwgcmFuZ2VGcm9tTG9jYXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBzdHlsZXMgPSBuZXcgTWFwKCk7XG5sZXQgZ3JvdXBzID0gbmV3IE1hcCgpO1xudmFyIGxhc3RHcm91cElkID0gMDtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgc3VwcG9ydGVkIERlY29yYXRpb24gVGVtcGxhdGVzLlxuICpcbiAqIEVhY2ggdGVtcGxhdGUgb2JqZWN0IGlzIGluZGV4ZWQgYnkgdGhlIHN0eWxlIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUZW1wbGF0ZXMobmV3U3R5bGVzKSB7XG4gIHZhciBzdHlsZXNoZWV0ID0gXCJcIjtcblxuICBmb3IgKGNvbnN0IFtpZCwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld1N0eWxlcykpIHtcbiAgICBzdHlsZXMuc2V0KGlkLCBzdHlsZSk7XG4gICAgaWYgKHN0eWxlLnN0eWxlc2hlZXQpIHtcbiAgICAgIHN0eWxlc2hlZXQgKz0gc3R5bGUuc3R5bGVzaGVldCArIFwiXFxuXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlc2hlZXQpIHtcbiAgICBsZXQgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgIHN0eWxlRWxlbWVudC5pbm5lckhUTUwgPSBzdHlsZXNoZWV0O1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBEZWNvcmF0aW9uR3JvdXAgZm9yIHRoZSBnaXZlbiBncm91cCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjb3JhdGlvbnMoZ3JvdXBOYW1lKSB7XG4gIHZhciBncm91cCA9IGdyb3Vwcy5nZXQoZ3JvdXBOYW1lKTtcbiAgaWYgKCFncm91cCkge1xuICAgIGxldCBpZCA9IFwicjItZGVjb3JhdGlvbi1cIiArIGxhc3RHcm91cElkKys7XG4gICAgZ3JvdXAgPSBEZWNvcmF0aW9uR3JvdXAoaWQsIGdyb3VwTmFtZSk7XG4gICAgZ3JvdXBzLnNldChncm91cE5hbWUsIGdyb3VwKTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBjbGljayBldmVudHMgb24gYSBEZWNvcmF0aW9uLlxuICogUmV0dXJucyB3aGV0aGVyIGEgZGVjb3JhdGlvbiBtYXRjaGVkIHRoaXMgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkge1xuICBpZiAoZ3JvdXBzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kVGFyZ2V0KCkge1xuICAgIGZvciAoY29uc3QgW2dyb3VwLCBncm91cENvbnRlbnRdIG9mIGdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwQ29udGVudC5pdGVtcy5yZXZlcnNlKCkpIHtcbiAgICAgICAgaWYgKCFpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBsZXQgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9KU09OKCk7XG4gICAgICAgICAgaWYgKHJlY3RDb250YWluc1BvaW50KHJlY3QsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFksIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cCwgaXRlbSwgZWxlbWVudCwgcmVjdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB0YXJnZXQgPSBmaW5kVGFyZ2V0KCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIEFuZHJvaWQub25EZWNvcmF0aW9uQWN0aXZhdGVkKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGlkOiB0YXJnZXQuaXRlbS5kZWNvcmF0aW9uLmlkLFxuICAgICAgZ3JvdXA6IHRhcmdldC5ncm91cCxcbiAgICAgIHJlY3Q6IHRvTmF0aXZlUmVjdCh0YXJnZXQuaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksXG4gICAgICBjbGljazogY2xpY2tFdmVudCxcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEZWNvcmF0aW9uR3JvdXAgb2JqZWN0IGZyb20gYSB1bmlxdWUgSFRNTCBJRCBhbmQgaXRzIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWNvcmF0aW9uR3JvdXAoZ3JvdXBJZCwgZ3JvdXBOYW1lKSB7XG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIgbGFzdEl0ZW1JZCA9IDA7XG4gIHZhciBjb250YWluZXIgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGRlY29yYXRpb24gdG8gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkKGRlY29yYXRpb24pIHtcbiAgICBsZXQgaWQgPSBncm91cElkICsgXCItXCIgKyBsYXN0SXRlbUlkKys7XG5cbiAgICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKGRlY29yYXRpb24ubG9jYXRvcik7XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgbG9nKFwiQ2FuJ3QgbG9jYXRlIERPTSByYW5nZSBmb3IgZGVjb3JhdGlvblwiLCBkZWNvcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IHsgaWQsIGRlY29yYXRpb24sIHJhbmdlIH07XG4gICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICBsYXlvdXQoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZGVjb3JhdGlvbiB3aXRoIGdpdmVuIElEIGZyb20gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlKGRlY29yYXRpb25JZCkge1xuICAgIGxldCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaS5kZWNvcmF0aW9uLmlkID09PSBkZWNvcmF0aW9uSWQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBudWxsO1xuICAgIGlmIChpdGVtLmNvbnRhaW5lcikge1xuICAgICAgaXRlbS5jb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBpdGVtLmNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoYXQgdGhlIGdpdmVuIGRlY29yYXRpb24gd2FzIG1vZGlmaWVkIGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlKGRlY29yYXRpb24pIHtcbiAgICByZW1vdmUoZGVjb3JhdGlvbi5pZCk7XG4gICAgYWRkKGRlY29yYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGRlY29yYXRpb25zIGZyb20gdGhpcyBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZXMgdGhlIGRlY29yYXRpb24gZWxlbWVudHMuXG4gICAqXG4gICAqIFRvIGJlIGNhbGxlZCBhZnRlciByZWZsb3dpbmcgdGhlIHJlc291cmNlLCBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVlc3RMYXlvdXQoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBsYXlvdXQoaXRlbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExheW91dHMgYSBzaW5nbGUgRGVjb3JhdGlvbiBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gbGF5b3V0KGl0ZW0pIHtcbiAgICBsZXQgZ3JvdXBDb250YWluZXIgPSByZXF1aXJlQ29udGFpbmVyKCk7XG5cbiAgICBsZXQgc3R5bGUgPSBzdHlsZXMuZ2V0KGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaWYgKCFzdHlsZSkge1xuICAgICAgbG9nRXJyb3IoYFVua25vd24gZGVjb3JhdGlvbiBzdHlsZTogJHtpdGVtLmRlY29yYXRpb24uc3R5bGV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgaXRlbS5pZCk7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlXCIsIGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaXRlbUNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIGxldCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gcGFyc2VJbnQoXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgXCJjb2x1bW4tY291bnRcIlxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IHBhZ2VXaWR0aCA9IHZpZXdwb3J0V2lkdGggLyAoY29sdW1uQ291bnQgfHwgMSk7XG4gICAgbGV0IHNjcm9sbGluZ0VsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICAgIGxldCB4T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCB5T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnQoZWxlbWVudCwgcmVjdCwgYm91bmRpbmdSZWN0KSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXG4gICAgICBpZiAoc3R5bGUud2lkdGggPT09IFwid3JhcFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtyZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3ZpZXdwb3J0V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHZpZXdwb3J0V2lkdGgpICogdmlld3BvcnRXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcImJvdW5kc1wiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZGluZ1JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Ym91bmRpbmdSZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJwYWdlXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3BhZ2VXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gcGFnZVdpZHRoKSAqIHBhZ2VXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGJvdW5kaW5nUmVjdCA9IGl0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBsZXQgZWxlbWVudFRlbXBsYXRlO1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBpdGVtLmRlY29yYXRpb24uZWxlbWVudC50cmltKCk7XG4gICAgICBlbGVtZW50VGVtcGxhdGUgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihcbiAgICAgICAgYEludmFsaWQgZGVjb3JhdGlvbiBlbGVtZW50IFwiJHtpdGVtLmRlY29yYXRpb24uZWxlbWVudH1cIjogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3hlc1wiKSB7XG4gICAgICBsZXQgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IHRydWU7XG4gICAgICBsZXQgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICAgICAgaXRlbS5yYW5nZSxcbiAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgKTtcblxuICAgICAgY2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5zb3J0KChyMSwgcjIpID0+IHtcbiAgICAgICAgaWYgKHIxLnRvcCA8IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChyMS50b3AgPiByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudChsaW5lLCBjbGllbnRSZWN0LCBib3VuZGluZ1JlY3QpO1xuICAgICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChsaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgY29uc3QgYm91bmRzID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGJvdW5kcy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIHBvc2l0aW9uRWxlbWVudChib3VuZHMsIGJvdW5kaW5nUmVjdCwgYm91bmRpbmdSZWN0KTtcblxuICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQoYm91bmRzKTtcbiAgICB9XG5cbiAgICBncm91cENvbnRhaW5lci5hcHBlbmQoaXRlbUNvbnRhaW5lcik7XG4gICAgaXRlbS5jb250YWluZXIgPSBpdGVtQ29udGFpbmVyO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgaXRlbUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtYWN0aXZhYmxlPScxJ11cIilcbiAgICApO1xuICAgIGlmIChpdGVtLmNsaWNrYWJsZUVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oaXRlbUNvbnRhaW5lci5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIGNvbnRhaW5lciBlbGVtZW50LCBhZnRlciBtYWtpbmcgc3VyZSBpdCBleGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1aXJlQ29udGFpbmVyKCkge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGdyb3VwSWQpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtZ3JvdXBcIiwgZ3JvdXBOYW1lKTtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ3JvdXAgY29udGFpbmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXJDb250YWluZXIoKSB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhZGQsIHJlbW92ZSwgdXBkYXRlLCBjbGVhciwgaXRlbXMsIHJlcXVlc3RMYXlvdXQgfTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2lsbCByZWxheW91dCBhbGwgdGhlIGRlY29yYXRpb25zIHdoZW4gdGhlIGRvY3VtZW50IGJvZHkgaXMgcmVzaXplZC5cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgbGFzdFNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RTaXplLndpZHRoID09PSBib2R5LmNsaWVudFdpZHRoICYmXG4gICAgICAgIGxhc3RTaXplLmhlaWdodCA9PT0gYm9keS5jbGllbnRIZWlnaHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IGJvZHkuY2xpZW50V2lkdGgsXG4gICAgICAgIGhlaWdodDogYm9keS5jbGllbnRIZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAucmVxdWVzdExheW91dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShib2R5KTtcbiAgfSxcbiAgZmFsc2Vcbik7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4gKiBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2ssIGZhbHNlKTtcbn0pO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgLy8gVGhlcmUncyBhbiBvbi1nb2luZyBzZWxlY3Rpb24sIHRoZSB0YXAgd2lsbCBkaXNtaXNzIGl0IHNvIHdlIGRvbid0IGZvcndhcmQgaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgbGV0IGNsaWNrRXZlbnQgPSB7XG4gICAgZGVmYXVsdFByZXZlbnRlZDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZCxcbiAgICB4OiBldmVudC5jbGllbnRYICogcGl4ZWxSYXRpbyxcbiAgICB5OiBldmVudC5jbGllbnRZICogcGl4ZWxSYXRpbyxcbiAgICB0YXJnZXRFbGVtZW50OiBldmVudC50YXJnZXQub3V0ZXJIVE1MLFxuICAgIGludGVyYWN0aXZlRWxlbWVudDogbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChldmVudC50YXJnZXQpLFxuICB9O1xuXG4gIGlmIChoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTZW5kIHRoZSB0YXAgZGF0YSBvdmVyIHRoZSBKUyBicmlkZ2UgZXZlbiBpZiBpdCdzIGJlZW4gaGFuZGxlZCB3aXRoaW4gdGhlIHdlYiB2aWV3LCBzbyB0aGF0XG4gIC8vIGl0IGNhbiBiZSBwcmVzZXJ2ZWQgYW5kIHVzZWQgYnkgdGhlIHRvb2xraXQgaWYgbmVlZGVkLlxuICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uVGFwKEpTT04uc3RyaW5naWZ5KGNsaWNrRXZlbnQpKTtcblxuICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5cbi8vIFNlZS4gaHR0cHM6Ly9naXRodWIuY29tL0pheVBhbm96L2FyY2hpdGVjdHVyZS90cmVlL3RvdWNoLWhhbmRsaW5nL21pc2MvdG91Y2gtaGFuZGxpbmdcbmZ1bmN0aW9uIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgaW50ZXJhY3RpdmVUYWdzID0gW1xuICAgIFwiYVwiLFxuICAgIFwiYXVkaW9cIixcbiAgICBcImJ1dHRvblwiLFxuICAgIFwiY2FudmFzXCIsXG4gICAgXCJkZXRhaWxzXCIsXG4gICAgXCJpbnB1dFwiLFxuICAgIFwibGFiZWxcIixcbiAgICBcIm9wdGlvblwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzdWJtaXRcIixcbiAgICBcInRleHRhcmVhXCIsXG4gICAgXCJ2aWRlb1wiLFxuICBdO1xuICBpZiAoaW50ZXJhY3RpdmVUYWdzLmluZGV4T2YoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGVkaXRhYmxlIGJ5IHRoZSB1c2VyLlxuICBpZiAoXG4gICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKS50b0xvd2VyQ2FzZSgpICE9IFwiZmFsc2VcIlxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3MgcGFyZW50cyByZWN1cnNpdmVseSBiZWNhdXNlIHRoZSB0b3VjaCBtaWdodCBiZSBmb3IgZXhhbXBsZSBvbiBhbiA8ZW0+IGluc2lkZSBhIDxhPi5cbiAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgIHJldHVybiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vL1xuLy8gIGhpZ2hsaWdodC5qc1xuLy8gIHIyLW5hdmlnYXRvci1rb3RsaW5cbi8vXG4vLyAgT3JnYW5pemVkIGJ5IFRhZWh5dW4gS2ltIG9uIDYvMjcvMTkgZnJvbSByMi1uYXZpZ2F0b3ItanMuXG4vL1xuLy8gIENvcHlyaWdodCAyMDE5IFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHdoaWNoIGlzIGRldGFpbGVkXG4vLyAgaW4gdGhlIExJQ0VOU0UgZmlsZSBwcmVzZW50IGluIHRoZSBwcm9qZWN0IHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBzb3VyY2UgY29kZSBpcyBtYWludGFpbmVkLlxuLy9cblxuY29uc3QgUk9PVF9DTEFTU19SRURVQ0VfTU9USU9OID0gXCJyMi1yZWR1Y2UtbW90aW9uXCI7XG5jb25zdCBST09UX0NMQVNTX05PX0ZPT1ROT1RFUyA9IFwicjItbm8tcG9wdXAtZm9vbm90ZXNcIjtcbmNvbnN0IFBPUFVQX0RJQUxPR19DTEFTUyA9IFwicjItcG9wdXAtZGlhbG9nXCI7XG5jb25zdCBGT09UTk9URVNfQ09OVEFJTkVSX0NMQVNTID0gXCJyMi1mb290bm90ZS1jb250YWluZXJcIjtcbmNvbnN0IEZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNsb3NlXCI7XG5jb25zdCBGT09UTk9URV9GT1JDRV9TSE9XID0gXCJyMi1mb290bm90ZS1mb3JjZS1zaG93XCI7XG5jb25zdCBUVFNfSURfUFJFVklPVVMgPSBcInIyLXR0cy1wcmV2aW91c1wiO1xuY29uc3QgVFRTX0lEX05FWFQgPSBcInIyLXR0cy1uZXh0XCI7XG5jb25zdCBUVFNfSURfU0xJREVSID0gXCJyMi10dHMtc2xpZGVyXCI7XG5jb25zdCBUVFNfSURfQUNUSVZFX1dPUkQgPSBcInIyLXR0cy1hY3RpdmUtd29yZFwiO1xuY29uc3QgVFRTX0lEX0NPTlRBSU5FUiA9IFwicjItdHRzLXR4dFwiO1xuY29uc3QgVFRTX0lEX0lORk8gPSBcInIyLXR0cy1pbmZvXCI7XG5jb25zdCBUVFNfTkFWX0JVVFRPTl9DTEFTUyA9IFwicjItdHRzLWJ1dHRvblwiO1xuY29uc3QgVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UID0gXCJyMi10dHMtc3BlYWtpbmctZWxcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOID0gXCJyMi10dHMtc3BlYWtpbmctdHh0XCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9JTkpFQ1RFRF9QQVJFTlQgPSBcInIyLXR0cy1zcGVha2luZy10eHQtcGFyZW50XCI7XG5jb25zdCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUiA9IFwiUjJfSURfSElHSExJR0hUU19DT05UQUlORVJcIjtcbmNvbnN0IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9JRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9BUkVBXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXCI7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5jb25zdCBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSA9IFtcbiAgUE9QVVBfRElBTE9HX0NMQVNTLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTixcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4sXG4gIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQVJFQSxcbiAgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEsXG4gIFwicmVzaXplLXNlbnNvclwiLFxuXTtcbmNvbnN0IENMQVNTX1BBR0lOQVRFRCA9IFwicjItY3NzLXBhZ2luYXRlZFwiO1xuXG4vL2NvbnN0IElTX0RFViA9IChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldlwiKTtcbmNvbnN0IElTX0RFViA9IGZhbHNlO1xuY29uc3QgX2hpZ2hsaWdodHMgPSBbXTtcblxubGV0IF9oaWdobGlnaHRzQ29udGFpbmVyO1xubGV0IF9hbm5vdGF0aW9uQ29udGFpbmVyO1xubGV0IGxhc3RNb3VzZURvd25YID0gLTE7XG5sZXQgbGFzdE1vdXNlRG93blkgPSAtMTtcbmxldCBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSBmYWxzZTtcblxuY29uc3QgVVNFX1NWRyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjM7XG5jb25zdCBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC40NTtcblxuLy9jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSB7XG4gIGJsdWU6IDEwMCxcbiAgZ3JlZW46IDUwLFxuICByZWQ6IDIzMCxcbn07XG5cbmNvbnN0IEFOTk9UQVRJT05fV0lEVEggPSAxNTtcblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKF93aW4sIGhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gIGlmIChcbiAgICBoaWdobGlnaHRCb3VuZGluZy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSA9PSBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLm91dGxpbmUgPSBcIm5vbmVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgXCJ0cmFuc3BhcmVudFwiLFxuICAgIFwiaW1wb3J0YW50XCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYXMsIGhpZ2hsaWdodCkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgaGlnaGxpZ2h0QXJlYXMpIHtcbiAgICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gICAgY29uc3Qgb3BhY2l0eSA9IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGxcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gIGNvbnN0IGlkID0gaXNTVkdcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlkKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCkgPT4ge1xuICAgICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICAgIH0pO1xuICAgIGlmIChoaWdobGlnaHQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICAgIGlmIChpc1NWRykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbFwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICAvLyAgICBfaGlnaGxpZ2h0cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgLy8gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGEuc2VsZWN0aW9uSW5mbykpXG4gIC8vICAgICAgICByZXR1cm4gYS5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGggPCBiLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aFxuICAvLyAgICB9KVxuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcInRvdWNoc3RhcnRcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LmlkLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3VuZEhpZ2hsaWdodC5pZC5pbmNsdWRlcyhcIlIyX0FOTk9UQVRJT05fXCIpKTtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZXVwXCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCB0b3VjaGVkUG9zaXRpb24gPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVkUG9zaXRpb24sXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBsZXQgdG9QcmVzZXJ2ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW107XG4gICAgICAgICAgdG9DaGVjay5wdXNoKHRvUHJlc2VydmUpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRvQ2hlY2ssIHRvQWRkKTtcbiAgICAgICAgICBjaGVja092ZXJsYXBzKHRvQ2hlY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gY2hlY2tPdmVybGFwcyhyZWN0cykge1xuICBjb25zdCBzdGlsbE92ZXJsYXBpbmdSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJlY3QxIG9mIHJlY3RzKSB7XG4gICAgZm9yIChjb25zdCByZWN0MiBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhczEgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QxKSA+PSAwO1xuICAgICAgY29uc3QgaGFzMiA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDIpID49IDA7XG4gICAgICBpZiAoIWhhczEgfHwgIWhhczIpIHtcbiAgICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgICBpZiAoIWhhczEpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWhhczIpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiBvdmVybGFwIC0tLVwiKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMSBUT1A6JHtyZWN0MS50b3B9IEJPVFRPTToke3JlY3QxLmJvdHRvbX0gTEVGVDoke3JlY3QxLmxlZnR9IFJJR0hUOiR7cmVjdDEucmlnaHR9IFdJRFRIOiR7cmVjdDEud2lkdGh9IEhFSUdIVDoke3JlY3QxLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMiBUT1A6JHtyZWN0Mi50b3B9IEJPVFRPTToke3JlY3QyLmJvdHRvbX0gTEVGVDoke3JlY3QyLmxlZnR9IFJJR0hUOiR7cmVjdDIucmlnaHR9IFdJRFRIOiR7cmVjdDIud2lkdGh9IEhFSUdIVDoke3JlY3QyLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB4T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWChyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB4T3ZlcmxhcDogJHt4T3ZlcmxhcH1gKTtcbiAgICAgICAgICBjb25zdCB5T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWShyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB5T3ZlcmxhcDogJHt5T3ZlcmxhcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5sb2coYENMSUVOVCBSRUNUOiBvdmVybGFwcyAke3N0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIH1cbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgY29uc3QgcmVjdCA9IHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAocmFuZ2UsIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMpIHtcbiAgY29uc3QgcmFuZ2VDbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG4gIHJldHVybiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gICAgcmFuZ2VDbGllbnRSZWN0cyxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgY2xpZW50UmVjdHMsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY2hlY2tPdmVybGFwcyhuZXdSZWN0cyk7XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGVkKGRvY3VtZW50KSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX1BBR0lOQVRFRClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCkge1xuICBpZiAoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgaWYgKCFib2R5RXZlbnRMaXN0ZW5lcnNTZXQpIHtcbiAgICAgIGJvZHlFdmVudExpc3RlbmVyc1NldCA9IHRydWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vkb3duXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGxhc3RNb3VzZURvd25YID0gZXYuY2xpZW50WDtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWSA9IGV2LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNldXBcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blggLSBldi5jbGllbnRYKSA8IDMgJiZcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25ZIC0gZXYuY2xpZW50WSkgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlbW92ZVwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJ0b3VjaGVuZFwiLFxuICAgICAgICBmdW5jdGlvbiB0b3VjaEVuZChlKSB7XG4gICAgICAgICAgcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUik7XG5cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChfaGlnaGxpZ2h0c0NvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gX2hpZ2hsaWdodHNDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGhpZGVBbGxoaWdobGlnaHRzKCkge1xuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveUFsbGhpZ2hsaWdodHMoKSB7XG4gIGhpZGVBbGxoaWdobGlnaHRzKCk7XG4gIF9oaWdobGlnaHRzLnNwbGljZSgwLCBfaGlnaGxpZ2h0cy5sZW5ndGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzdHJveUhpZ2hsaWdodChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBsZXQgX2RvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGhpZ2hsaWdodCAmJiBpID49IDAgJiYgaSA8IF9oaWdobGlnaHRzLmxlbmd0aCkge1xuICAgIF9oaWdobGlnaHRzLnNwbGljZShpLCAxKTtcbiAgfVxuICBjb25zdCBoaWdobGlnaHRDb250YWluZXIgPSBfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaGlnaGxpZ2h0Q29udGFpbmVyKSB7XG4gICAgaGlnaGxpZ2h0Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2ZpVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChlbGVtZW50LCBjaGlsZCkge1xuICBsZXQgZm91bmQgPSAtMTtcbiAgbGV0IHRleHROb2RlSW5kZXggPSAtMTtcbiAgbGV0IHByZXZpb3VzV2FzRWxlbWVudCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBjb25zdCBpc1RleHQgPSBpc0NmaVRleHROb2RlKGNoaWxkTm9kZSk7XG4gICAgaWYgKGlzVGV4dCB8fCBwcmV2aW91c1dhc0VsZW1lbnQpIHtcbiAgICAgIHRleHROb2RlSW5kZXggKz0gMjtcbiAgICB9XG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgaWYgKGNoaWxkTm9kZSA9PT0gY2hpbGQpIHtcbiAgICAgICAgZm91bmQgPSB0ZXh0Tm9kZUluZGV4O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcHJldmlvdXNXYXNFbGVtZW50ID0gY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChub2RlMSwgbm9kZTIpIHtcbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMSA9PT0gbm9kZTIpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMS5jb250YWlucyhub2RlMikpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMi5jb250YWlucyhub2RlMSkpIHtcbiAgICByZXR1cm4gbm9kZTI7XG4gIH1cbiAgY29uc3Qgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBsZXQgcGFyZW50ID0gbm9kZTEucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgY29uc3Qgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBwYXJlbnQgPSBub2RlMi5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBsZXQgY29tbW9uQW5jZXN0b3IgPSBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoXG4gICAgKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH1cbiAgKTtcbiAgaWYgKCFjb21tb25BbmNlc3Rvcikge1xuICAgIGNvbW1vbkFuY2VzdG9yID0gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKChub2RlMkVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMkVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbW9uQW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIGZ1bGxRdWFsaWZpZWRTZWxlY3Rvcihub2RlKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZU5hbWU7XG4gIH1cbiAgLy9yZXR1cm4gY3NzUGF0aChub2RlLCBqdXN0U2VsZWN0b3IpO1xuICByZXR1cm4gY3NzUGF0aChub2RlLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIENPTExBUFNFRC5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYXdUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuVGV4dCA9IHJhd1RleHQudHJpbSgpLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhblRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFRFWFQgRU1QVFkuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZUluZm8gPSBjb252ZXJ0UmFuZ2UocmFuZ2UsIGZ1bGxRdWFsaWZpZWRTZWxlY3RvciwgY29tcHV0ZUNGSSk7XG4gIGlmICghcmFuZ2VJbmZvKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFJBTkdFIElORk8gRkFJTD8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoSVNfREVWICYmIERFQlVHX1ZJU1VBTFMpIHtcbiAgICBjb25zdCByZXN0b3JlZFJhbmdlID0gY29udmVydFJhbmdlSW5mbyh3aW4uZG9jdW1lbnQsIHJhbmdlSW5mbyk7XG4gICAgaWYgKHJlc3RvcmVkUmFuZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCA9PT0gcmFuZ2Uuc3RhcnRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQgPT09IHJhbmdlLmVuZE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRUQgT0tBWSAoZGV2IGNoZWNrKS5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFIEZBSUwgKGRldiBjaGVjaykuXCIpO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJTRUxFQ1RJT05cIixcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIk9SREVSRUQgUkFOR0UgRlJPTSBTRUxFQ1RJT05cIixcbiAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlJFU1RPUkVEIFJBTkdFXCIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0FOTk9UIFJFU1RPUkUgU0VMRUNUSU9OIFJBTkdFID8/IVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbyksXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiByYXdUZXh0LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrQmxhY2tsaXN0ZWQoZWwpIHtcbiAgbGV0IGJsYWNrbGlzdGVkSWQ7XG4gIGNvbnN0IGlkID0gZWwuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG4gIGlmIChpZCAmJiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSS5pbmRleE9mKGlkKSA+PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIElEOiBcIiArIGlkKTtcbiAgICBibGFja2xpc3RlZElkID0gaWQ7XG4gIH1cbiAgbGV0IGJsYWNrbGlzdGVkQ2xhc3M7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSkge1xuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoaXRlbSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBDTEFTUzogXCIgKyBpdGVtKTtcbiAgICAgIGJsYWNrbGlzdGVkQ2xhc3MgPSBpdGVtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChibGFja2xpc3RlZElkIHx8IGJsYWNrbGlzdGVkQ2xhc3MpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzUGF0aChub2RlLCBvcHRpbWl6ZWQpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBzdGVwcyA9IFtdO1xuICBsZXQgY29udGV4dE5vZGUgPSBub2RlO1xuICB3aGlsZSAoY29udGV4dE5vZGUpIHtcbiAgICBjb25zdCBzdGVwID0gX2Nzc1BhdGhTdGVwKGNvbnRleHROb2RlLCAhIW9wdGltaXplZCwgY29udGV4dE5vZGUgPT09IG5vZGUpO1xuICAgIGlmICghc3RlcCkge1xuICAgICAgYnJlYWs7IC8vIEVycm9yIC0gYmFpbCBvdXQgZWFybHkuXG4gICAgfVxuICAgIHN0ZXBzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgaWYgKHN0ZXAub3B0aW1pemVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29udGV4dE5vZGUgPSBjb250ZXh0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIHN0ZXBzLnJldmVyc2UoKTtcbiAgcmV0dXJuIHN0ZXBzLmpvaW4oXCIgPiBcIik7XG59XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9tYXN0ZXIvU291cmNlL2RldnRvb2xzL2Zyb250X2VuZC9jb21wb25lbnRzL0RPTVByZXNlbnRhdGlvblV0aWxzLmpzIzMxNlxuZnVuY3Rpb24gX2Nzc1BhdGhTdGVwKG5vZGUsIG9wdGltaXplZCwgaXNUYXJnZXROb2RlKSB7XG4gIGZ1bmN0aW9uIHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMobmQpIHtcbiAgICBjb25zdCBjbGFzc0F0dHJpYnV0ZSA9IG5kLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIGlmICghY2xhc3NBdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NBdHRyaWJ1dGVcbiAgICAgIC5zcGxpdCgvXFxzKy9nKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcCgobm0pID0+IHtcbiAgICAgICAgLy8gVGhlIHByZWZpeCBpcyByZXF1aXJlZCB0byBzdG9yZSBcIl9fcHJvdG9fX1wiIGluIGEgb2JqZWN0LWJhc2VkIG1hcC5cbiAgICAgICAgcmV0dXJuIFwiJFwiICsgbm07XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlkU2VsZWN0b3IoaWRkKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZCk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRlbnQpIHtcbiAgICBpZiAoaXNDU1NJZGVudGlmaWVyKGlkZW50KSkge1xuICAgICAgcmV0dXJuIGlkZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEVzY2FwZUZpcnN0ID0gL14oPzpbMC05XXwtWzAtOS1dPykvLnRlc3QoaWRlbnQpO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlkZW50Lmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGlkZW50LnJlcGxhY2UoLy4vZywgZnVuY3Rpb24gKGMsIGlpKSB7XG4gICAgICByZXR1cm4gKHNob3VsZEVzY2FwZUZpcnN0ICYmIGlpID09PSAwKSB8fCAhaXNDU1NJZGVudENoYXIoYylcbiAgICAgICAgPyBlc2NhcGVBc2NpaUNoYXIoYywgaWkgPT09IGxhc3RJbmRleClcbiAgICAgICAgOiBjO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlQXNjaWlDaGFyKGMsIGlzTGFzdCkge1xuICAgIHJldHVybiBcIlxcXFxcIiArIHRvSGV4Qnl0ZShjKSArIChpc0xhc3QgPyBcIlwiIDogXCIgXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9IZXhCeXRlKGMpIHtcbiAgICBsZXQgaGV4Qnl0ZSA9IGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gICAgaWYgKGhleEJ5dGUubGVuZ3RoID09PSAxKSB7XG4gICAgICBoZXhCeXRlID0gXCIwXCIgKyBoZXhCeXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGV4Qnl0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRDaGFyKGMpIHtcbiAgICBpZiAoL1thLXpBLVowLTlfLV0vLnRlc3QoYykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApID49IDB4YTA7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50aWZpZXIodmFsdWUpIHtcbiAgICByZXR1cm4gL14tP1thLXpBLVpfXVthLXpBLVowLTlfLV0qJC8udGVzdCh2YWx1ZSk7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBlbGVtZW50ID0gbm9kZTtcblxuICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cbiAgaWYgKG9wdGltaXplZCkge1xuICAgIGlmIChpZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogaWRTZWxlY3RvcihpZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImJvZHlcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJoZWFkXCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaHRtbFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBsb3dlckNhc2VOYW1lLCAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBub2RlTmFtZSA9IGxvd2VyQ2FzZU5hbWU7IC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7XG4gIGlmIChpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUgKyBpZFNlbGVjdG9yKGlkKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50IHx8IHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhlbGVtZW50KTtcblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICBpZiAocHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmVlZHNDbGFzc05hbWVzID0gZmFsc2U7XG4gIGxldCBuZWVkc050aENoaWxkID0gZmFsc2U7XG4gIGxldCBvd25JbmRleCA9IC0xO1xuICBsZXQgZWxlbWVudEluZGV4ID0gLTE7XG4gIGNvbnN0IHNpYmxpbmdzID0gcGFyZW50LmNoaWxkcmVuO1xuXG4gIGZvciAoXG4gICAgbGV0IGkgPSAwO1xuICAgIChvd25JbmRleCA9PT0gLTEgfHwgIW5lZWRzTnRoQ2hpbGQpICYmIGkgPCBzaWJsaW5ncy5sZW5ndGg7XG4gICAgKytpXG4gICkge1xuICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICBpZiAoc2libGluZy5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBlbGVtZW50SW5kZXggKz0gMTtcbiAgICBpZiAoc2libGluZyA9PT0gbm9kZSkge1xuICAgICAgb3duSW5kZXggPSBlbGVtZW50SW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNpYmxpbmcubm9kZU5hbWVJbkNvcnJlY3RDYXNlKClcbiAgICBjb25zdCBzaWJsaW5nTmFtZSA9XG4gICAgICAoc2libGluZy5sb2NhbE5hbWUgJiYgc2libGluZy5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIHNpYmxpbmcubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc2libGluZ05hbWUgIT09IG5vZGVOYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmVlZHNDbGFzc05hbWVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IG93bkNsYXNzTmFtZXMgPSBbXTtcbiAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBvd25DbGFzc05hbWVzLnB1c2goYXJySXRlbSk7XG4gICAgfSk7XG4gICAgbGV0IG93bkNsYXNzTmFtZUNvdW50ID0gb3duQ2xhc3NOYW1lcy5sZW5ndGg7XG5cbiAgICBpZiAob3duQ2xhc3NOYW1lQ291bnQgPT09IDApIHtcbiAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhzaWJsaW5nKTtcbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIGlmIChzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc2libGluZ0NsYXNzIG9mIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIGNvbnN0IGluZCA9IG93bkNsYXNzTmFtZXMuaW5kZXhPZihzaWJsaW5nQ2xhc3MpO1xuICAgICAgaWYgKGluZCA8IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG93bkNsYXNzTmFtZXMuc3BsaWNlKGluZCwgMSk7IC8vIGRlbGV0ZSBvd25DbGFzc05hbWVzW3NpYmxpbmdDbGFzc107XG5cbiAgICAgIGlmICghLS1vd25DbGFzc05hbWVDb3VudCkge1xuICAgICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdCA9IG5vZGVOYW1lO1xuICBpZiAoXG4gICAgaXNUYXJnZXROb2RlICYmXG4gICAgbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIilcbiAgKSB7XG4gICAgcmVzdWx0ICs9ICdbdHlwZT1cIicgKyBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgKyAnXCJdJztcbiAgfVxuICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgIHJlc3VsdCArPSBcIjpudGgtY2hpbGQoXCIgKyAob3duSW5kZXggKyAxKSArIFwiKVwiO1xuICB9IGVsc2UgaWYgKG5lZWRzQ2xhc3NOYW1lcykge1xuICAgIGZvciAoY29uc3QgcHJlZml4ZWROYW1lIG9mIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICByZXN1bHQgKz0gXCIuXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQocHJlZml4ZWROYW1lLnN1YnN0cigxKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpbWl6ZWQ6IGZhbHNlLFxuICAgIHZhbHVlOiByZXN1bHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDRkkobm9kZSkge1xuICAvLyBUT0RPOiBoYW5kbGUgY2hhcmFjdGVyIHBvc2l0aW9uIGluc2lkZSB0ZXh0IG5vZGVcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBjZmkgPSBcIlwiO1xuXG4gIGxldCBjdXJyZW50RWxlbWVudCA9IG5vZGU7XG4gIHdoaWxlIChcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlICYmXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgKSB7XG4gICAgY29uc3QgYmxhY2tsaXN0ZWQgPSBjaGVja0JsYWNrbGlzdGVkKGN1cnJlbnRFbGVtZW50KTtcbiAgICBpZiAoIWJsYWNrbGlzdGVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbjtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudEluZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuW2ldKSB7XG4gICAgICAgICAgY3VycmVudEVsZW1lbnRJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudEluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXggPSAoY3VycmVudEVsZW1lbnRJbmRleCArIDEpICogMjtcbiAgICAgICAgY2ZpID1cbiAgICAgICAgICBjZmlJbmRleCArXG4gICAgICAgICAgKGN1cnJlbnRFbGVtZW50LmlkID8gXCJbXCIgKyBjdXJyZW50RWxlbWVudC5pZCArIFwiXVwiIDogXCJcIikgK1xuICAgICAgICAgIChjZmkubGVuZ3RoID8gXCIvXCIgKyBjZmkgOiBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIFwiL1wiICsgY2ZpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlSGlnaGxpZ2h0KGxvY2F0aW9ucywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbiwgdHlwZSkge1xuICBjb25zdCByYW5nZUluZm8gPSBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb25zKTtcbiAgY29uc3QgdW5pcXVlU3RyID0gYCR7cmFuZ2VJbmZvLmNmaX0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5zdGFydE9mZnNldH0ke3JhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLmVuZE9mZnNldH1gO1xuXG4gIGNvbnN0IGhhc2ggPSByZXF1aXJlKFwiaGFzaC5qc1wiKTtcbiAgY29uc3Qgc2hhMjU2SGV4ID0gaGFzaC5zaGEyNTYoKS51cGRhdGUodW5pcXVlU3RyKS5kaWdlc3QoXCJoZXhcIik7XG5cbiAgdmFyIGlkO1xuICBpZiAodHlwZSA9PSBJRF9ISUdITElHSFRTX0NPTlRBSU5FUikge1xuICAgIGlkID0gXCJSMl9ISUdITElHSFRfXCIgKyBzaGEyNTZIZXg7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBcIlIyX0FOTk9UQVRJT05fXCIgKyBzaGEyNTZIZXg7XG4gIH1cblxuICBkZXN0cm95SGlnaGxpZ2h0KGlkKTtcblxuICBjb25zdCBoaWdobGlnaHQgPSB7XG4gICAgY29sb3I6IGNvbG9yID8gY29sb3IgOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgaWQsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIHJhbmdlSW5mbyxcbiAgfTtcbiAgX2hpZ2hsaWdodHMucHVzaChoaWdobGlnaHQpO1xuICBjcmVhdGVIaWdobGlnaHREb20oXG4gICAgd2luZG93LFxuICAgIGhpZ2hsaWdodCxcbiAgICB0eXBlID09IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uKSB7XG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIHNlbGVjdGlvbkluZm8sXG4gICAgY29sb3IsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uKGlkKSB7XG4gIGxldCBpID0gLTE7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChpID09IF9oaWdobGlnaHRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gIHZhciBsb2NhdGlvbnMgPSB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24oaGlnaGxpZ2h0LnJhbmdlSW5mbyksXG4gIH07XG5cbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgbG9jYXRpb25zLFxuICAgIGhpZ2hsaWdodC5jb2xvcixcbiAgICB0cnVlLFxuICAgIElEX0FOTk9UQVRJT05fQ09OVEFJTkVSXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodERvbSh3aW4sIGhpZ2hsaWdodCwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2NhbGUgPVxuICAgIDEgL1xuICAgICh3aW4uUkVBRElVTTIgJiYgd2luLlJFQURJVU0yLmlzRml4ZWRMYXlvdXRcbiAgICAgID8gd2luLlJFQURJVU0yLmZ4bFZpZXdwb3J0U2NhbGVcbiAgICAgIDogMSk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBoaWdobGlnaHRzQ29udGFpbmVyID0gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpO1xuICBjb25zdCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBoaWdobGlnaHQuaWQpO1xuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUik7XG5cbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgaGlnaGxpZ2h0UGFyZW50LnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBpZiAoaGlnaGxpZ2h0LnBvaW50ZXJJbnRlcmFjdGlvbikge1xuICAgIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIsIFwiMVwiKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgbGV0IGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnO1xuICBjb25zdCByb3VuZGVkQ29ybmVyID0gMztcbiAgY29uc3QgdW5kZXJsaW5lVGhpY2tuZXNzID0gMjtcbiAgY29uc3Qgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgPSAzO1xuICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gIGxldCBleHRyYSA9IFwiXCI7XG4gIGNvbnN0IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCA9XG4gICAgZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGhpZ2hsaWdodC5pZCk7XG5cbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBsZXQgYW5ub3RhdGlvbk9mZnNldDtcblxuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPVxuICAgICAgcGFyc2VJbnQoXG4gICAgICAgIChyYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSB4T2Zmc2V0KSAvIHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICApICsgMTtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPSBwYXJzZUludChcbiAgICAgIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAvIHdpbmRvdy5pbm5lcldpZHRoICsgMVxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAodXNlU1ZHKSB7XG4gICAgICBjb25zdCBib3JkZXJUaGlja25lc3MgPSAwO1xuICAgICAgaWYgKCFoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdSZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgXCJyZWN0XCJcbiAgICAgICk7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgZmlsbDogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pICFpbXBvcnRhbnQ7IGZpbGwtb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50OyBzdHJva2Utd2lkdGg6IDA7YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNjYWxlID0gc2NhbGU7XG5cbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnhcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnlcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QubGVmdCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInlcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QudG9wIC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmhlaWdodCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC53aWR0aCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdSZWN0KTtcbiAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCA+IHJvdW5kZWRDb3JuZXIgPyByb3VuZGVkQ29ybmVyIDogMDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgbGluZU9mZnNldCkgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAtXG4gICAgICAgICAgICAgIGxpbmVPZmZzZXQpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeSA9XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC1cbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgICAgaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcblxuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGgpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9IGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgeSA9IChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArIGxpbmVPZmZzZXQpICogc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICBjb25zdCByZ2IgPSBNYXRoLnJvdW5kKDB4ZmZmZmZmICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIGNvbnN0IHIgPSByZ2IgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAocmdiID4+IDgpICYgMjU1O1xuICAgICAgICBjb25zdCBiID0gcmdiICYgMjU1O1xuICAgICAgICBleHRyYSA9IGBvdXRsaW5lLWNvbG9yOiByZ2IoJHtyfSwgJHtnfSwgJHtifSk7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICAgIGV4dHJhICs9IGBib3JkZXItYm90dG9tOiAke3VuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlfXB4IHNvbGlkIHJnYmEoJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5yZWRcbiAgICAgICAgICB9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnRgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICBoaWdobGlnaHRBcmVhLnNjYWxlID0gc2NhbGU7XG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC50b3AgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWEpO1xuICAgICAgaWYgKCFERUJVR19WSVNVQUxTICYmIGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIC8vaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDtgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS53aWR0aCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3Qud2lkdGggKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmxlZnQgPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmxlZnQgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5oZWlnaHQgLyAyIC1cbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYUxpbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX1hNTF9OQU1FU1BBQ0UsIFwic3ZnXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc2V0QXR0cmlidXRlKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpO1xuICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWRyk7XG4gIH1cblxuICBjb25zdCBoaWdobGlnaHRCb3VuZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSk7XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnNjYWxlID0gc2NhbGU7XG5cbiAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgb3V0bGluZS1jb2xvcjogbWFnZW50YTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YFxuICAgICk7XG4gIH1cblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgIHRvcDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9O1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC50b3AgKiBzY2FsZX1weGA7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRCb3VuZGluZyk7XG4gIGhpZ2hsaWdodHNDb250YWluZXIuYXBwZW5kKGhpZ2hsaWdodFBhcmVudCk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodFBhcmVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlKHJhbmdlLCBnZXRDc3NTZWxlY3RvciwgY29tcHV0ZUVsZW1lbnRDRkkpIHtcbiAgY29uc3Qgc3RhcnRJc0VsZW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lclxuICAgIDogcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFzdGFydENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgaWYgKHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50XG4gICk7XG4gIGNvbnN0IGVuZElzRWxlbWVudCA9IHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnQgPSBlbmRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lclxuICAgIDogcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFlbmRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBlbmRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihyYW5nZS5lbmRDb250YWluZXIpO1xuICBpZiAoZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBjb21tb25FbGVtZW50QW5jZXN0b3IgPSBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQoXG4gICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICk7XG4gIGlmICghY29tbW9uRWxlbWVudEFuY2VzdG9yKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gTk8gUkFOR0UgQ09NTU9OIEFOQ0VTVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpIHtcbiAgICBjb25zdCByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCA9XG4gICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgPyByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lclxuICAgICAgICA6IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgJiZcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICkge1xuICAgICAgaWYgKGNvbW1vbkVsZW1lbnRBbmNlc3RvciAhPT0gcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCI+Pj4+Pj4gQ09NTU9OIEFOQ0VTVE9SIENPTlRBSU5FUiBESUZGPz8hXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3Rvcihjb21tb25FbGVtZW50QW5jZXN0b3IpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IocmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgcm9vdEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShjb21tb25FbGVtZW50QW5jZXN0b3IpO1xuICBjb25zdCBzdGFydEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShzdGFydENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBlbmRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGxldCBjZmk7XG4gIGlmIChyb290RWxlbWVudENmaSAmJiBzdGFydEVsZW1lbnRDZmkgJiYgZW5kRWxlbWVudENmaSkge1xuICAgIGxldCBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmk7XG4gICAgaWYgKCFzdGFydElzRWxlbWVudCkge1xuICAgICAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBzdGFydEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5zdGFydE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0IDwgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5zdGFydE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmk7XG4gICAgaWYgKCFlbmRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApO1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIGVuZEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA8IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2UuZW5kT2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLmVuZE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNmaSA9XG4gICAgICByb290RWxlbWVudENmaSArXG4gICAgICBcIixcIiArXG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIikgK1xuICAgICAgXCIsXCIgK1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogcmFuZ2UuZW5kT2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiByYW5nZS5zdGFydE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGlkKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFjbGllbnRSZWN0cykgcmV0dXJuO1xuXG4gIHZhciB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gIHZhciBtYXhIZWlnaHQgPSB0b3BDbGllbnRSZWN0LmhlaWdodDtcbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKGNsaWVudFJlY3QudG9wIDwgdG9wQ2xpZW50UmVjdC50b3ApIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0O1xuICAgIGlmIChjbGllbnRSZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICB2YXIgbmV3VG9wID0gdG9wQ2xpZW50UmVjdC50b3A7XG5cbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGJvdW5kaW5nQXJlYXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgICAgICk7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIC8vZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGJvdW5kaW5nQXJlYXMuc25hcHNob3RMZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBib3VuZGluZ0FyZWFzLmxlbmd0aCB8IDA7XG4gICAgICAgIGkgPCBsZW47XG4gICAgICAgIGkgPSAoaSArIDEpIHwgMFxuICAgICAgKSB7XG4gICAgICAgIHZhciBib3VuZGluZ0FyZWEgPSBib3VuZGluZ0FyZWFzW2ldO1xuICAgICAgICBpZiAoTWF0aC5hYnMoYm91bmRpbmdBcmVhLnJlY3QudG9wIC0gKG5ld1RvcCAtIHlPZmZzZXQpKSA8IDMpIHtcbiAgICAgICAgICBuZXdUb3AgKz0gYm91bmRpbmdBcmVhLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGZvdW5kKTtcbiAgfVxuXG4gIHRvcENsaWVudFJlY3QudG9wID0gbmV3VG9wO1xuICB0b3BDbGllbnRSZWN0LmhlaWdodCA9IG1heEhlaWdodDtcblxuICByZXR1cm4gdG9wQ2xpZW50UmVjdDtcbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG5cbiAgcmV0dXJuIGNsaWVudFJlY3RzO1xufVxuXG5mdW5jdGlvbiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBwYXJ0aWFsQ2ZpOiByYW5nZUluZm8uY2ZpLFxuICAgIGRvbVJhbmdlOiB7XG4gICAgICBzdGFydDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uZW5kT2Zmc2V0LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgY2ZpOiBsb2NhdGlvbi5wYXJ0aWFsQ2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgdmFyIHNpemUgPSB7XG4gICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgIGxlZnQ6IGNsaWVudFJlY3RzWzBdLmxlZnQsXG4gICAgd2lkdGg6IGNsaWVudFJlY3RzWzBdLndpZHRoLFxuICAgIHRvcDogY2xpZW50UmVjdHNbMF0udG9wLFxuICAgIGhlaWdodDogY2xpZW50UmVjdHNbMF0uaGVpZ2h0LFxuICB9O1xuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhhbmRsZUJvdW5kcyA9IHtcbiAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0LFxuICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICB0b3A6IGNsaWVudFJlY3QudG9wLFxuICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCb3VuZHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2Nyb2xsTW9kZShmbGFnKSB7XG4gIGlmICghZmxhZykge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX1BBR0lOQVRFRCk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfVxufVxuXG4vKlxuIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7IC8vIElFID49IDk7IG90aGVyIGJyb3dzZXJzXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgLy9hbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTsgLy9oZXJlIHlvdSBkcmF3IHlvdXIgb3duIG1lbnVcbiAgICAgICAgICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy9sZXQgZ2V0Q3NzU2VsZWN0b3IgPSBmdWxsUXVhbGlmaWVkU2VsZWN0b3I7XG4gICAgICAgICAgICBcblx0XHRcdGxldCBzdHIgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRsZXQgc2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCk7XG5cdFx0XHRsZXQgcG9zID0gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8se3JlZDoxMCxncmVlbjo1MCxibHVlOjIzMH0sdHJ1ZSk7XG5cdFx0XHRsZXQgcmV0MiA9IGNyZWF0ZUFubm90YXRpb24ocG9zLmlkKTtcblx0XHRcdFxuICB9LCBmYWxzZSk7XG4gICAgfSBlbHNlIHsgLy8gSUUgPCA5XG4gICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbmNvbnRleHRtZW51JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTtcbiAgICAgICAgICAgIHdpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4qL1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMiBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgaXNTY3JvbGxNb2RlRW5hYmxlZCwgcGFnZVdpZHRoIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGdldENzc1NlbGVjdG9yIH0gZnJvbSBcImNzcy1zZWxlY3Rvci1nZW5lcmF0b3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaXJzdFZpc2libGVMb2NhdG9yKCkge1xuICBjb25zdCBlbGVtZW50ID0gZmluZEZpcnN0VmlzaWJsZUJsb2NrRWxlbWVudCgpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHtcbiAgICAgIGNzc1NlbGVjdG9yOiBnZXRDc3NTZWxlY3RvcihlbGVtZW50KSxcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogZWxlbWVudC50ZXh0Q29udGVudCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50KCkge1xuICByZXR1cm4gZmluZEVsZW1lbnQoXG4gICAgZG9jdW1lbnQuYm9keSxcbiAgICAoZWxlbWVudCkgPT4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlzcGxheSAhPSBcImJsb2NrXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmluZEVsZW1lbnQocm9vdEVsZW1lbnQsIHNob3VsZElnbm9yZSkge1xuICB2YXIgZm91bmRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChjaGlsZCwgc2hvdWxkSWdub3JlKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRWxlbWVudFZpc2libGUocm9vdEVsZW1lbnQsIHVuZGVmaW5lZCwgc2hvdWxkSWdub3JlKSkge1xuICAgIHJldHVybiByb290RWxlbWVudDtcbiAgfVxufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKGVsZW1lbnQsIGRvbVJlY3QgLyogbnVsbGFibGUgKi8sIHNob3VsZElnbm9yZSkge1xuICBpZiAoXG4gICAgcmVhZGl1bS5pc0ZpeGVkTGF5b3V0IHx8XG4gICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fFxuICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoXG4gICAgIWRvY3VtZW50IHx8XG4gICAgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fFxuICAgICFkb2N1bWVudC5ib2R5IHx8XG4gICAgKHNob3VsZElnbm9yZSAmJiBzaG91bGRJZ25vcmUoZWxlbWVudCkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlY3QubGVmdCA8IHBhZ2VXaWR0aDtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIHJlZmxvd2FibGUgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzUmVmbG93YWJsZSA9IHRydWU7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgLy8gU2V0dXBzIHRoZSBgdmlld3BvcnRgIG1ldGEgdGFnIHRvIGRpc2FibGUgem9vbWluZy5cbiAgbGV0IG1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidmlld3BvcnRcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFxuICAgIFwiY29udGVudFwiLFxuICAgIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHNocmluay10by1maXQ9bm9cIlxuICApO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGEpO1xufSk7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwibG9jYXRpb25zIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IiLCJmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50IiwiZmluZEVsZW1lbnQiLCJkaXNwbGF5Iiwicm9vdEVsZW1lbnQiLCJzaG91bGRJZ25vcmUiLCJpc0VsZW1lbnRWaXNpYmxlIiwiZG9tUmVjdCIsInJlYWRpdW0iLCJlbFN0eWxlIiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyIsImlzUmVmbG93YWJsZSIsIm1ldGEiLCJoZWFkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file From 41e2bdcff1fbeaeb38a8f53cb0ecca05a2cc2165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 5 Apr 2022 15:56:55 +0200 Subject: [PATCH 15/59] Start the iteration from a CSS selector --- .../src/main/assets/_scripts/src/dom.js | 2 + .../assets/readium/scripts/readium-fixed.js | 2 +- .../readium/scripts/readium-reflowable.js | 2 +- .../readium/r2/navigator/R2BasicWebView.kt | 5 +++ .../navigator/epub/EpubNavigatorFragment.kt | 13 ++++++ .../services/content/ContentIterator.kt | 40 +++++++++++++++---- 6 files changed, 55 insertions(+), 9 deletions(-) diff --git a/readium/navigator/src/main/assets/_scripts/src/dom.js b/readium/navigator/src/main/assets/_scripts/src/dom.js index 196a024ff6..4a9ba00d3a 100644 --- a/readium/navigator/src/main/assets/_scripts/src/dom.js +++ b/readium/navigator/src/main/assets/_scripts/src/dom.js @@ -14,6 +14,8 @@ export function findFirstVisibleLocator() { } return { + href: "#", + type: "application/xhtml+xml", locations: { cssSelector: getCssSelector(element), }, diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js index bb6eb18cc4..a38ddfb480 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findFirstVisibleBlockElement();\n\n if (!element) {\n return undefined;\n }\n\n return {\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findFirstVisibleBlockElement() {\n return findElement(document.body, function (element) {\n return window.getComputedStyle(element).display != "block";\n });\n}\n\nfunction findElement(rootElement, shouldIgnore) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var element = findElement(child, shouldIgnore);\n\n if (element) {\n return element;\n }\n }\n\n if (isElementVisible(rootElement, undefined, shouldIgnore)) {\n return rootElement;\n }\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction isElementVisible(element, domRect\n/* nullable */\n, shouldIgnore) {\n if (readium.isFixedLayout || element === document.body || element === document.documentElement) {\n return true;\n }\n\n if (!document || !document.documentElement || !document.body || shouldIgnore && shouldIgnore(element)) {\n return false;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n return rect.left < pageWidth;\n }\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bGEsaUJBaEJkO0FBaUJmUSxFQUFBQSxjQUFjLEVBQUVBLGNBakJEO0FBbUJmO0FBQ0F1WSxFQUFBQSx1QkFBdUIsRUFBRUEsdUJBQXVCQTtBQXBCakMsQ0FBakIsRUF1QkE7O0FBQ0FoakIsTUFBTSxDQUFDd2UsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBeGUsTUFBTSxDQUFDc2UsZUFBUCxHQUF5QkEsZUFBekI7QUFDQXRlLE1BQU0sQ0FBQ29YLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQXBYLE1BQU0sQ0FBQzJZLHVCQUFQLEdBQWlDQSx1QkFBakM7QUFDQTNZLE1BQU0sQ0FBQzJpQixnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0EzaUIsTUFBTSxDQUFDMGlCLDJCQUFQLEdBQXFDQSwyQkFBckM7QUFDQTFpQixNQUFNLENBQUM4aUIsYUFBUCxHQUF1QkEsYUFBdkIsQzs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTlpQixNQUFNLENBQUN3akIsT0FBUCxDQUFlN0UsYUFBZixHQUErQixJQUEvQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LWZpeGVkLmpzP2Q5OWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcHJveFNlYXJjaCBmcm9tICdhcHByb3gtc3RyaW5nLW1hdGNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHByb3gtc3RyaW5nLW1hdGNoJykuTWF0Y2h9IFN0cmluZ01hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBNYXRjaFxuICogQHByb3Age251bWJlcn0gc3RhcnQgLSBTdGFydCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gZW5kIC0gRW5kIG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBzY29yZSAtXG4gKiAgIFNjb3JlIGZvciB0aGUgbWF0Y2ggYmV0d2VlbiAwIGFuZCAxLjAsIHdoZXJlIDEuMCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNoXG4gKiAgIGZvciB0aGUgcXVvdGUgYW5kIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoZXMgZm9yIGBzdHJgIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhFcnJvcnNcbiAqIEByZXR1cm4ge1N0cmluZ01hdGNoW119XG4gKi9cbmZ1bmN0aW9uIHNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycykge1xuICAvLyBEbyBhIGZhc3Qgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLiBUaGUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGxpYnJhcnlcbiAgLy8gZG9lc24ndCBjdXJyZW50bHkgaW5jb3Jwb3JhdGUgdGhpcyBvcHRpbWl6YXRpb24gaXRzZWxmLlxuICBsZXQgbWF0Y2hQb3MgPSAwO1xuICBsZXQgZXhhY3RNYXRjaGVzID0gW107XG4gIHdoaWxlIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICBtYXRjaFBvcyA9IHRleHQuaW5kZXhPZihzdHIsIG1hdGNoUG9zKTtcbiAgICBpZiAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgICBleGFjdE1hdGNoZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtYXRjaFBvcyxcbiAgICAgICAgZW5kOiBtYXRjaFBvcyArIHN0ci5sZW5ndGgsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgIH0pO1xuICAgICAgbWF0Y2hQb3MgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4YWN0TWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGV4YWN0TWF0Y2hlcztcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBubyBleGFjdCBtYXRjaGVzLCBkbyBhIG1vcmUgZXhwZW5zaXZlIHNlYXJjaCBmb3IgbWF0Y2hlc1xuICAvLyB3aXRoIGVycm9ycy5cbiAgcmV0dXJuIGFwcHJveFNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGB0ZXh0YCBhbmQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gdGV4dE1hdGNoU2NvcmUodGV4dCwgc3RyKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gYHNjb3JlTWF0Y2hgIHdpbGwgbmV2ZXIgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKi9cbiAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgc3RyLCBzdHIubGVuZ3RoKTtcblxuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgcmV0dXJuIDEgLSAobWF0Y2hlc1swXS5lcnJvcnMgLyBzdHIubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoIGZvciBgcXVvdGVgIGluIGB0ZXh0YC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBpZiBubyBtYXRjaCBleGNlZWRpbmcgdGhlIG1pbmltdW0gcXVhbGl0eSB0aHJlc2hvbGQgd2FzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRG9jdW1lbnQgdGV4dCB0byBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdW90ZSAtIFN0cmluZyB0byBmaW5kIHdpdGhpbiBgdGV4dGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IC1cbiAqICAgQ29udGV4dCBpbiB3aGljaCB0aGUgcXVvdGUgb3JpZ2luYWxseSBhcHBlYXJlZC4gVGhpcyBpcyB1c2VkIHRvIGNob29zZSB0aGVcbiAqICAgYmVzdCBtYXRjaC5cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF0gLSBFeHBlY3RlZCB0ZXh0IGJlZm9yZSB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF0gLSBFeHBlY3RlZCB0ZXh0IGFmdGVyIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge251bWJlcn0gW2NvbnRleHQuaGludF0gLSBFeHBlY3RlZCBvZmZzZXQgb2YgbWF0Y2ggd2l0aGluIHRleHRcbiAqIEByZXR1cm4ge01hdGNofG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1b3RlKHRleHQsIHF1b3RlLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKHF1b3RlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hvb3NlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gYWxsb3cgZm9yIHRoZSBpbml0aWFsIHNlYXJjaC5cbiAgLy8gVGhpcyBjaG9pY2UgaW52b2x2ZXMgYSB0cmFkZW9mZiBiZXR3ZWVuOlxuICAvL1xuICAvLyAgLSBSZWNhbGwgKHByb3BvcnRpb24gb2YgXCJnb29kXCIgbWF0Y2hlcyBmb3VuZClcbiAgLy8gIC0gUHJlY2lzaW9uIChwcm9wb3J0aW9uIG9mIG1hdGNoZXMgZm91bmQgd2hpY2ggYXJlIFwiZ29vZFwiKVxuICAvLyAgLSBDb3N0IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgb2YgcHJvY2Vzc2luZyB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgWzFdXG4gIC8vXG4gIC8vIFsxXSBTcGVjaWZpY2FsbHksIHRoZSBleHBlY3RlZC10aW1lIGNvbXBsZXhpdHkgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGlzXG4gIC8vICAgICBgTygobWF4RXJyb3JzIC8gMzIpICogdGV4dC5sZW5ndGgpYC4gU2VlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBkb2NzLlxuICBjb25zdCBtYXhFcnJvcnMgPSBNYXRoLm1pbigyNTYsIHF1b3RlLmxlbmd0aCAvIDIpO1xuXG4gIC8vIEZpbmQgY2xvc2VzdCBtYXRjaGVzIGZvciBgcXVvdGVgIGluIGB0ZXh0YCBiYXNlZCBvbiBlZGl0IGRpc3RhbmNlLlxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHF1b3RlLCBtYXhFcnJvcnMpO1xuXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgYSBtYXRjaCBjYW5kaWRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nTWF0Y2h9IG1hdGNoXG4gICAqL1xuICBjb25zdCBzY29yZU1hdGNoID0gbWF0Y2ggPT4ge1xuICAgIGNvbnN0IHF1b3RlV2VpZ2h0ID0gNTA7IC8vIFNpbWlsYXJpdHkgb2YgbWF0Y2hlZCB0ZXh0IHRvIHF1b3RlLlxuICAgIGNvbnN0IHByZWZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYmVmb3JlIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5wcmVmaXhgLlxuICAgIGNvbnN0IHN1ZmZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYWZ0ZXIgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnN1ZmZpeGAuXG4gICAgY29uc3QgcG9zV2VpZ2h0ID0gMjsgLy8gUHJveGltaXR5IHRvIGV4cGVjdGVkIGxvY2F0aW9uLiBVc2VkIGFzIGEgdGllLWJyZWFrZXIuXG5cbiAgICBjb25zdCBxdW90ZVNjb3JlID0gMSAtIG1hdGNoLmVycm9ycyAvIHF1b3RlLmxlbmd0aDtcblxuICAgIGNvbnN0IHByZWZpeFNjb3JlID0gY29udGV4dC5wcmVmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShNYXRoLm1heCgwLCBtYXRjaC5zdGFydCAtIGNvbnRleHQucHJlZml4Lmxlbmd0aCksIG1hdGNoLnN0YXJ0KSxcbiAgICAgICAgICBjb250ZXh0LnByZWZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcbiAgICBjb25zdCBzdWZmaXhTY29yZSA9IGNvbnRleHQuc3VmZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UobWF0Y2guZW5kLCBtYXRjaC5lbmQgKyBjb250ZXh0LnN1ZmZpeC5sZW5ndGgpLFxuICAgICAgICAgIGNvbnRleHQuc3VmZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuXG4gICAgbGV0IHBvc1Njb3JlID0gMS4wO1xuICAgIGlmICh0eXBlb2YgY29udGV4dC5oaW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMobWF0Y2guc3RhcnQgLSBjb250ZXh0LmhpbnQpO1xuICAgICAgcG9zU2NvcmUgPSAxLjAgLSBvZmZzZXQgLyB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTY29yZSA9XG4gICAgICBxdW90ZVdlaWdodCAqIHF1b3RlU2NvcmUgK1xuICAgICAgcHJlZml4V2VpZ2h0ICogcHJlZml4U2NvcmUgK1xuICAgICAgc3VmZml4V2VpZ2h0ICogc3VmZml4U2NvcmUgK1xuICAgICAgcG9zV2VpZ2h0ICogcG9zU2NvcmU7XG4gICAgY29uc3QgbWF4U2NvcmUgPSBxdW90ZVdlaWdodCArIHByZWZpeFdlaWdodCArIHN1ZmZpeFdlaWdodCArIHBvc1dlaWdodDtcbiAgICBjb25zdCBub3JtYWxpemVkU2NvcmUgPSByYXdTY29yZSAvIG1heFNjb3JlO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTY29yZTtcbiAgfTtcblxuICAvLyBSYW5rIG1hdGNoZXMgYmFzZWQgb24gc2ltaWxhcml0eSBvZiBhY3R1YWwgYW5kIGV4cGVjdGVkIHN1cnJvdW5kaW5nIHRleHRcbiAgLy8gYW5kIGFjdHVhbC9leHBlY3RlZCBvZmZzZXQgaW4gdGhlIGRvY3VtZW50IHRleHQuXG4gIGNvbnN0IHNjb3JlZE1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+ICh7XG4gICAgc3RhcnQ6IG0uc3RhcnQsXG4gICAgZW5kOiBtLmVuZCxcbiAgICBzY29yZTogc2NvcmVNYXRjaChtKSxcbiAgfSkpO1xuXG4gIC8vIENob29zZSBtYXRjaCB3aXRoIGhpZ2hlc3Qgc2NvcmUuXG4gIHNjb3JlZE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICByZXR1cm4gc2NvcmVkTWF0Y2hlc1swXTtcbn1cbiIsIi8qKlxuICogUmV0dXJuIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGV4dCBub2RlcyBjb250YWluZWQgaW4gYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBub2RlVGV4dExlbmd0aChub2RlKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIC8vIG5iLiBgdGV4dENvbnRlbnRgIGV4Y2x1ZGVzIHRleHQgaW4gY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAvLyB3aGVuIGNhbGxlZCBvbiBhIHBhcmVudCBlbGVtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0IHRoYXQgaGVyZS5cblxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobm9kZS50ZXh0Q29udGVudCkubGVuZ3RoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IG9mIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIHdoaWxlIChzaWJsaW5nKSB7XG4gICAgbGVuZ3RoICs9IG5vZGVUZXh0TGVuZ3RoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIG9yIG1vcmUgY2hhcmFjdGVyIG9mZnNldHMgd2l0aGluIGFuIGVsZW1lbnQgdG8gKHRleHQgbm9kZSwgcG9zaXRpb24pXG4gKiBwYWlycy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyW119IG9mZnNldHMgLSBPZmZzZXRzLCB3aGljaCBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfVtdfVxuICovXG5mdW5jdGlvbiByZXNvbHZlT2Zmc2V0cyhlbGVtZW50LCAuLi5vZmZzZXRzKSB7XG4gIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICBjb25zdCBub2RlSXRlciA9IC8qKiBAdHlwZSB7RG9jdW1lbnR9ICovIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgKS5jcmVhdGVOb2RlSXRlcmF0b3IoZWxlbWVudCwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgbGV0IHRleHROb2RlO1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICAvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgYG5leHRPZmZzZXRgdGggY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0XG4gIC8vIG9mIGBlbGVtZW50YC5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Tm9kZSkge1xuICAgIHRleHROb2RlID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAoY3VycmVudE5vZGUpO1xuICAgIGlmIChsZW5ndGggKyB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IG5leHRPZmZzZXQpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IG5leHRPZmZzZXQgLSBsZW5ndGggfSk7XG4gICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gICAgICBsZW5ndGggKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLy8gQm91bmRhcnkgY2FzZS5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0Tm9kZSAmJiBsZW5ndGggPT09IG5leHRPZmZzZXQpIHtcbiAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCB9KTtcbiAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICB9XG5cbiAgaWYgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgZXhjZWVkcyB0ZXh0IGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBsZXQgUkVTT0xWRV9GT1JXQVJEUyA9IDE7XG5leHBvcnQgbGV0IFJFU09MVkVfQkFDS1dBUkRTID0gMjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9mZnNldCB3aXRoaW4gdGhlIHRleHQgY29udGVudCBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoaXMgcG9zaXRpb24gY2FuIGJlIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZGVzY2VuZGFudCBub2RlIGluIHRoZSBjdXJyZW50XG4gKiBET00gc3VidHJlZSBvZiB0aGUgZWxlbWVudCB1c2luZyB0aGUgYHJlc29sdmVgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgdGV4dCBwb3NpdGlvbiBgb2Zmc2V0YCB3aXRoaW5cbiAgICogdGhlIHRleHQgY29udGVudCBvZiBgZWxlbWVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPZmZzZXQgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8qKiBFbGVtZW50IHRoYXQgYG9mZnNldGAgaXMgcmVsYXRpdmUgdG8uICovXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIC8qKiBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50J3MgYHRleHRDb250ZW50YC4gKi9cbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcG9zaXRpb24gd2l0aCBvZmZzZXQgcmVsYXRpdmUgdG8gYSBnaXZlbiBhbmNlc3RvclxuICAgKiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudCAtIEFuY2VzdG9yIG9mIGB0aGlzLmVsZW1lbnRgXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHJlbGF0aXZlVG8ocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuY29udGFpbnModGhpcy5lbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGN1cnJlbnQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgd2hpbGUgKGVsICE9PSBwYXJlbnQpIHtcbiAgICAgIG9mZnNldCArPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChlbCk7XG4gICAgICBlbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHBvc2l0aW9uIHRvIGEgc3BlY2lmaWMgdGV4dCBub2RlIGFuZCBvZmZzZXQgd2l0aGluIHRoYXQgbm9kZS5cbiAgICpcbiAgICogVGhyb3dzIGlmIGB0aGlzLm9mZnNldGAgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSW4gdGhlXG4gICAqIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaGFzIG5vIHRleHQgYW5kIGB0aGlzLm9mZnNldGAgaXMgMCwgdGhlIGBkaXJlY3Rpb25gXG4gICAqIG9wdGlvbiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucy5cbiAgICpcbiAgICogT2Zmc2V0cyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbm9kZXMgYXJlIHJlc29sdmVkIHRvIHRoZSBzdGFydCBvZiB0aGVcbiAgICogbm9kZSB0aGF0IGJlZ2lucyBhdCB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICBAcGFyYW0ge1JFU09MVkVfRk9SV0FSRFN8UkVTT0xWRV9CQUNLV0FSRFN9IFtvcHRpb25zLmRpcmVjdGlvbl0gLVxuICAgKiAgICAgU3BlY2lmaWVzIGluIHdoaWNoIGRpcmVjdGlvbiB0byBzZWFyY2ggZm9yIHRoZSBuZWFyZXN0IHRleHQgbm9kZSBpZlxuICAgKiAgICAgYHRoaXMub2Zmc2V0YCBpcyBgMGAgYW5kIGB0aGlzLmVsZW1lbnRgIGhhcyBubyB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkXG4gICAqICAgICBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfX1cbiAgICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAgICovXG4gIHJlc29sdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXNvbHZlT2Zmc2V0cyh0aGlzLmVsZW1lbnQsIHRoaXMub2Zmc2V0KVswXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMCAmJiBvcHRpb25zLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHR3ID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Um9vdE5vZGUoKSxcbiAgICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVFxuICAgICAgICApO1xuICAgICAgICB0dy5jdXJyZW50Tm9kZSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9yd2FyZHMgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUkVTT0xWRV9GT1JXQVJEUztcbiAgICAgICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7VGV4dHxudWxsfSAqLyAoXG4gICAgICAgICAgZm9yd2FyZHMgPyB0dy5uZXh0Tm9kZSgpIDogdHcucHJldmlvdXNOb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRleHQsIG9mZnNldDogZm9yd2FyZHMgPyAwIDogdGV4dC5kYXRhLmxlbmd0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgYG9mZnNldGB0aCBjaGFyYWN0ZXIgd2l0aGluXG4gICAqIGBub2RlYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21DaGFyT2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbi5mcm9tUG9pbnQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCBvZmZzZXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGlzIG5vdCBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIHN0YXJ0IG9yIGVuZCBwb2ludCAobm9kZSwgb2Zmc2V0KS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGV4dCBvciBFbGVtZW50IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIE9mZnNldCB3aXRoaW4gdGhlIG5vZGUuXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tUG9pbnQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IC8qKiBAdHlwZSB7VGV4dH0gKi8gKG5vZGUpLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBoYXMgbm8gcGFyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSArIG9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihub2RlLnBhcmVudEVsZW1lbnQsIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggYmVmb3JlIHRoZSBgb2Zmc2V0YHRoIGNoaWxkIG9mIGVsZW1lbnQuXG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgICAgIHRleHRPZmZzZXQgKz0gbm9kZVRleHRMZW5ndGgobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IGluIGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZ2lvbiBvZiBhIGRvY3VtZW50IGFzIGEgKHN0YXJ0LCBlbmQpIHBhaXIgb2YgYFRleHRQb3NpdGlvbmAgcG9pbnRzLlxuICpcbiAqIFJlcHJlc2VudGluZyBhIHJhbmdlIGluIHRoaXMgd2F5IGFsbG93cyBmb3IgY2hhbmdlcyBpbiB0aGUgRE9NIGNvbnRlbnQgb2YgdGhlXG4gKiByYW5nZSB3aGljaCBkb24ndCBhZmZlY3QgaXRzIHRleHQgY29udGVudCwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHRleHQgY29udGVudFxuICogb2YgdGhlIHJhbmdlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRSYW5nZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW1tdXRhYmxlIGBUZXh0UmFuZ2VgIGZyb20gYSBgc3RhcnRgIGFuZCBgZW5kYCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IHN0YXJ0XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gYVxuICAgKiBnaXZlbiBhbmNlc3Rvci4gU2VlIGBUZXh0UG9zaXRpb24ucmVsYXRpdmVUb2AuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgcmVsYXRpdmVUbyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlVG8oZWxlbWVudCksXG4gICAgICB0aGlzLmVuZC5yZWxhdGl2ZVRvKGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgVGV4dFJhbmdlYCB0byBhIERPTSByYW5nZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBET00gUmFuZ2Ugd2lsbCBhbHdheXMgc3RhcnQgYW5kIGVuZCBpbiBhIGBUZXh0YCBub2RlLlxuICAgKiBIZW5jZSBgVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkudG9SYW5nZSgpYCBjYW4gYmUgdXNlZCB0byBcInNocmlua1wiIGFcbiAgICogcmFuZ2UgdG8gdGhlIHRleHQgaXQgY29udGFpbnMuXG4gICAqXG4gICAqIE1heSB0aHJvdyBpZiB0aGUgYHN0YXJ0YCBvciBgZW5kYCBwb3NpdGlvbnMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cbiAgdG9SYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCA9PT0gdGhpcy5lbmQuZWxlbWVudCAmJlxuICAgICAgdGhpcy5zdGFydC5vZmZzZXQgPD0gdGhpcy5lbmQub2Zmc2V0XG4gICAgKSB7XG4gICAgICAvLyBGYXN0IHBhdGggZm9yIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGluIHNhbWUgZWxlbWVudC5cbiAgICAgIFtzdGFydCwgZW5kXSA9IHJlc29sdmVPZmZzZXRzKFxuICAgICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQsXG4gICAgICAgIHRoaXMuc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmVuZC5vZmZzZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5zdGFydC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0ZPUldBUkRTIH0pO1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9CQUNLV0FSRFMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gZXhpc3RpbmcgRE9NIGBSYW5nZWAgdG8gYSBgVGV4dFJhbmdlYFxuICAgKlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKiBAcmV0dXJuIHtUZXh0UmFuZ2V9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KFxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICByYW5nZS5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgYFRleHRSYW5nZWAgZnJvbSB0aGUgYHN0YXJ0YHRoIHRvIGBlbmRgdGggY2hhcmFjdGVycyBpbiBgcm9vdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgc3RhdGljIGZyb21PZmZzZXRzKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgc3RhcnQpLFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBlbmQpXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGNsYXNzZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBET00gYFJhbmdlYFxuICogb2JqZWN0cyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlbGVjdG9ycy4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhXG4gKiBzZXQgb2YgYW5jaG9yaW5nIGxpYnJhcmllcy4gSXQgc2VydmVzIHR3byBtYWluIHB1cnBvc2VzOlxuICpcbiAqICAxLiBQcm92aWRpbmcgYSBjb25zaXN0ZW50IGludGVyZmFjZSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFuY2hvcnMuXG4gKiAgMi4gSW5zdWxhdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIEFQSSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGFuY2hvcmluZ1xuICogICAgIGxpYnJhcmllcy5cbiAqL1xuXG5pbXBvcnQgeyBtYXRjaFF1b3RlIH0gZnJvbSAnLi9tYXRjaC1xdW90ZSc7XG5pbXBvcnQgeyBUZXh0UmFuZ2UsIFRleHRQb3NpdGlvbiB9IGZyb20gJy4vdGV4dC1yYW5nZSc7XG5pbXBvcnQgeyBub2RlRnJvbVhQYXRoLCB4cGF0aEZyb21Ob2RlIH0gZnJvbSAnLi94cGF0aCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuUmFuZ2VTZWxlY3Rvcn0gUmFuZ2VTZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFBvc2l0aW9uU2VsZWN0b3J9IFRleHRQb3NpdGlvblNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UXVvdGVTZWxlY3Rvcn0gVGV4dFF1b3RlU2VsZWN0b3JcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUmFuZ2VBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgcmFuZ2UpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhbmNob3IgZnJvbSBhIHNlcmlhbGl6ZWQgYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2VTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3Iuc3RhcnRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghc3RhcnRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgc3RhcnRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLmVuZENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFlbmRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZW5kQ29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5lbmRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpLnRvUmFuZ2UoKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7UmFuZ2VTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgLy8gXCJTaHJpbmtcIiB0aGUgcmFuZ2Ugc28gdGhhdCBpdCB0aWdodGx5IHdyYXBzIGl0cyB0ZXh0LiBUaGlzIGVuc3VyZXMgbW9yZVxuICAgIC8vIHByZWRpY3RhYmxlIG91dHB1dCBmb3IgYSBnaXZlbiB0ZXh0IHNlbGVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkUmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHRoaXMucmFuZ2UpLnRvUmFuZ2UoKTtcblxuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2Uobm9ybWFsaXplZFJhbmdlKTtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLnN0YXJ0LmVsZW1lbnQsIHRoaXMucm9vdCk7XG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2UuZW5kLmVsZW1lbnQsIHRoaXMucm9vdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JhbmdlU2VsZWN0b3InLFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzdGFydE9mZnNldDogdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIGVuZE9mZnNldDogdGV4dFJhbmdlLmVuZC5vZmZzZXQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRQb3NpdGlvblNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbkFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKFxuICAgICAgcm9vdCxcbiAgICAgIHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICB0ZXh0UmFuZ2UuZW5kLm9mZnNldFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvblNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHJvb3QsIHNlbGVjdG9yLnN0YXJ0LCBzZWxlY3Rvci5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvblNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRQb3NpdGlvblNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICB9O1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gVGV4dFJhbmdlLmZyb21PZmZzZXRzKHRoaXMucm9vdCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLnRvUmFuZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFF1b3RlTWF0Y2hPcHRpb25zXG4gKiBAcHJvcCB7bnVtYmVyfSBbaGludF0gLSBFeHBlY3RlZCBwb3NpdGlvbiBvZiBtYXRjaCBpbiB0ZXh0LiBTZWUgYG1hdGNoUXVvdGVgLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFF1b3RlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFF1b3RlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhhY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XVxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBleGFjdCwgY29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmV4YWN0ID0gZXhhY3Q7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgVGV4dFF1b3RlQW5jaG9yYCBmcm9tIGEgcmFuZ2UuXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgYHJhbmdlYCBkb2VzIG5vdCBjb250YWluIGFueSB0ZXh0IG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICAgIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBxdW90ZSB0byBjYXB0dXJlIGFzIGNvbnRleHQuIFdlIGN1cnJlbnRseVxuICAgIC8vIGFsd2F5cyB1c2UgYSBmaXhlZCBhbW91bnQsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhpcyBjb2RlIHdhcyBhd2FyZVxuICAgIC8vIG9mIGxvZ2ljYWwgYm91bmRhcmllcyBpbiB0aGUgZG9jdW1lbnQgKHBhcmFncmFwaCwgYXJ0aWNsZSBldGMuKSB0byBhdm9pZFxuICAgIC8vIGNhcHR1cmluZyB0ZXh0IHVucmVsYXRlZCB0byB0aGUgcXVvdGUuXG4gICAgLy9cbiAgICAvLyBJbiByZWd1bGFyIHByb3NlIHRoZSBpZGVhbCBjb250ZW50IHdvdWxkIG9mdGVuIGJlIHRoZSBzdXJyb3VuZGluZyBzZW50ZW5jZS5cbiAgICAvLyBUaGlzIGlzIGEgbmF0dXJhbCB1bml0IG9mIG1lYW5pbmcgd2hpY2ggZW5hYmxlcyBkaXNwbGF5aW5nIHF1b3RlcyBpblxuICAgIC8vIGNvbnRleHQgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBpcyBub3QgYXZhaWxhYmxlLiBXZSBjb3VsZCB1c2UgYEludGwuU2VnbWVudGVyYFxuICAgIC8vIGZvciB0aGlzIHdoZW4gYXZhaWxhYmxlLlxuICAgIGNvbnN0IGNvbnRleHRMZW4gPSAzMjtcblxuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCksIHtcbiAgICAgIHByZWZpeDogdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIGNvbnRleHRMZW4pLCBzdGFydCksXG4gICAgICBzdWZmaXg6IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgY29udGV4dExlbikpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRRdW90ZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHsgcHJlZml4LCBzdWZmaXggfSA9IHNlbGVjdG9yO1xuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHNlbGVjdG9yLmV4YWN0LCB7IHByZWZpeCwgc3VmZml4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRRdW90ZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRRdW90ZVNlbGVjdG9yJyxcbiAgICAgIGV4YWN0OiB0aGlzLmV4YWN0LFxuICAgICAgcHJlZml4OiB0aGlzLmNvbnRleHQucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLmNvbnRleHQuc3VmZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1JhbmdlKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnRvUG9zaXRpb25BbmNob3Iob3B0aW9ucykudG9SYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hRdW90ZSh0ZXh0LCB0aGlzLmV4YWN0LCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICBoaW50OiBvcHRpb25zLmhpbnQsXG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdW90ZSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IodGhpcy5yb290LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgVGV4dFF1b3RlQW5jaG9yIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzXCI7XG5cbi8vIENhdGNoIEpTIGVycm9ycyB0byBsb2cgdGhlbSBpbiB0aGUgYXBwLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwiZXJyb3JcIixcbiAgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgQW5kcm9pZC5sb2dFcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5maWxlbmFtZSwgZXZlbnQubGluZW5vKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8vIE5vdGlmeSBuYXRpdmUgY29kZSB0aGF0IHRoZSBwYWdlIGhhcyBsb2FkZWQuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gICAgICBzbmFwQ3VycmVudE9mZnNldCgpO1xuICAgIH0pO1xuICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8qKlxuICogSGF2aW5nIGFuIG9kZCBudW1iZXIgb2YgY29sdW1ucyB3aGVuIGRpc3BsYXlpbmcgdHdvIGNvbHVtbnMgcGVyIHNjcmVlbiBjYXVzZXMgc25hcHBpbmcgYW5kIHBhZ2VcbiAqIHR1cm5pbmcgaXNzdWVzLiBUbyBmaXggdGhpcywgd2UgaW5zZXJ0IGEgYmxhbmsgdmlydHVhbCBjb2x1bW4gYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpIHtcbiAgY29uc3QgaWQgPSBcInJlYWRpdW0tdmlydHVhbC1wYWdlXCI7XG4gIHZhciB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHx8IGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkgIT0gMikge1xuICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGNvbENvdW50ID0gZG9jdW1lbnRXaWR0aCAvIHBhZ2VXaWR0aDtcbiAgICB2YXIgaGFzT2RkQ29sQ291bnQgPSAoTWF0aC5yb3VuZChjb2xDb3VudCAqIDIpIC8gMikgJSAxID4gMC4xO1xuICAgIGlmIChoYXNPZGRDb2xDb3VudCkge1xuICAgICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2aXJ0dWFsQ29sLnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgICAgdmlydHVhbENvbC5zdHlsZS5icmVha0JlZm9yZSA9IFwiY29sdW1uXCI7XG4gICAgICAgIHZpcnR1YWxDb2wuaW5uZXJIVE1MID0gXCImIzgyMDM7XCI7IC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aXJ0dWFsQ29sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHZhciBwYWdlV2lkdGggPSAxO1xuXG5mdW5jdGlvbiBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCkge1xuICAvLyBXZSBjYW4ndCByZWx5IG9uIHdpbmRvdy5pbm5lcldpZHRoIGZvciB0aGUgcGFnZVdpZHRoIG9uIEFuZHJvaWQsIGJlY2F1c2UgaWYgdGhlXG4gIC8vIGRldmljZSBwaXhlbCByYXRpbyBpcyBub3QgYW4gaW50ZWdlciwgd2UgZ2V0IHJvdW5kaW5nIGlzc3VlcyBvZmZzZXR0aW5nIHRoZSBwYWdlcy5cbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3JlYWRpdW0tY3NzL2lzc3Vlcy85N1xuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcjItbmF2aWdhdG9yLWtvdGxpbi9pc3N1ZXMvMTQ2XG4gIHZhciB3aWR0aCA9IEFuZHJvaWQuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICBwYWdlV2lkdGggPSB3aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBzZXRQcm9wZXJ0eShcbiAgICBcIi0tUlNfX3ZpZXdwb3J0V2lkdGhcIixcbiAgICBcImNhbGMoXCIgKyB3aWR0aCArIFwicHggLyBcIiArIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICsgXCIpXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkge1xuICByZXR1cm4gcGFyc2VJbnQoXG4gICAgd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbi1jb3VudFwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1VU0VSX19zY3JvbGxcIilcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpID09IFwicmVhZGl1bS1zY3JvbGwtb25cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Q3NzU2VsZWN0b3IgfSBmcm9tIFwiY3NzLXNlbGVjdG9yLWdlbmVyYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IoKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50KCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uczoge1xuICAgICAgY3NzU2VsZWN0b3I6IGdldENzc1NlbGVjdG9yKGVsZW1lbnQpLFxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiBlbGVtZW50LnRleHRDb250ZW50LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRGaXJzdFZpc2libGVCbG9ja0VsZW1lbnQoKSB7XG4gIHJldHVybiBmaW5kRWxlbWVudChcbiAgICBkb2N1bWVudC5ib2R5LFxuICAgIChlbGVtZW50KSA9PiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXNwbGF5ICE9IFwiYmxvY2tcIlxuICApO1xufVxuXG5mdW5jdGlvbiBmaW5kRWxlbWVudChyb290RWxlbWVudCwgc2hvdWxkSWdub3JlKSB7XG4gIHZhciBmb3VuZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgY29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50KGNoaWxkLCBzaG91bGRJZ25vcmUpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNFbGVtZW50VmlzaWJsZShyb290RWxlbWVudCwgdW5kZWZpbmVkLCBzaG91bGRJZ25vcmUpKSB7XG4gICAgcmV0dXJuIHJvb3RFbGVtZW50O1xuICB9XG59XG5cbi8vIFNlZSBjb21wdXRlVmlzaWJpbGl0eV8oKSBpbiByMi1uYXZpZ2F0b3ItanNcbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoZWxlbWVudCwgZG9tUmVjdCAvKiBudWxsYWJsZSAqLywgc2hvdWxkSWdub3JlKSB7XG4gIGlmIChcbiAgICByZWFkaXVtLmlzRml4ZWRMYXlvdXQgfHxcbiAgICBlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8XG4gICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChcbiAgICAhZG9jdW1lbnQgfHxcbiAgICAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8XG4gICAgIWRvY3VtZW50LmJvZHkgfHxcbiAgICAoc2hvdWxkSWdub3JlICYmIHNob3VsZElnbm9yZShlbGVtZW50KSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIENhbm5vdCBiZSByZWxpZWQgdXBvbiwgYmVjYXVzZSB3ZWIgYnJvd3NlciBlbmdpbmUgcmVwb3J0cyBpbnZpc2libGUgd2hlbiBvdXQgb2YgdmlldyBpblxuICAgIC8vIHNjcm9sbGVkIGNvbHVtbnMhXG4gICAgLy8gY29uc3QgdmlzaWJpbGl0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2liaWxpdHlcIik7XG4gICAgLy8gaWYgKHZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIH1cbiAgICBjb25zdCBvcGFjaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3BhY2l0eVwiKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gXCIwXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWN0ID0gZG9tUmVjdCB8fCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVjdC5sZWZ0IDwgcGFnZVdpZHRoO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBsb2dFcnJvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyB0b05hdGl2ZVJlY3QgfSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBUZXh0UmFuZ2UgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZVwiO1xuXG4vLyBQb2x5ZmlsbCBmb3IgQW5kcm9pZCBBUEkgMjZcbmltcG9ydCBtYXRjaEFsbCBmcm9tIFwic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbFwiO1xubWF0Y2hBbGwuc2hpbSgpO1xuXG5jb25zdCBkZWJ1ZyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICBjb25zdCB0ZXh0ID0gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldFNlbGVjdGlvblJlY3QoKTtcbiAgcmV0dXJuIHsgdGV4dCwgcmVjdCB9O1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIGxldCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICByZXR1cm4gdG9OYXRpdmVSZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBoaWdobGlnaHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5IaWdobGlnaHQgPSBoaWdobGlnaHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhbkhpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7XG4gIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8oZG9jdW1lbnQuYm9keSk7XG4gIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgY29uc3Qgc25pcHBldExlbmd0aCA9IDIwMDtcblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGJlZm9yZSB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgZmlyc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGJlZm9yZSA9IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBzbmlwcGV0TGVuZ3RoKSwgc3RhcnQpO1xuICBsZXQgZmlyc3RXb3JkU3RhcnQgPSBiZWZvcmUuc2VhcmNoKC9cXFB7TH1cXHB7TH0vZ3UpO1xuICBpZiAoZmlyc3RXb3JkU3RhcnQgIT09IC0xKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlLnNsaWNlKGZpcnN0V29yZFN0YXJ0ICsgMSk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGFmdGVyIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBsYXN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBhZnRlciA9IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgc25pcHBldExlbmd0aCkpO1xuICBsZXQgbGFzdFdvcmRFbmQgPSBBcnJheS5mcm9tKGFmdGVyLm1hdGNoQWxsKC9cXHB7TH1cXFB7TH0vZ3UpKS5wb3AoKTtcbiAgaWYgKGxhc3RXb3JkRW5kICE9PSB1bmRlZmluZWQgJiYgbGFzdFdvcmRFbmQuaW5kZXggPiAxKSB7XG4gICAgYWZ0ZXIgPSBhZnRlci5zbGljZSgwLCBsYXN0V29yZEVuZC5pbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGlnaGxpZ2h0LCBiZWZvcmUsIGFmdGVyIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBCYXNlIHNjcmlwdCB1c2VkIGJ5IGJvdGggcmVmbG93YWJsZSBhbmQgZml4ZWQgbGF5b3V0IHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9nZXN0dXJlc1wiO1xuaW1wb3J0IHtcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb0VuZCxcbiAgc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9UZXh0LFxuICBzZXRQcm9wZXJ0eSxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUFubm90YXRpb24sXG4gIGNyZWF0ZUhpZ2hsaWdodCxcbiAgZGVzdHJveUhpZ2hsaWdodCxcbiAgZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8sXG4gIGdldFNlbGVjdGlvblJlY3QsXG4gIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCxcbiAgc2V0U2Nyb2xsTW9kZSxcbn0gZnJvbSBcIi4vaGlnaGxpZ2h0XCI7XG5pbXBvcnQgeyBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvciB9IGZyb20gXCIuL2RvbVwiO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGVjb3JhdGlvbnMsIHJlZ2lzdGVyVGVtcGxhdGVzIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbi8vIFB1YmxpYyBBUEkgdXNlZCBieSB0aGUgbmF2aWdhdG9yLlxud2luZG93LnJlYWRpdW0gPSB7XG4gIC8vIHV0aWxzXG4gIHNjcm9sbFRvSWQ6IHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb246IHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvVGV4dDogc2Nyb2xsVG9UZXh0LFxuICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodDogc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvU3RhcnQ6IHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvRW5kOiBzY3JvbGxUb0VuZCxcbiAgc2V0UHJvcGVydHk6IHNldFByb3BlcnR5LFxuICByZW1vdmVQcm9wZXJ0eTogcmVtb3ZlUHJvcGVydHksXG5cbiAgLy8gc2VsZWN0aW9uXG4gIGdldEN1cnJlbnRTZWxlY3Rpb246IGdldEN1cnJlbnRTZWxlY3Rpb24sXG5cbiAgLy8gZGVjb3JhdGlvblxuICByZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXM6IHJlZ2lzdGVyVGVtcGxhdGVzLFxuICBnZXREZWNvcmF0aW9uczogZ2V0RGVjb3JhdGlvbnMsXG5cbiAgLy8gRE9NXG4gIGZpbmRGaXJzdFZpc2libGVMb2NhdG9yOiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcixcbn07XG5cbi8vIExlZ2FjeSBoaWdobGlnaHRzIEFQSS5cbndpbmRvdy5jcmVhdGVBbm5vdGF0aW9uID0gY3JlYXRlQW5ub3RhdGlvbjtcbndpbmRvdy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG53aW5kb3cuZGVzdHJveUhpZ2hsaWdodCA9IGRlc3Ryb3lIaWdobGlnaHQ7XG53aW5kb3cuZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbztcbndpbmRvdy5nZXRTZWxlY3Rpb25SZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdDtcbndpbmRvdy5yZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQgPSByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQ7XG53aW5kb3cuc2V0U2Nyb2xsTW9kZSA9IHNldFNjcm9sbE1vZGU7XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBTY3JpcHQgdXNlZCBmb3IgZml4ZWQgbGF5b3V0cyByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vaW5kZXhcIjtcblxud2luZG93LnJlYWRpdW0uaXNGaXhlZExheW91dCA9IHRydWU7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwibG9jYXRpb25zIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IiLCJmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50IiwiZmluZEVsZW1lbnQiLCJkaXNwbGF5Iiwicm9vdEVsZW1lbnQiLCJzaG91bGRJZ25vcmUiLCJpc0VsZW1lbnRWaXNpYmxlIiwiZG9tUmVjdCIsInJlYWRpdW0iLCJlbFN0eWxlIiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findFirstVisibleBlockElement();\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findFirstVisibleBlockElement() {\n return findElement(document.body, function (element) {\n return window.getComputedStyle(element).display != "block";\n });\n}\n\nfunction findElement(rootElement, shouldIgnore) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var element = findElement(child, shouldIgnore);\n\n if (element) {\n return element;\n }\n }\n\n if (isElementVisible(rootElement, undefined, shouldIgnore)) {\n return rootElement;\n }\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction isElementVisible(element, domRect\n/* nullable */\n, shouldIgnore) {\n if (readium.isFixedLayout || element === document.body || element === document.documentElement) {\n return true;\n }\n\n if (!document || !document.documentElement || !document.body || shouldIgnore && shouldIgnore(element)) {\n return false;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n return rect.left < pageWidth;\n }\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBc2UsRUFBQUEsbUJBQW1CLEVBQUVBLG1CQWJOO0FBZWY7QUFDQU8sRUFBQUEsMkJBQTJCLEVBQUVuYSxpQkFoQmQ7QUFpQmZRLEVBQUFBLGNBQWMsRUFBRUEsY0FqQkQ7QUFtQmY7QUFDQXVZLEVBQUFBLHVCQUF1QixFQUFFQSx1QkFBdUJBO0FBcEJqQyxDQUFqQixFQXVCQTs7QUFDQWhqQixNQUFNLENBQUN3ZSxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0F4ZSxNQUFNLENBQUNzZSxlQUFQLEdBQXlCQSxlQUF6QjtBQUNBdGUsTUFBTSxDQUFDb1gsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBcFgsTUFBTSxDQUFDMlksdUJBQVAsR0FBaUNBLHVCQUFqQztBQUNBM1ksTUFBTSxDQUFDMmlCLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQTNpQixNQUFNLENBQUMwaUIsMkJBQVAsR0FBcUNBLDJCQUFyQztBQUNBMWlCLE1BQU0sQ0FBQzhpQixhQUFQLEdBQXVCQSxhQUF2QixDOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBOWlCLE1BQU0sQ0FBQ3lqQixPQUFQLENBQWU5RSxhQUFmLEdBQStCLElBQS9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvbWF0Y2gtcXVvdGUuanM/ZGQ2YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlLmpzP2ZkZWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXMuanM/NDAwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3V0aWxzLmpzPzAyNWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9yZWN0LmpzPzRkNWEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kZWNvcmF0b3IuanM/MWIwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2dlc3R1cmVzLmpzPzE0YzIiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9oaWdobGlnaHQuanM/OGRhOCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RvbS5qcz9jYmYwIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvc2VsZWN0aW9uLmpzPzU5YWMiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC5qcz9iNjM1Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXgtZml4ZWQuanM/ZDk5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JUTCgpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuZGlyLnRvTG93ZXJDYXNlKCkgPT0gXCJydGxcIjtcbn1cblxuLy8gU2Nyb2xsIHRvIHRoZSBnaXZlbiBUYWdJZCBpbiBkb2N1bWVudCBhbmQgc25hcC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0lkKGlkKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVG9SZWN0KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG4vLyBQb3NpdGlvbiBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCAtIDFdLCAwLTEwMCUuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbikge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1Bvc2l0aW9uIFwiICsgcG9zaXRpb24pO1xuICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gMSkge1xuICAgIHRocm93IFwic2Nyb2xsVG9Qb3NpdGlvbigpIG11c3QgYmUgZ2l2ZW4gYSBwb3NpdGlvbiBmcm9tIDAuMCB0byAgMS4wXCI7XG4gIH1cblxuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxIZWlnaHQgKiBwb3NpdGlvbjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcbiAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnRXaWR0aCAqIHBvc2l0aW9uICogZmFjdG9yO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgfVxufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiB0ZXh0IHNuaXBwZXQuXG4vL1xuLy8gVGhlIGV4cGVjdGVkIHRleHQgYXJndW1lbnQgaXMgYSBMb2NhdG9yIFRleHQgb2JqZWN0LCBhcyBkZWZpbmVkIGhlcmU6XG4vLyBodHRwczovL3JlYWRpdW0ub3JnL2FyY2hpdGVjdHVyZS9tb2RlbHMvbG9jYXRvcnMvXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9UZXh0KHRleHQpIHtcbiAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcih7IHRleHQgfSk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2Nyb2xsVG9SYW5nZShyYW5nZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JhbmdlKHJhbmdlKSB7XG4gIHNjcm9sbFRvUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmVjdChyZWN0KSB7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gd2luZG93LmlubmVySGVpZ2h0IC8gMjtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1N0YXJ0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1N0YXJ0XCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbmQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvRW5kXCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoICogZmFjdG9yXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0O1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSBsZWZ0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCAtIHBhZ2VXaWR0aDtcbiAgdmFyIG1pbk9mZnNldCA9IGlzUlRMKCkgPyAtKGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGgpIDogMDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWF4KG9mZnNldCwgbWluT2Zmc2V0KSk7XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgcmlnaHQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFJpZ2h0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCArIHBhZ2VXaWR0aDtcbiAgdmFyIG1heE9mZnNldCA9IGlzUlRMKCkgPyAwIDogZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWluKG9mZnNldCwgbWF4T2Zmc2V0KSk7XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGdpdmVuIGxlZnQgb2Zmc2V0LlxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBzY3JvbGwgcG9zaXRpb24gaXMgYWxyZWFkeSBjbG9zZSBlbm91Z2ggdG8gdGhlIGdpdmVuIG9mZnNldC5cbmZ1bmN0aW9uIHNjcm9sbFRvT2Zmc2V0KG9mZnNldCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb09mZnNldCBcIiArIG9mZnNldCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBcIkNhbGxlZCBzY3JvbGxUb09mZnNldCgpIHdpdGggc2Nyb2xsIG1vZGUgZW5hYmxlZC4gVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHBhZ2luYXRlZCBtb2RlLlwiO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICAvLyBJbiBzb21lIGNhc2UgdGhlIHNjcm9sbFggY2Fubm90IHJlYWNoIHRoZSBwb3NpdGlvbiByZXNwZWN0aW5nIHRvIGlubmVyV2lkdGhcbiAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50T2Zmc2V0IC0gb2Zmc2V0KSAvIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIGRpZmYgPiAwLjAxO1xufVxuXG4vLyBTbmFwIHRoZSBvZmZzZXQgdG8gdGhlIHNjcmVlbiB3aWR0aCAocGFnZSB3aWR0aCkuXG5mdW5jdGlvbiBzbmFwT2Zmc2V0KG9mZnNldCkge1xuICB2YXIgdmFsdWUgPSBvZmZzZXQgKyAoaXNSVEwoKSA/IC0xIDogMSk7XG4gIHJldHVybiB2YWx1ZSAtICh2YWx1ZSAlIHBhZ2VXaWR0aCk7XG59XG5cbi8vIFNuYXBzIHRoZSBjdXJyZW50IG9mZnNldCB0byB0aGUgcGFnZSB3aWR0aC5cbmZ1bmN0aW9uIHNuYXBDdXJyZW50T2Zmc2V0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzbmFwQ3VycmVudE9mZnNldFwiKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICAvLyBBZGRzIGhhbGYgYSBwYWdlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzbmFwIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgdmFyIGRlbHRhID0gZmFjdG9yICogKHBhZ2VXaWR0aCAvIDIpO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KGN1cnJlbnRPZmZzZXQgKyBkZWx0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUZyb21Mb2NhdG9yKGxvY2F0b3IpIHtcbiAgbGV0IHRleHQgPSBsb2NhdG9yLnRleHQ7XG4gIGlmICghdGV4dCB8fCAhdGV4dC5oaWdobGlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHZhciByb290O1xuICAgIGxldCBsb2NhdGlvbnMgPSBsb2NhdG9yLmxvY2F0aW9ucztcbiAgICBpZiAobG9jYXRpb25zICYmIGxvY2F0aW9ucy5jc3NTZWxlY3Rvcikge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb25zLmNzc1NlbGVjdG9yKTtcbiAgICB9XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDc3NTZWxlY3RvciB9IGZyb20gXCJjc3Mtc2VsZWN0b3ItZ2VuZXJhdG9yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcigpIHtcbiAgY29uc3QgZWxlbWVudCA9IGZpbmRGaXJzdFZpc2libGVCbG9ja0VsZW1lbnQoKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaHJlZjogXCIjXCIsXG4gICAgdHlwZTogXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIixcbiAgICBsb2NhdGlvbnM6IHtcbiAgICAgIGNzc1NlbGVjdG9yOiBnZXRDc3NTZWxlY3RvcihlbGVtZW50KSxcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogZWxlbWVudC50ZXh0Q29udGVudCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50KCkge1xuICByZXR1cm4gZmluZEVsZW1lbnQoXG4gICAgZG9jdW1lbnQuYm9keSxcbiAgICAoZWxlbWVudCkgPT4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlzcGxheSAhPSBcImJsb2NrXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmluZEVsZW1lbnQocm9vdEVsZW1lbnQsIHNob3VsZElnbm9yZSkge1xuICB2YXIgZm91bmRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChjaGlsZCwgc2hvdWxkSWdub3JlKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRWxlbWVudFZpc2libGUocm9vdEVsZW1lbnQsIHVuZGVmaW5lZCwgc2hvdWxkSWdub3JlKSkge1xuICAgIHJldHVybiByb290RWxlbWVudDtcbiAgfVxufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKGVsZW1lbnQsIGRvbVJlY3QgLyogbnVsbGFibGUgKi8sIHNob3VsZElnbm9yZSkge1xuICBpZiAoXG4gICAgcmVhZGl1bS5pc0ZpeGVkTGF5b3V0IHx8XG4gICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fFxuICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoXG4gICAgIWRvY3VtZW50IHx8XG4gICAgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fFxuICAgICFkb2N1bWVudC5ib2R5IHx8XG4gICAgKHNob3VsZElnbm9yZSAmJiBzaG91bGRJZ25vcmUoZWxlbWVudCkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlY3QubGVmdCA8IHBhZ2VXaWR0aDtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIGZpeGVkIGxheW91dHMgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzRml4ZWRMYXlvdXQgPSB0cnVlO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEZpcnN0VmlzaWJsZUJsb2NrRWxlbWVudCIsImhyZWYiLCJmaW5kRWxlbWVudCIsImRpc3BsYXkiLCJyb290RWxlbWVudCIsInNob3VsZElnbm9yZSIsImlzRWxlbWVudFZpc2libGUiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js index 9873674700..8912e29556 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findFirstVisibleBlockElement();\n\n if (!element) {\n return undefined;\n }\n\n return {\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findFirstVisibleBlockElement() {\n return findElement(document.body, function (element) {\n return window.getComputedStyle(element).display != "block";\n });\n}\n\nfunction findElement(rootElement, shouldIgnore) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var element = findElement(child, shouldIgnore);\n\n if (element) {\n return element;\n }\n }\n\n if (isElementVisible(rootElement, undefined, shouldIgnore)) {\n return rootElement;\n }\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction isElementVisible(element, domRect\n/* nullable */\n, shouldIgnore) {\n if (readium.isFixedLayout || element === document.body || element === document.documentElement) {\n return true;\n }\n\n if (!document || !document.documentElement || !document.body || shouldIgnore && shouldIgnore(element)) {\n return false;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n return rect.left < pageWidth;\n }\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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bGEsaUJBaEJkO0FBaUJmUSxFQUFBQSxjQUFjLEVBQUVBLGNBakJEO0FBbUJmO0FBQ0F1WSxFQUFBQSx1QkFBdUIsRUFBRUEsdUJBQXVCQTtBQXBCakMsQ0FBakIsRUF1QkE7O0FBQ0FoakIsTUFBTSxDQUFDd2UsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBeGUsTUFBTSxDQUFDc2UsZUFBUCxHQUF5QkEsZUFBekI7QUFDQXRlLE1BQU0sQ0FBQ29YLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQXBYLE1BQU0sQ0FBQzJZLHVCQUFQLEdBQWlDQSx1QkFBakM7QUFDQTNZLE1BQU0sQ0FBQzJpQixnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0EzaUIsTUFBTSxDQUFDMGlCLDJCQUFQLEdBQXFDQSwyQkFBckM7QUFDQTFpQixNQUFNLENBQUM4aUIsYUFBUCxHQUF1QkEsYUFBdkIsQzs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTlpQixNQUFNLENBQUN3akIsT0FBUCxDQUFlWSxZQUFmLEdBQThCLElBQTlCO0FBRUEzbUIsUUFBUSxDQUFDd0MsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLFlBQVk7QUFDeEQ7QUFDQSxNQUFJb2tCLElBQUksR0FBRzVtQixRQUFRLENBQUNtRSxhQUFULENBQXVCLE1BQXZCLENBQVg7QUFDQXlpQixFQUFBQSxJQUFJLENBQUN4aUIsWUFBTCxDQUFrQixNQUFsQixFQUEwQixVQUExQjtBQUNBd2lCLEVBQUFBLElBQUksQ0FBQ3hpQixZQUFMLENBQ0UsU0FERixFQUVFLDhGQUZGO0FBSUFwRSxFQUFBQSxRQUFRLENBQUM2bUIsSUFBVCxDQUFjcmlCLFdBQWQsQ0FBMEJvaUIsSUFBMUI7QUFDRCxDQVREIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvbWF0Y2gtcXVvdGUuanM/ZGQ2YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlLmpzP2ZkZWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXMuanM/NDAwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3V0aWxzLmpzPzAyNWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9yZWN0LmpzPzRkNWEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kZWNvcmF0b3IuanM/MWIwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2dlc3R1cmVzLmpzPzE0YzIiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9oaWdobGlnaHQuanM/OGRhOCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RvbS5qcz9jYmYwIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvc2VsZWN0aW9uLmpzPzU5YWMiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC5qcz9iNjM1Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXgtcmVmbG93YWJsZS5qcz8zOTI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgc2Nyb2xsVG9SZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SZWN0KHJlY3QpIHtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvU3RhcnQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvU3RhcnRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0VuZCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9FbmRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGggKiBmYWN0b3JcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIGxlZnQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbExlZnQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYIC0gcGFnZVdpZHRoO1xuICB2YXIgbWluT2Zmc2V0ID0gaXNSVEwoKSA/IC0oZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aCkgOiAwO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5tYXgob2Zmc2V0LCBtaW5PZmZzZXQpKTtcbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSByaWdodC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUmlnaHQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYICsgcGFnZVdpZHRoO1xuICB2YXIgbWF4T2Zmc2V0ID0gaXNSVEwoKSA/IDAgOiBkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5taW4ob2Zmc2V0LCBtYXhPZmZzZXQpKTtcbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZ2l2ZW4gbGVmdCBvZmZzZXQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGNsb3NlIGVub3VnaCB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuZnVuY3Rpb24gc2Nyb2xsVG9PZmZzZXQob2Zmc2V0KSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvT2Zmc2V0IFwiICsgb2Zmc2V0KTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IFwiQ2FsbGVkIHNjcm9sbFRvT2Zmc2V0KCkgd2l0aCBzY3JvbGwgbW9kZSBlbmFibGVkLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gcGFnaW5hdGVkIG1vZGUuXCI7XG4gIH1cblxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIC8vIEluIHNvbWUgY2FzZSB0aGUgc2Nyb2xsWCBjYW5ub3QgcmVhY2ggdGhlIHBvc2l0aW9uIHJlc3BlY3RpbmcgdG8gaW5uZXJXaWR0aFxuICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpIC8gcGFnZVdpZHRoO1xuICByZXR1cm4gZGlmZiA+IDAuMDE7XG59XG5cbi8vIFNuYXAgdGhlIG9mZnNldCB0byB0aGUgc2NyZWVuIHdpZHRoIChwYWdlIHdpZHRoKS5cbmZ1bmN0aW9uIHNuYXBPZmZzZXQob2Zmc2V0KSB7XG4gIHZhciB2YWx1ZSA9IG9mZnNldCArIChpc1JUTCgpID8gLTEgOiAxKTtcbiAgcmV0dXJuIHZhbHVlIC0gKHZhbHVlICUgcGFnZVdpZHRoKTtcbn1cblxuLy8gU25hcHMgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRoZSBwYWdlIHdpZHRoLlxuZnVuY3Rpb24gc25hcEN1cnJlbnRPZmZzZXQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNuYXBDdXJyZW50T2Zmc2V0XCIpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIC8vIEFkZHMgaGFsZiBhIHBhZ2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNuYXAgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICB2YXIgZGVsdGEgPSBmYWN0b3IgKiAocGFnZVdpZHRoIC8gMik7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoY3VycmVudE9mZnNldCArIGRlbHRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlRnJvbUxvY2F0b3IobG9jYXRvcikge1xuICBsZXQgdGV4dCA9IGxvY2F0b3IudGV4dDtcbiAgaWYgKCF0ZXh0IHx8ICF0ZXh0LmhpZ2hsaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIHJvb3Q7XG4gICAgbGV0IGxvY2F0aW9ucyA9IGxvY2F0b3IubG9jYXRpb25zO1xuICAgIGlmIChsb2NhdGlvbnMgJiYgbG9jYXRpb25zLmNzc1NlbGVjdG9yKSB7XG4gICAgICByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihsb2NhdGlvbnMuY3NzU2VsZWN0b3IpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIGxldCBhbmNob3IgPSBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuaGlnaGxpZ2h0LCB7XG4gICAgICBwcmVmaXg6IHRleHQuYmVmb3JlLFxuICAgICAgc3VmZml4OiB0ZXh0LmFmdGVyLFxuICAgIH0pO1xuICAgIHJldHVybiBhbmNob3IudG9SYW5nZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8vIFVzZXIgU2V0dGluZ3MuXG5cbi8vIEZvciBzZXR0aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG59XG5cbi8vIEZvciByZW1vdmluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHkoa2V5KSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcbn1cblxuLy8vIFRvb2xraXRcblxuZXhwb3J0IGZ1bmN0aW9uIGxvZygpIHtcbiAgdmFyIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO1xuICBBbmRyb2lkLmxvZyhtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0Vycm9yKG1lc3NhZ2UpIHtcbiAgQW5kcm9pZC5sb2dFcnJvcihtZXNzYWdlLCBcIlwiLCAwKTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGZhbHNlO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgRE9NUmVjdCBpbnRvIGEgSlNPTiBvYmplY3QgdW5kZXJzdGFuZGFibGUgYnkgdGhlIG5hdGl2ZSBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYXRpdmVSZWN0KHJlY3QpIHtcbiAgY29uc3QgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCB3aWR0aCA9IHJlY3Qud2lkdGggKiBwaXhlbFJhdGlvO1xuICBjb25zdCBoZWlnaHQgPSByZWN0LmhlaWdodCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGxlZnQgPSByZWN0LmxlZnQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCB0b3AgPSByZWN0LnRvcCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQ7XG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gIHJhbmdlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcblxuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZyhgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWApO1xuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgbG9nKFxuICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQge1xuICBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCxcbiAgcmVjdENvbnRhaW5zUG9pbnQsXG4gIHRvTmF0aXZlUmVjdCxcbn0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgbG9nLCBsb2dFcnJvciwgcmFuZ2VGcm9tTG9jYXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBzdHlsZXMgPSBuZXcgTWFwKCk7XG5sZXQgZ3JvdXBzID0gbmV3IE1hcCgpO1xudmFyIGxhc3RHcm91cElkID0gMDtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgc3VwcG9ydGVkIERlY29yYXRpb24gVGVtcGxhdGVzLlxuICpcbiAqIEVhY2ggdGVtcGxhdGUgb2JqZWN0IGlzIGluZGV4ZWQgYnkgdGhlIHN0eWxlIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUZW1wbGF0ZXMobmV3U3R5bGVzKSB7XG4gIHZhciBzdHlsZXNoZWV0ID0gXCJcIjtcblxuICBmb3IgKGNvbnN0IFtpZCwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld1N0eWxlcykpIHtcbiAgICBzdHlsZXMuc2V0KGlkLCBzdHlsZSk7XG4gICAgaWYgKHN0eWxlLnN0eWxlc2hlZXQpIHtcbiAgICAgIHN0eWxlc2hlZXQgKz0gc3R5bGUuc3R5bGVzaGVldCArIFwiXFxuXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlc2hlZXQpIHtcbiAgICBsZXQgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgIHN0eWxlRWxlbWVudC5pbm5lckhUTUwgPSBzdHlsZXNoZWV0O1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBEZWNvcmF0aW9uR3JvdXAgZm9yIHRoZSBnaXZlbiBncm91cCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjb3JhdGlvbnMoZ3JvdXBOYW1lKSB7XG4gIHZhciBncm91cCA9IGdyb3Vwcy5nZXQoZ3JvdXBOYW1lKTtcbiAgaWYgKCFncm91cCkge1xuICAgIGxldCBpZCA9IFwicjItZGVjb3JhdGlvbi1cIiArIGxhc3RHcm91cElkKys7XG4gICAgZ3JvdXAgPSBEZWNvcmF0aW9uR3JvdXAoaWQsIGdyb3VwTmFtZSk7XG4gICAgZ3JvdXBzLnNldChncm91cE5hbWUsIGdyb3VwKTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBjbGljayBldmVudHMgb24gYSBEZWNvcmF0aW9uLlxuICogUmV0dXJucyB3aGV0aGVyIGEgZGVjb3JhdGlvbiBtYXRjaGVkIHRoaXMgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkge1xuICBpZiAoZ3JvdXBzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kVGFyZ2V0KCkge1xuICAgIGZvciAoY29uc3QgW2dyb3VwLCBncm91cENvbnRlbnRdIG9mIGdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwQ29udGVudC5pdGVtcy5yZXZlcnNlKCkpIHtcbiAgICAgICAgaWYgKCFpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBsZXQgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9KU09OKCk7XG4gICAgICAgICAgaWYgKHJlY3RDb250YWluc1BvaW50KHJlY3QsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFksIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cCwgaXRlbSwgZWxlbWVudCwgcmVjdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB0YXJnZXQgPSBmaW5kVGFyZ2V0KCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIEFuZHJvaWQub25EZWNvcmF0aW9uQWN0aXZhdGVkKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGlkOiB0YXJnZXQuaXRlbS5kZWNvcmF0aW9uLmlkLFxuICAgICAgZ3JvdXA6IHRhcmdldC5ncm91cCxcbiAgICAgIHJlY3Q6IHRvTmF0aXZlUmVjdCh0YXJnZXQuaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksXG4gICAgICBjbGljazogY2xpY2tFdmVudCxcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEZWNvcmF0aW9uR3JvdXAgb2JqZWN0IGZyb20gYSB1bmlxdWUgSFRNTCBJRCBhbmQgaXRzIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWNvcmF0aW9uR3JvdXAoZ3JvdXBJZCwgZ3JvdXBOYW1lKSB7XG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIgbGFzdEl0ZW1JZCA9IDA7XG4gIHZhciBjb250YWluZXIgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGRlY29yYXRpb24gdG8gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkKGRlY29yYXRpb24pIHtcbiAgICBsZXQgaWQgPSBncm91cElkICsgXCItXCIgKyBsYXN0SXRlbUlkKys7XG5cbiAgICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKGRlY29yYXRpb24ubG9jYXRvcik7XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgbG9nKFwiQ2FuJ3QgbG9jYXRlIERPTSByYW5nZSBmb3IgZGVjb3JhdGlvblwiLCBkZWNvcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IHsgaWQsIGRlY29yYXRpb24sIHJhbmdlIH07XG4gICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICBsYXlvdXQoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZGVjb3JhdGlvbiB3aXRoIGdpdmVuIElEIGZyb20gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlKGRlY29yYXRpb25JZCkge1xuICAgIGxldCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaS5kZWNvcmF0aW9uLmlkID09PSBkZWNvcmF0aW9uSWQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBudWxsO1xuICAgIGlmIChpdGVtLmNvbnRhaW5lcikge1xuICAgICAgaXRlbS5jb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBpdGVtLmNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoYXQgdGhlIGdpdmVuIGRlY29yYXRpb24gd2FzIG1vZGlmaWVkIGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlKGRlY29yYXRpb24pIHtcbiAgICByZW1vdmUoZGVjb3JhdGlvbi5pZCk7XG4gICAgYWRkKGRlY29yYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGRlY29yYXRpb25zIGZyb20gdGhpcyBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZXMgdGhlIGRlY29yYXRpb24gZWxlbWVudHMuXG4gICAqXG4gICAqIFRvIGJlIGNhbGxlZCBhZnRlciByZWZsb3dpbmcgdGhlIHJlc291cmNlLCBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVlc3RMYXlvdXQoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBsYXlvdXQoaXRlbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExheW91dHMgYSBzaW5nbGUgRGVjb3JhdGlvbiBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gbGF5b3V0KGl0ZW0pIHtcbiAgICBsZXQgZ3JvdXBDb250YWluZXIgPSByZXF1aXJlQ29udGFpbmVyKCk7XG5cbiAgICBsZXQgc3R5bGUgPSBzdHlsZXMuZ2V0KGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaWYgKCFzdHlsZSkge1xuICAgICAgbG9nRXJyb3IoYFVua25vd24gZGVjb3JhdGlvbiBzdHlsZTogJHtpdGVtLmRlY29yYXRpb24uc3R5bGV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgaXRlbS5pZCk7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlXCIsIGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaXRlbUNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIGxldCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gcGFyc2VJbnQoXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgXCJjb2x1bW4tY291bnRcIlxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IHBhZ2VXaWR0aCA9IHZpZXdwb3J0V2lkdGggLyAoY29sdW1uQ291bnQgfHwgMSk7XG4gICAgbGV0IHNjcm9sbGluZ0VsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICAgIGxldCB4T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCB5T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnQoZWxlbWVudCwgcmVjdCwgYm91bmRpbmdSZWN0KSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXG4gICAgICBpZiAoc3R5bGUud2lkdGggPT09IFwid3JhcFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtyZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3ZpZXdwb3J0V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHZpZXdwb3J0V2lkdGgpICogdmlld3BvcnRXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcImJvdW5kc1wiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZGluZ1JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Ym91bmRpbmdSZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJwYWdlXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3BhZ2VXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gcGFnZVdpZHRoKSAqIHBhZ2VXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGJvdW5kaW5nUmVjdCA9IGl0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBsZXQgZWxlbWVudFRlbXBsYXRlO1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBpdGVtLmRlY29yYXRpb24uZWxlbWVudC50cmltKCk7XG4gICAgICBlbGVtZW50VGVtcGxhdGUgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihcbiAgICAgICAgYEludmFsaWQgZGVjb3JhdGlvbiBlbGVtZW50IFwiJHtpdGVtLmRlY29yYXRpb24uZWxlbWVudH1cIjogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3hlc1wiKSB7XG4gICAgICBsZXQgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IHRydWU7XG4gICAgICBsZXQgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICAgICAgaXRlbS5yYW5nZSxcbiAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgKTtcblxuICAgICAgY2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5zb3J0KChyMSwgcjIpID0+IHtcbiAgICAgICAgaWYgKHIxLnRvcCA8IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChyMS50b3AgPiByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudChsaW5lLCBjbGllbnRSZWN0LCBib3VuZGluZ1JlY3QpO1xuICAgICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChsaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgY29uc3QgYm91bmRzID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGJvdW5kcy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIHBvc2l0aW9uRWxlbWVudChib3VuZHMsIGJvdW5kaW5nUmVjdCwgYm91bmRpbmdSZWN0KTtcblxuICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQoYm91bmRzKTtcbiAgICB9XG5cbiAgICBncm91cENvbnRhaW5lci5hcHBlbmQoaXRlbUNvbnRhaW5lcik7XG4gICAgaXRlbS5jb250YWluZXIgPSBpdGVtQ29udGFpbmVyO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgaXRlbUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtYWN0aXZhYmxlPScxJ11cIilcbiAgICApO1xuICAgIGlmIChpdGVtLmNsaWNrYWJsZUVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oaXRlbUNvbnRhaW5lci5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIGNvbnRhaW5lciBlbGVtZW50LCBhZnRlciBtYWtpbmcgc3VyZSBpdCBleGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1aXJlQ29udGFpbmVyKCkge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGdyb3VwSWQpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtZ3JvdXBcIiwgZ3JvdXBOYW1lKTtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ3JvdXAgY29udGFpbmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXJDb250YWluZXIoKSB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhZGQsIHJlbW92ZSwgdXBkYXRlLCBjbGVhciwgaXRlbXMsIHJlcXVlc3RMYXlvdXQgfTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2lsbCByZWxheW91dCBhbGwgdGhlIGRlY29yYXRpb25zIHdoZW4gdGhlIGRvY3VtZW50IGJvZHkgaXMgcmVzaXplZC5cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgbGFzdFNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RTaXplLndpZHRoID09PSBib2R5LmNsaWVudFdpZHRoICYmXG4gICAgICAgIGxhc3RTaXplLmhlaWdodCA9PT0gYm9keS5jbGllbnRIZWlnaHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IGJvZHkuY2xpZW50V2lkdGgsXG4gICAgICAgIGhlaWdodDogYm9keS5jbGllbnRIZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAucmVxdWVzdExheW91dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShib2R5KTtcbiAgfSxcbiAgZmFsc2Vcbik7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4gKiBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2ssIGZhbHNlKTtcbn0pO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgLy8gVGhlcmUncyBhbiBvbi1nb2luZyBzZWxlY3Rpb24sIHRoZSB0YXAgd2lsbCBkaXNtaXNzIGl0IHNvIHdlIGRvbid0IGZvcndhcmQgaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgbGV0IGNsaWNrRXZlbnQgPSB7XG4gICAgZGVmYXVsdFByZXZlbnRlZDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZCxcbiAgICB4OiBldmVudC5jbGllbnRYICogcGl4ZWxSYXRpbyxcbiAgICB5OiBldmVudC5jbGllbnRZICogcGl4ZWxSYXRpbyxcbiAgICB0YXJnZXRFbGVtZW50OiBldmVudC50YXJnZXQub3V0ZXJIVE1MLFxuICAgIGludGVyYWN0aXZlRWxlbWVudDogbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChldmVudC50YXJnZXQpLFxuICB9O1xuXG4gIGlmIChoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTZW5kIHRoZSB0YXAgZGF0YSBvdmVyIHRoZSBKUyBicmlkZ2UgZXZlbiBpZiBpdCdzIGJlZW4gaGFuZGxlZCB3aXRoaW4gdGhlIHdlYiB2aWV3LCBzbyB0aGF0XG4gIC8vIGl0IGNhbiBiZSBwcmVzZXJ2ZWQgYW5kIHVzZWQgYnkgdGhlIHRvb2xraXQgaWYgbmVlZGVkLlxuICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uVGFwKEpTT04uc3RyaW5naWZ5KGNsaWNrRXZlbnQpKTtcblxuICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5cbi8vIFNlZS4gaHR0cHM6Ly9naXRodWIuY29tL0pheVBhbm96L2FyY2hpdGVjdHVyZS90cmVlL3RvdWNoLWhhbmRsaW5nL21pc2MvdG91Y2gtaGFuZGxpbmdcbmZ1bmN0aW9uIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgaW50ZXJhY3RpdmVUYWdzID0gW1xuICAgIFwiYVwiLFxuICAgIFwiYXVkaW9cIixcbiAgICBcImJ1dHRvblwiLFxuICAgIFwiY2FudmFzXCIsXG4gICAgXCJkZXRhaWxzXCIsXG4gICAgXCJpbnB1dFwiLFxuICAgIFwibGFiZWxcIixcbiAgICBcIm9wdGlvblwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzdWJtaXRcIixcbiAgICBcInRleHRhcmVhXCIsXG4gICAgXCJ2aWRlb1wiLFxuICBdO1xuICBpZiAoaW50ZXJhY3RpdmVUYWdzLmluZGV4T2YoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGVkaXRhYmxlIGJ5IHRoZSB1c2VyLlxuICBpZiAoXG4gICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKS50b0xvd2VyQ2FzZSgpICE9IFwiZmFsc2VcIlxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3MgcGFyZW50cyByZWN1cnNpdmVseSBiZWNhdXNlIHRoZSB0b3VjaCBtaWdodCBiZSBmb3IgZXhhbXBsZSBvbiBhbiA8ZW0+IGluc2lkZSBhIDxhPi5cbiAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgIHJldHVybiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vL1xuLy8gIGhpZ2hsaWdodC5qc1xuLy8gIHIyLW5hdmlnYXRvci1rb3RsaW5cbi8vXG4vLyAgT3JnYW5pemVkIGJ5IFRhZWh5dW4gS2ltIG9uIDYvMjcvMTkgZnJvbSByMi1uYXZpZ2F0b3ItanMuXG4vL1xuLy8gIENvcHlyaWdodCAyMDE5IFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHdoaWNoIGlzIGRldGFpbGVkXG4vLyAgaW4gdGhlIExJQ0VOU0UgZmlsZSBwcmVzZW50IGluIHRoZSBwcm9qZWN0IHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBzb3VyY2UgY29kZSBpcyBtYWludGFpbmVkLlxuLy9cblxuY29uc3QgUk9PVF9DTEFTU19SRURVQ0VfTU9USU9OID0gXCJyMi1yZWR1Y2UtbW90aW9uXCI7XG5jb25zdCBST09UX0NMQVNTX05PX0ZPT1ROT1RFUyA9IFwicjItbm8tcG9wdXAtZm9vbm90ZXNcIjtcbmNvbnN0IFBPUFVQX0RJQUxPR19DTEFTUyA9IFwicjItcG9wdXAtZGlhbG9nXCI7XG5jb25zdCBGT09UTk9URVNfQ09OVEFJTkVSX0NMQVNTID0gXCJyMi1mb290bm90ZS1jb250YWluZXJcIjtcbmNvbnN0IEZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNsb3NlXCI7XG5jb25zdCBGT09UTk9URV9GT1JDRV9TSE9XID0gXCJyMi1mb290bm90ZS1mb3JjZS1zaG93XCI7XG5jb25zdCBUVFNfSURfUFJFVklPVVMgPSBcInIyLXR0cy1wcmV2aW91c1wiO1xuY29uc3QgVFRTX0lEX05FWFQgPSBcInIyLXR0cy1uZXh0XCI7XG5jb25zdCBUVFNfSURfU0xJREVSID0gXCJyMi10dHMtc2xpZGVyXCI7XG5jb25zdCBUVFNfSURfQUNUSVZFX1dPUkQgPSBcInIyLXR0cy1hY3RpdmUtd29yZFwiO1xuY29uc3QgVFRTX0lEX0NPTlRBSU5FUiA9IFwicjItdHRzLXR4dFwiO1xuY29uc3QgVFRTX0lEX0lORk8gPSBcInIyLXR0cy1pbmZvXCI7XG5jb25zdCBUVFNfTkFWX0JVVFRPTl9DTEFTUyA9IFwicjItdHRzLWJ1dHRvblwiO1xuY29uc3QgVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UID0gXCJyMi10dHMtc3BlYWtpbmctZWxcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOID0gXCJyMi10dHMtc3BlYWtpbmctdHh0XCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9JTkpFQ1RFRF9QQVJFTlQgPSBcInIyLXR0cy1zcGVha2luZy10eHQtcGFyZW50XCI7XG5jb25zdCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUiA9IFwiUjJfSURfSElHSExJR0hUU19DT05UQUlORVJcIjtcbmNvbnN0IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9JRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9BUkVBXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXCI7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5jb25zdCBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSA9IFtcbiAgUE9QVVBfRElBTE9HX0NMQVNTLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTixcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4sXG4gIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQVJFQSxcbiAgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEsXG4gIFwicmVzaXplLXNlbnNvclwiLFxuXTtcbmNvbnN0IENMQVNTX1BBR0lOQVRFRCA9IFwicjItY3NzLXBhZ2luYXRlZFwiO1xuXG4vL2NvbnN0IElTX0RFViA9IChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldlwiKTtcbmNvbnN0IElTX0RFViA9IGZhbHNlO1xuY29uc3QgX2hpZ2hsaWdodHMgPSBbXTtcblxubGV0IF9oaWdobGlnaHRzQ29udGFpbmVyO1xubGV0IF9hbm5vdGF0aW9uQ29udGFpbmVyO1xubGV0IGxhc3RNb3VzZURvd25YID0gLTE7XG5sZXQgbGFzdE1vdXNlRG93blkgPSAtMTtcbmxldCBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSBmYWxzZTtcblxuY29uc3QgVVNFX1NWRyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjM7XG5jb25zdCBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC40NTtcblxuLy9jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSB7XG4gIGJsdWU6IDEwMCxcbiAgZ3JlZW46IDUwLFxuICByZWQ6IDIzMCxcbn07XG5cbmNvbnN0IEFOTk9UQVRJT05fV0lEVEggPSAxNTtcblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKF93aW4sIGhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gIGlmIChcbiAgICBoaWdobGlnaHRCb3VuZGluZy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSA9PSBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLm91dGxpbmUgPSBcIm5vbmVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgXCJ0cmFuc3BhcmVudFwiLFxuICAgIFwiaW1wb3J0YW50XCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYXMsIGhpZ2hsaWdodCkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgaGlnaGxpZ2h0QXJlYXMpIHtcbiAgICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gICAgY29uc3Qgb3BhY2l0eSA9IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGxcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gIGNvbnN0IGlkID0gaXNTVkdcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlkKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCkgPT4ge1xuICAgICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICAgIH0pO1xuICAgIGlmIChoaWdobGlnaHQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICAgIGlmIChpc1NWRykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbFwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICAvLyAgICBfaGlnaGxpZ2h0cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgLy8gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGEuc2VsZWN0aW9uSW5mbykpXG4gIC8vICAgICAgICByZXR1cm4gYS5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGggPCBiLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aFxuICAvLyAgICB9KVxuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcInRvdWNoc3RhcnRcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LmlkLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3VuZEhpZ2hsaWdodC5pZC5pbmNsdWRlcyhcIlIyX0FOTk9UQVRJT05fXCIpKTtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZXVwXCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCB0b3VjaGVkUG9zaXRpb24gPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVkUG9zaXRpb24sXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBsZXQgdG9QcmVzZXJ2ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW107XG4gICAgICAgICAgdG9DaGVjay5wdXNoKHRvUHJlc2VydmUpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRvQ2hlY2ssIHRvQWRkKTtcbiAgICAgICAgICBjaGVja092ZXJsYXBzKHRvQ2hlY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gY2hlY2tPdmVybGFwcyhyZWN0cykge1xuICBjb25zdCBzdGlsbE92ZXJsYXBpbmdSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJlY3QxIG9mIHJlY3RzKSB7XG4gICAgZm9yIChjb25zdCByZWN0MiBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhczEgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QxKSA+PSAwO1xuICAgICAgY29uc3QgaGFzMiA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDIpID49IDA7XG4gICAgICBpZiAoIWhhczEgfHwgIWhhczIpIHtcbiAgICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgICBpZiAoIWhhczEpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWhhczIpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiBvdmVybGFwIC0tLVwiKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMSBUT1A6JHtyZWN0MS50b3B9IEJPVFRPTToke3JlY3QxLmJvdHRvbX0gTEVGVDoke3JlY3QxLmxlZnR9IFJJR0hUOiR7cmVjdDEucmlnaHR9IFdJRFRIOiR7cmVjdDEud2lkdGh9IEhFSUdIVDoke3JlY3QxLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMiBUT1A6JHtyZWN0Mi50b3B9IEJPVFRPTToke3JlY3QyLmJvdHRvbX0gTEVGVDoke3JlY3QyLmxlZnR9IFJJR0hUOiR7cmVjdDIucmlnaHR9IFdJRFRIOiR7cmVjdDIud2lkdGh9IEhFSUdIVDoke3JlY3QyLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB4T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWChyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB4T3ZlcmxhcDogJHt4T3ZlcmxhcH1gKTtcbiAgICAgICAgICBjb25zdCB5T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWShyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB5T3ZlcmxhcDogJHt5T3ZlcmxhcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5sb2coYENMSUVOVCBSRUNUOiBvdmVybGFwcyAke3N0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIH1cbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgY29uc3QgcmVjdCA9IHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAocmFuZ2UsIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMpIHtcbiAgY29uc3QgcmFuZ2VDbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG4gIHJldHVybiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gICAgcmFuZ2VDbGllbnRSZWN0cyxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgY2xpZW50UmVjdHMsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY2hlY2tPdmVybGFwcyhuZXdSZWN0cyk7XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGVkKGRvY3VtZW50KSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX1BBR0lOQVRFRClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCkge1xuICBpZiAoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgaWYgKCFib2R5RXZlbnRMaXN0ZW5lcnNTZXQpIHtcbiAgICAgIGJvZHlFdmVudExpc3RlbmVyc1NldCA9IHRydWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vkb3duXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGxhc3RNb3VzZURvd25YID0gZXYuY2xpZW50WDtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWSA9IGV2LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNldXBcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blggLSBldi5jbGllbnRYKSA8IDMgJiZcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25ZIC0gZXYuY2xpZW50WSkgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlbW92ZVwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJ0b3VjaGVuZFwiLFxuICAgICAgICBmdW5jdGlvbiB0b3VjaEVuZChlKSB7XG4gICAgICAgICAgcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUik7XG5cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChfaGlnaGxpZ2h0c0NvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gX2hpZ2hsaWdodHNDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGhpZGVBbGxoaWdobGlnaHRzKCkge1xuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveUFsbGhpZ2hsaWdodHMoKSB7XG4gIGhpZGVBbGxoaWdobGlnaHRzKCk7XG4gIF9oaWdobGlnaHRzLnNwbGljZSgwLCBfaGlnaGxpZ2h0cy5sZW5ndGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzdHJveUhpZ2hsaWdodChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBsZXQgX2RvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGhpZ2hsaWdodCAmJiBpID49IDAgJiYgaSA8IF9oaWdobGlnaHRzLmxlbmd0aCkge1xuICAgIF9oaWdobGlnaHRzLnNwbGljZShpLCAxKTtcbiAgfVxuICBjb25zdCBoaWdobGlnaHRDb250YWluZXIgPSBfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaGlnaGxpZ2h0Q29udGFpbmVyKSB7XG4gICAgaGlnaGxpZ2h0Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2ZpVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChlbGVtZW50LCBjaGlsZCkge1xuICBsZXQgZm91bmQgPSAtMTtcbiAgbGV0IHRleHROb2RlSW5kZXggPSAtMTtcbiAgbGV0IHByZXZpb3VzV2FzRWxlbWVudCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBjb25zdCBpc1RleHQgPSBpc0NmaVRleHROb2RlKGNoaWxkTm9kZSk7XG4gICAgaWYgKGlzVGV4dCB8fCBwcmV2aW91c1dhc0VsZW1lbnQpIHtcbiAgICAgIHRleHROb2RlSW5kZXggKz0gMjtcbiAgICB9XG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgaWYgKGNoaWxkTm9kZSA9PT0gY2hpbGQpIHtcbiAgICAgICAgZm91bmQgPSB0ZXh0Tm9kZUluZGV4O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcHJldmlvdXNXYXNFbGVtZW50ID0gY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChub2RlMSwgbm9kZTIpIHtcbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMSA9PT0gbm9kZTIpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMS5jb250YWlucyhub2RlMikpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMi5jb250YWlucyhub2RlMSkpIHtcbiAgICByZXR1cm4gbm9kZTI7XG4gIH1cbiAgY29uc3Qgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBsZXQgcGFyZW50ID0gbm9kZTEucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgY29uc3Qgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBwYXJlbnQgPSBub2RlMi5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBsZXQgY29tbW9uQW5jZXN0b3IgPSBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoXG4gICAgKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH1cbiAgKTtcbiAgaWYgKCFjb21tb25BbmNlc3Rvcikge1xuICAgIGNvbW1vbkFuY2VzdG9yID0gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKChub2RlMkVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMkVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbW9uQW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIGZ1bGxRdWFsaWZpZWRTZWxlY3Rvcihub2RlKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZU5hbWU7XG4gIH1cbiAgLy9yZXR1cm4gY3NzUGF0aChub2RlLCBqdXN0U2VsZWN0b3IpO1xuICByZXR1cm4gY3NzUGF0aChub2RlLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIENPTExBUFNFRC5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYXdUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuVGV4dCA9IHJhd1RleHQudHJpbSgpLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhblRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFRFWFQgRU1QVFkuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZUluZm8gPSBjb252ZXJ0UmFuZ2UocmFuZ2UsIGZ1bGxRdWFsaWZpZWRTZWxlY3RvciwgY29tcHV0ZUNGSSk7XG4gIGlmICghcmFuZ2VJbmZvKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFJBTkdFIElORk8gRkFJTD8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoSVNfREVWICYmIERFQlVHX1ZJU1VBTFMpIHtcbiAgICBjb25zdCByZXN0b3JlZFJhbmdlID0gY29udmVydFJhbmdlSW5mbyh3aW4uZG9jdW1lbnQsIHJhbmdlSW5mbyk7XG4gICAgaWYgKHJlc3RvcmVkUmFuZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCA9PT0gcmFuZ2Uuc3RhcnRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQgPT09IHJhbmdlLmVuZE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRUQgT0tBWSAoZGV2IGNoZWNrKS5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFIEZBSUwgKGRldiBjaGVjaykuXCIpO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJTRUxFQ1RJT05cIixcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIk9SREVSRUQgUkFOR0UgRlJPTSBTRUxFQ1RJT05cIixcbiAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlJFU1RPUkVEIFJBTkdFXCIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0FOTk9UIFJFU1RPUkUgU0VMRUNUSU9OIFJBTkdFID8/IVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbyksXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiByYXdUZXh0LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrQmxhY2tsaXN0ZWQoZWwpIHtcbiAgbGV0IGJsYWNrbGlzdGVkSWQ7XG4gIGNvbnN0IGlkID0gZWwuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG4gIGlmIChpZCAmJiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSS5pbmRleE9mKGlkKSA+PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIElEOiBcIiArIGlkKTtcbiAgICBibGFja2xpc3RlZElkID0gaWQ7XG4gIH1cbiAgbGV0IGJsYWNrbGlzdGVkQ2xhc3M7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSkge1xuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoaXRlbSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBDTEFTUzogXCIgKyBpdGVtKTtcbiAgICAgIGJsYWNrbGlzdGVkQ2xhc3MgPSBpdGVtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChibGFja2xpc3RlZElkIHx8IGJsYWNrbGlzdGVkQ2xhc3MpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzUGF0aChub2RlLCBvcHRpbWl6ZWQpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBzdGVwcyA9IFtdO1xuICBsZXQgY29udGV4dE5vZGUgPSBub2RlO1xuICB3aGlsZSAoY29udGV4dE5vZGUpIHtcbiAgICBjb25zdCBzdGVwID0gX2Nzc1BhdGhTdGVwKGNvbnRleHROb2RlLCAhIW9wdGltaXplZCwgY29udGV4dE5vZGUgPT09IG5vZGUpO1xuICAgIGlmICghc3RlcCkge1xuICAgICAgYnJlYWs7IC8vIEVycm9yIC0gYmFpbCBvdXQgZWFybHkuXG4gICAgfVxuICAgIHN0ZXBzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgaWYgKHN0ZXAub3B0aW1pemVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29udGV4dE5vZGUgPSBjb250ZXh0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIHN0ZXBzLnJldmVyc2UoKTtcbiAgcmV0dXJuIHN0ZXBzLmpvaW4oXCIgPiBcIik7XG59XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9tYXN0ZXIvU291cmNlL2RldnRvb2xzL2Zyb250X2VuZC9jb21wb25lbnRzL0RPTVByZXNlbnRhdGlvblV0aWxzLmpzIzMxNlxuZnVuY3Rpb24gX2Nzc1BhdGhTdGVwKG5vZGUsIG9wdGltaXplZCwgaXNUYXJnZXROb2RlKSB7XG4gIGZ1bmN0aW9uIHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMobmQpIHtcbiAgICBjb25zdCBjbGFzc0F0dHJpYnV0ZSA9IG5kLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIGlmICghY2xhc3NBdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NBdHRyaWJ1dGVcbiAgICAgIC5zcGxpdCgvXFxzKy9nKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcCgobm0pID0+IHtcbiAgICAgICAgLy8gVGhlIHByZWZpeCBpcyByZXF1aXJlZCB0byBzdG9yZSBcIl9fcHJvdG9fX1wiIGluIGEgb2JqZWN0LWJhc2VkIG1hcC5cbiAgICAgICAgcmV0dXJuIFwiJFwiICsgbm07XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlkU2VsZWN0b3IoaWRkKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZCk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRlbnQpIHtcbiAgICBpZiAoaXNDU1NJZGVudGlmaWVyKGlkZW50KSkge1xuICAgICAgcmV0dXJuIGlkZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEVzY2FwZUZpcnN0ID0gL14oPzpbMC05XXwtWzAtOS1dPykvLnRlc3QoaWRlbnQpO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlkZW50Lmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGlkZW50LnJlcGxhY2UoLy4vZywgZnVuY3Rpb24gKGMsIGlpKSB7XG4gICAgICByZXR1cm4gKHNob3VsZEVzY2FwZUZpcnN0ICYmIGlpID09PSAwKSB8fCAhaXNDU1NJZGVudENoYXIoYylcbiAgICAgICAgPyBlc2NhcGVBc2NpaUNoYXIoYywgaWkgPT09IGxhc3RJbmRleClcbiAgICAgICAgOiBjO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlQXNjaWlDaGFyKGMsIGlzTGFzdCkge1xuICAgIHJldHVybiBcIlxcXFxcIiArIHRvSGV4Qnl0ZShjKSArIChpc0xhc3QgPyBcIlwiIDogXCIgXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9IZXhCeXRlKGMpIHtcbiAgICBsZXQgaGV4Qnl0ZSA9IGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gICAgaWYgKGhleEJ5dGUubGVuZ3RoID09PSAxKSB7XG4gICAgICBoZXhCeXRlID0gXCIwXCIgKyBoZXhCeXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGV4Qnl0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRDaGFyKGMpIHtcbiAgICBpZiAoL1thLXpBLVowLTlfLV0vLnRlc3QoYykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApID49IDB4YTA7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50aWZpZXIodmFsdWUpIHtcbiAgICByZXR1cm4gL14tP1thLXpBLVpfXVthLXpBLVowLTlfLV0qJC8udGVzdCh2YWx1ZSk7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBlbGVtZW50ID0gbm9kZTtcblxuICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cbiAgaWYgKG9wdGltaXplZCkge1xuICAgIGlmIChpZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogaWRTZWxlY3RvcihpZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImJvZHlcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJoZWFkXCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaHRtbFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBsb3dlckNhc2VOYW1lLCAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBub2RlTmFtZSA9IGxvd2VyQ2FzZU5hbWU7IC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7XG4gIGlmIChpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUgKyBpZFNlbGVjdG9yKGlkKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50IHx8IHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhlbGVtZW50KTtcblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICBpZiAocHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmVlZHNDbGFzc05hbWVzID0gZmFsc2U7XG4gIGxldCBuZWVkc050aENoaWxkID0gZmFsc2U7XG4gIGxldCBvd25JbmRleCA9IC0xO1xuICBsZXQgZWxlbWVudEluZGV4ID0gLTE7XG4gIGNvbnN0IHNpYmxpbmdzID0gcGFyZW50LmNoaWxkcmVuO1xuXG4gIGZvciAoXG4gICAgbGV0IGkgPSAwO1xuICAgIChvd25JbmRleCA9PT0gLTEgfHwgIW5lZWRzTnRoQ2hpbGQpICYmIGkgPCBzaWJsaW5ncy5sZW5ndGg7XG4gICAgKytpXG4gICkge1xuICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICBpZiAoc2libGluZy5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBlbGVtZW50SW5kZXggKz0gMTtcbiAgICBpZiAoc2libGluZyA9PT0gbm9kZSkge1xuICAgICAgb3duSW5kZXggPSBlbGVtZW50SW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNpYmxpbmcubm9kZU5hbWVJbkNvcnJlY3RDYXNlKClcbiAgICBjb25zdCBzaWJsaW5nTmFtZSA9XG4gICAgICAoc2libGluZy5sb2NhbE5hbWUgJiYgc2libGluZy5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIHNpYmxpbmcubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc2libGluZ05hbWUgIT09IG5vZGVOYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmVlZHNDbGFzc05hbWVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IG93bkNsYXNzTmFtZXMgPSBbXTtcbiAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBvd25DbGFzc05hbWVzLnB1c2goYXJySXRlbSk7XG4gICAgfSk7XG4gICAgbGV0IG93bkNsYXNzTmFtZUNvdW50ID0gb3duQ2xhc3NOYW1lcy5sZW5ndGg7XG5cbiAgICBpZiAob3duQ2xhc3NOYW1lQ291bnQgPT09IDApIHtcbiAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhzaWJsaW5nKTtcbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIGlmIChzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc2libGluZ0NsYXNzIG9mIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIGNvbnN0IGluZCA9IG93bkNsYXNzTmFtZXMuaW5kZXhPZihzaWJsaW5nQ2xhc3MpO1xuICAgICAgaWYgKGluZCA8IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG93bkNsYXNzTmFtZXMuc3BsaWNlKGluZCwgMSk7IC8vIGRlbGV0ZSBvd25DbGFzc05hbWVzW3NpYmxpbmdDbGFzc107XG5cbiAgICAgIGlmICghLS1vd25DbGFzc05hbWVDb3VudCkge1xuICAgICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdCA9IG5vZGVOYW1lO1xuICBpZiAoXG4gICAgaXNUYXJnZXROb2RlICYmXG4gICAgbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIilcbiAgKSB7XG4gICAgcmVzdWx0ICs9ICdbdHlwZT1cIicgKyBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgKyAnXCJdJztcbiAgfVxuICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgIHJlc3VsdCArPSBcIjpudGgtY2hpbGQoXCIgKyAob3duSW5kZXggKyAxKSArIFwiKVwiO1xuICB9IGVsc2UgaWYgKG5lZWRzQ2xhc3NOYW1lcykge1xuICAgIGZvciAoY29uc3QgcHJlZml4ZWROYW1lIG9mIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICByZXN1bHQgKz0gXCIuXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQocHJlZml4ZWROYW1lLnN1YnN0cigxKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpbWl6ZWQ6IGZhbHNlLFxuICAgIHZhbHVlOiByZXN1bHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDRkkobm9kZSkge1xuICAvLyBUT0RPOiBoYW5kbGUgY2hhcmFjdGVyIHBvc2l0aW9uIGluc2lkZSB0ZXh0IG5vZGVcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBjZmkgPSBcIlwiO1xuXG4gIGxldCBjdXJyZW50RWxlbWVudCA9IG5vZGU7XG4gIHdoaWxlIChcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlICYmXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgKSB7XG4gICAgY29uc3QgYmxhY2tsaXN0ZWQgPSBjaGVja0JsYWNrbGlzdGVkKGN1cnJlbnRFbGVtZW50KTtcbiAgICBpZiAoIWJsYWNrbGlzdGVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbjtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudEluZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuW2ldKSB7XG4gICAgICAgICAgY3VycmVudEVsZW1lbnRJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudEluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXggPSAoY3VycmVudEVsZW1lbnRJbmRleCArIDEpICogMjtcbiAgICAgICAgY2ZpID1cbiAgICAgICAgICBjZmlJbmRleCArXG4gICAgICAgICAgKGN1cnJlbnRFbGVtZW50LmlkID8gXCJbXCIgKyBjdXJyZW50RWxlbWVudC5pZCArIFwiXVwiIDogXCJcIikgK1xuICAgICAgICAgIChjZmkubGVuZ3RoID8gXCIvXCIgKyBjZmkgOiBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIFwiL1wiICsgY2ZpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlSGlnaGxpZ2h0KGxvY2F0aW9ucywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbiwgdHlwZSkge1xuICBjb25zdCByYW5nZUluZm8gPSBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb25zKTtcbiAgY29uc3QgdW5pcXVlU3RyID0gYCR7cmFuZ2VJbmZvLmNmaX0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5zdGFydE9mZnNldH0ke3JhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLmVuZE9mZnNldH1gO1xuXG4gIGNvbnN0IGhhc2ggPSByZXF1aXJlKFwiaGFzaC5qc1wiKTtcbiAgY29uc3Qgc2hhMjU2SGV4ID0gaGFzaC5zaGEyNTYoKS51cGRhdGUodW5pcXVlU3RyKS5kaWdlc3QoXCJoZXhcIik7XG5cbiAgdmFyIGlkO1xuICBpZiAodHlwZSA9PSBJRF9ISUdITElHSFRTX0NPTlRBSU5FUikge1xuICAgIGlkID0gXCJSMl9ISUdITElHSFRfXCIgKyBzaGEyNTZIZXg7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBcIlIyX0FOTk9UQVRJT05fXCIgKyBzaGEyNTZIZXg7XG4gIH1cblxuICBkZXN0cm95SGlnaGxpZ2h0KGlkKTtcblxuICBjb25zdCBoaWdobGlnaHQgPSB7XG4gICAgY29sb3I6IGNvbG9yID8gY29sb3IgOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgaWQsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIHJhbmdlSW5mbyxcbiAgfTtcbiAgX2hpZ2hsaWdodHMucHVzaChoaWdobGlnaHQpO1xuICBjcmVhdGVIaWdobGlnaHREb20oXG4gICAgd2luZG93LFxuICAgIGhpZ2hsaWdodCxcbiAgICB0eXBlID09IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uKSB7XG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIHNlbGVjdGlvbkluZm8sXG4gICAgY29sb3IsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uKGlkKSB7XG4gIGxldCBpID0gLTE7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChpID09IF9oaWdobGlnaHRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gIHZhciBsb2NhdGlvbnMgPSB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24oaGlnaGxpZ2h0LnJhbmdlSW5mbyksXG4gIH07XG5cbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgbG9jYXRpb25zLFxuICAgIGhpZ2hsaWdodC5jb2xvcixcbiAgICB0cnVlLFxuICAgIElEX0FOTk9UQVRJT05fQ09OVEFJTkVSXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodERvbSh3aW4sIGhpZ2hsaWdodCwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2NhbGUgPVxuICAgIDEgL1xuICAgICh3aW4uUkVBRElVTTIgJiYgd2luLlJFQURJVU0yLmlzRml4ZWRMYXlvdXRcbiAgICAgID8gd2luLlJFQURJVU0yLmZ4bFZpZXdwb3J0U2NhbGVcbiAgICAgIDogMSk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBoaWdobGlnaHRzQ29udGFpbmVyID0gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpO1xuICBjb25zdCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBoaWdobGlnaHQuaWQpO1xuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUik7XG5cbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgaGlnaGxpZ2h0UGFyZW50LnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBpZiAoaGlnaGxpZ2h0LnBvaW50ZXJJbnRlcmFjdGlvbikge1xuICAgIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIsIFwiMVwiKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgbGV0IGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnO1xuICBjb25zdCByb3VuZGVkQ29ybmVyID0gMztcbiAgY29uc3QgdW5kZXJsaW5lVGhpY2tuZXNzID0gMjtcbiAgY29uc3Qgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgPSAzO1xuICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gIGxldCBleHRyYSA9IFwiXCI7XG4gIGNvbnN0IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCA9XG4gICAgZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGhpZ2hsaWdodC5pZCk7XG5cbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBsZXQgYW5ub3RhdGlvbk9mZnNldDtcblxuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPVxuICAgICAgcGFyc2VJbnQoXG4gICAgICAgIChyYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSB4T2Zmc2V0KSAvIHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICApICsgMTtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPSBwYXJzZUludChcbiAgICAgIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAvIHdpbmRvdy5pbm5lcldpZHRoICsgMVxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAodXNlU1ZHKSB7XG4gICAgICBjb25zdCBib3JkZXJUaGlja25lc3MgPSAwO1xuICAgICAgaWYgKCFoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdSZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgXCJyZWN0XCJcbiAgICAgICk7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgZmlsbDogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pICFpbXBvcnRhbnQ7IGZpbGwtb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50OyBzdHJva2Utd2lkdGg6IDA7YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNjYWxlID0gc2NhbGU7XG5cbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnhcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnlcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QubGVmdCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInlcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QudG9wIC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmhlaWdodCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC53aWR0aCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdSZWN0KTtcbiAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCA+IHJvdW5kZWRDb3JuZXIgPyByb3VuZGVkQ29ybmVyIDogMDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgbGluZU9mZnNldCkgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAtXG4gICAgICAgICAgICAgIGxpbmVPZmZzZXQpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeSA9XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC1cbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgICAgaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcblxuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGgpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9IGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgeSA9IChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArIGxpbmVPZmZzZXQpICogc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICBjb25zdCByZ2IgPSBNYXRoLnJvdW5kKDB4ZmZmZmZmICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIGNvbnN0IHIgPSByZ2IgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAocmdiID4+IDgpICYgMjU1O1xuICAgICAgICBjb25zdCBiID0gcmdiICYgMjU1O1xuICAgICAgICBleHRyYSA9IGBvdXRsaW5lLWNvbG9yOiByZ2IoJHtyfSwgJHtnfSwgJHtifSk7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICAgIGV4dHJhICs9IGBib3JkZXItYm90dG9tOiAke3VuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlfXB4IHNvbGlkIHJnYmEoJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5yZWRcbiAgICAgICAgICB9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnRgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICBoaWdobGlnaHRBcmVhLnNjYWxlID0gc2NhbGU7XG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC50b3AgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWEpO1xuICAgICAgaWYgKCFERUJVR19WSVNVQUxTICYmIGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIC8vaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDtgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS53aWR0aCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3Qud2lkdGggKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmxlZnQgPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmxlZnQgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5oZWlnaHQgLyAyIC1cbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYUxpbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX1hNTF9OQU1FU1BBQ0UsIFwic3ZnXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc2V0QXR0cmlidXRlKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpO1xuICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWRyk7XG4gIH1cblxuICBjb25zdCBoaWdobGlnaHRCb3VuZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSk7XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnNjYWxlID0gc2NhbGU7XG5cbiAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgb3V0bGluZS1jb2xvcjogbWFnZW50YTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YFxuICAgICk7XG4gIH1cblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgIHRvcDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9O1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC50b3AgKiBzY2FsZX1weGA7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRCb3VuZGluZyk7XG4gIGhpZ2hsaWdodHNDb250YWluZXIuYXBwZW5kKGhpZ2hsaWdodFBhcmVudCk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodFBhcmVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlKHJhbmdlLCBnZXRDc3NTZWxlY3RvciwgY29tcHV0ZUVsZW1lbnRDRkkpIHtcbiAgY29uc3Qgc3RhcnRJc0VsZW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lclxuICAgIDogcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFzdGFydENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgaWYgKHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50XG4gICk7XG4gIGNvbnN0IGVuZElzRWxlbWVudCA9IHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnQgPSBlbmRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lclxuICAgIDogcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFlbmRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBlbmRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihyYW5nZS5lbmRDb250YWluZXIpO1xuICBpZiAoZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBjb21tb25FbGVtZW50QW5jZXN0b3IgPSBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQoXG4gICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICk7XG4gIGlmICghY29tbW9uRWxlbWVudEFuY2VzdG9yKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gTk8gUkFOR0UgQ09NTU9OIEFOQ0VTVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpIHtcbiAgICBjb25zdCByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCA9XG4gICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgPyByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lclxuICAgICAgICA6IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgJiZcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICkge1xuICAgICAgaWYgKGNvbW1vbkVsZW1lbnRBbmNlc3RvciAhPT0gcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCI+Pj4+Pj4gQ09NTU9OIEFOQ0VTVE9SIENPTlRBSU5FUiBESUZGPz8hXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3Rvcihjb21tb25FbGVtZW50QW5jZXN0b3IpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IocmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgcm9vdEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShjb21tb25FbGVtZW50QW5jZXN0b3IpO1xuICBjb25zdCBzdGFydEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShzdGFydENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBlbmRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGxldCBjZmk7XG4gIGlmIChyb290RWxlbWVudENmaSAmJiBzdGFydEVsZW1lbnRDZmkgJiYgZW5kRWxlbWVudENmaSkge1xuICAgIGxldCBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmk7XG4gICAgaWYgKCFzdGFydElzRWxlbWVudCkge1xuICAgICAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBzdGFydEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5zdGFydE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0IDwgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5zdGFydE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmk7XG4gICAgaWYgKCFlbmRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApO1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIGVuZEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA8IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2UuZW5kT2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLmVuZE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNmaSA9XG4gICAgICByb290RWxlbWVudENmaSArXG4gICAgICBcIixcIiArXG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIikgK1xuICAgICAgXCIsXCIgK1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogcmFuZ2UuZW5kT2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiByYW5nZS5zdGFydE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGlkKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFjbGllbnRSZWN0cykgcmV0dXJuO1xuXG4gIHZhciB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gIHZhciBtYXhIZWlnaHQgPSB0b3BDbGllbnRSZWN0LmhlaWdodDtcbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKGNsaWVudFJlY3QudG9wIDwgdG9wQ2xpZW50UmVjdC50b3ApIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0O1xuICAgIGlmIChjbGllbnRSZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICB2YXIgbmV3VG9wID0gdG9wQ2xpZW50UmVjdC50b3A7XG5cbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGJvdW5kaW5nQXJlYXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgICAgICk7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIC8vZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGJvdW5kaW5nQXJlYXMuc25hcHNob3RMZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBib3VuZGluZ0FyZWFzLmxlbmd0aCB8IDA7XG4gICAgICAgIGkgPCBsZW47XG4gICAgICAgIGkgPSAoaSArIDEpIHwgMFxuICAgICAgKSB7XG4gICAgICAgIHZhciBib3VuZGluZ0FyZWEgPSBib3VuZGluZ0FyZWFzW2ldO1xuICAgICAgICBpZiAoTWF0aC5hYnMoYm91bmRpbmdBcmVhLnJlY3QudG9wIC0gKG5ld1RvcCAtIHlPZmZzZXQpKSA8IDMpIHtcbiAgICAgICAgICBuZXdUb3AgKz0gYm91bmRpbmdBcmVhLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGZvdW5kKTtcbiAgfVxuXG4gIHRvcENsaWVudFJlY3QudG9wID0gbmV3VG9wO1xuICB0b3BDbGllbnRSZWN0LmhlaWdodCA9IG1heEhlaWdodDtcblxuICByZXR1cm4gdG9wQ2xpZW50UmVjdDtcbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG5cbiAgcmV0dXJuIGNsaWVudFJlY3RzO1xufVxuXG5mdW5jdGlvbiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBwYXJ0aWFsQ2ZpOiByYW5nZUluZm8uY2ZpLFxuICAgIGRvbVJhbmdlOiB7XG4gICAgICBzdGFydDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uZW5kT2Zmc2V0LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgY2ZpOiBsb2NhdGlvbi5wYXJ0aWFsQ2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgdmFyIHNpemUgPSB7XG4gICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgIGxlZnQ6IGNsaWVudFJlY3RzWzBdLmxlZnQsXG4gICAgd2lkdGg6IGNsaWVudFJlY3RzWzBdLndpZHRoLFxuICAgIHRvcDogY2xpZW50UmVjdHNbMF0udG9wLFxuICAgIGhlaWdodDogY2xpZW50UmVjdHNbMF0uaGVpZ2h0LFxuICB9O1xuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhhbmRsZUJvdW5kcyA9IHtcbiAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0LFxuICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICB0b3A6IGNsaWVudFJlY3QudG9wLFxuICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCb3VuZHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2Nyb2xsTW9kZShmbGFnKSB7XG4gIGlmICghZmxhZykge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX1BBR0lOQVRFRCk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfVxufVxuXG4vKlxuIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7IC8vIElFID49IDk7IG90aGVyIGJyb3dzZXJzXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgLy9hbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTsgLy9oZXJlIHlvdSBkcmF3IHlvdXIgb3duIG1lbnVcbiAgICAgICAgICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy9sZXQgZ2V0Q3NzU2VsZWN0b3IgPSBmdWxsUXVhbGlmaWVkU2VsZWN0b3I7XG4gICAgICAgICAgICBcblx0XHRcdGxldCBzdHIgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRsZXQgc2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCk7XG5cdFx0XHRsZXQgcG9zID0gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8se3JlZDoxMCxncmVlbjo1MCxibHVlOjIzMH0sdHJ1ZSk7XG5cdFx0XHRsZXQgcmV0MiA9IGNyZWF0ZUFubm90YXRpb24ocG9zLmlkKTtcblx0XHRcdFxuICB9LCBmYWxzZSk7XG4gICAgfSBlbHNlIHsgLy8gSUUgPCA5XG4gICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbmNvbnRleHRtZW51JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTtcbiAgICAgICAgICAgIHdpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4qL1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMiBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgaXNTY3JvbGxNb2RlRW5hYmxlZCwgcGFnZVdpZHRoIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGdldENzc1NlbGVjdG9yIH0gZnJvbSBcImNzcy1zZWxlY3Rvci1nZW5lcmF0b3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaXJzdFZpc2libGVMb2NhdG9yKCkge1xuICBjb25zdCBlbGVtZW50ID0gZmluZEZpcnN0VmlzaWJsZUJsb2NrRWxlbWVudCgpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHtcbiAgICAgIGNzc1NlbGVjdG9yOiBnZXRDc3NTZWxlY3RvcihlbGVtZW50KSxcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogZWxlbWVudC50ZXh0Q29udGVudCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50KCkge1xuICByZXR1cm4gZmluZEVsZW1lbnQoXG4gICAgZG9jdW1lbnQuYm9keSxcbiAgICAoZWxlbWVudCkgPT4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlzcGxheSAhPSBcImJsb2NrXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmluZEVsZW1lbnQocm9vdEVsZW1lbnQsIHNob3VsZElnbm9yZSkge1xuICB2YXIgZm91bmRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChjaGlsZCwgc2hvdWxkSWdub3JlKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRWxlbWVudFZpc2libGUocm9vdEVsZW1lbnQsIHVuZGVmaW5lZCwgc2hvdWxkSWdub3JlKSkge1xuICAgIHJldHVybiByb290RWxlbWVudDtcbiAgfVxufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKGVsZW1lbnQsIGRvbVJlY3QgLyogbnVsbGFibGUgKi8sIHNob3VsZElnbm9yZSkge1xuICBpZiAoXG4gICAgcmVhZGl1bS5pc0ZpeGVkTGF5b3V0IHx8XG4gICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fFxuICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoXG4gICAgIWRvY3VtZW50IHx8XG4gICAgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fFxuICAgICFkb2N1bWVudC5ib2R5IHx8XG4gICAgKHNob3VsZElnbm9yZSAmJiBzaG91bGRJZ25vcmUoZWxlbWVudCkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlY3QubGVmdCA8IHBhZ2VXaWR0aDtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIHJlZmxvd2FibGUgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzUmVmbG93YWJsZSA9IHRydWU7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgLy8gU2V0dXBzIHRoZSBgdmlld3BvcnRgIG1ldGEgdGFnIHRvIGRpc2FibGUgem9vbWluZy5cbiAgbGV0IG1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidmlld3BvcnRcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFxuICAgIFwiY29udGVudFwiLFxuICAgIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHNocmluay10by1maXQ9bm9cIlxuICApO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGEpO1xufSk7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwibG9jYXRpb25zIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IiLCJmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50IiwiZmluZEVsZW1lbnQiLCJkaXNwbGF5Iiwicm9vdEVsZW1lbnQiLCJzaG91bGRJZ25vcmUiLCJpc0VsZW1lbnRWaXNpYmxlIiwiZG9tUmVjdCIsInJlYWRpdW0iLCJlbFN0eWxlIiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyIsImlzUmVmbG93YWJsZSIsIm1ldGEiLCJoZWFkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHLHlCQUF5QjtBQUMzSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxrQkFBa0IsZ0RBQWdEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0JBQWdCO0FBQy9DO0FBQ0EsMkJBQTJCLGlDQUFpQztBQUM1RDtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBLHdCQUF3QjtBQUN4Qix1QkFBdUI7QUFDdkIseUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsaUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjtBQUN0QixtQ0FBbUMsT0FBTztBQUMxQywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsR0FBRztBQUN6Qjs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DLHNCQUFzQjtBQUMxRDs7QUFFQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0IsOEJBQThCLFlBQVk7QUFDMUMsd0VBQXdFLFlBQVk7QUFDcEY7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findFirstVisibleBlockElement();\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findFirstVisibleBlockElement() {\n return findElement(document.body, function (element) {\n return window.getComputedStyle(element).display != "block";\n });\n}\n\nfunction findElement(rootElement, shouldIgnore) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var element = findElement(child, shouldIgnore);\n\n if (element) {\n return element;\n }\n }\n\n if (isElementVisible(rootElement, undefined, shouldIgnore)) {\n return rootElement;\n }\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction isElementVisible(element, domRect\n/* nullable */\n, shouldIgnore) {\n if (readium.isFixedLayout || element === document.body || element === document.documentElement) {\n return true;\n }\n\n if (!document || !document.documentElement || !document.body || shouldIgnore && shouldIgnore(element)) {\n return false;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n return rect.left < pageWidth;\n }\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBc2UsRUFBQUEsbUJBQW1CLEVBQUVBLG1CQWJOO0FBZWY7QUFDQU8sRUFBQUEsMkJBQTJCLEVBQUVuYSxpQkFoQmQ7QUFpQmZRLEVBQUFBLGNBQWMsRUFBRUEsY0FqQkQ7QUFtQmY7QUFDQXVZLEVBQUFBLHVCQUF1QixFQUFFQSx1QkFBdUJBO0FBcEJqQyxDQUFqQixFQXVCQTs7QUFDQWhqQixNQUFNLENBQUN3ZSxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0F4ZSxNQUFNLENBQUNzZSxlQUFQLEdBQXlCQSxlQUF6QjtBQUNBdGUsTUFBTSxDQUFDb1gsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBcFgsTUFBTSxDQUFDMlksdUJBQVAsR0FBaUNBLHVCQUFqQztBQUNBM1ksTUFBTSxDQUFDMmlCLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQTNpQixNQUFNLENBQUMwaUIsMkJBQVAsR0FBcUNBLDJCQUFyQztBQUNBMWlCLE1BQU0sQ0FBQzhpQixhQUFQLEdBQXVCQSxhQUF2QixDOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBOWlCLE1BQU0sQ0FBQ3lqQixPQUFQLENBQWVZLFlBQWYsR0FBOEIsSUFBOUI7QUFFQTVtQixRQUFRLENBQUN3QyxnQkFBVCxDQUEwQixrQkFBMUIsRUFBOEMsWUFBWTtBQUN4RDtBQUNBLE1BQUlxa0IsSUFBSSxHQUFHN21CLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsTUFBdkIsQ0FBWDtBQUNBMGlCLEVBQUFBLElBQUksQ0FBQ3ppQixZQUFMLENBQWtCLE1BQWxCLEVBQTBCLFVBQTFCO0FBQ0F5aUIsRUFBQUEsSUFBSSxDQUFDemlCLFlBQUwsQ0FDRSxTQURGLEVBRUUsOEZBRkY7QUFJQXBFLEVBQUFBLFFBQVEsQ0FBQzhtQixJQUFULENBQWN0aUIsV0FBZCxDQUEwQnFpQixJQUExQjtBQUNELENBVEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1yZWZsb3dhYmxlLmpzPzM5MjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcHJveFNlYXJjaCBmcm9tICdhcHByb3gtc3RyaW5nLW1hdGNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHByb3gtc3RyaW5nLW1hdGNoJykuTWF0Y2h9IFN0cmluZ01hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBNYXRjaFxuICogQHByb3Age251bWJlcn0gc3RhcnQgLSBTdGFydCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gZW5kIC0gRW5kIG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBzY29yZSAtXG4gKiAgIFNjb3JlIGZvciB0aGUgbWF0Y2ggYmV0d2VlbiAwIGFuZCAxLjAsIHdoZXJlIDEuMCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNoXG4gKiAgIGZvciB0aGUgcXVvdGUgYW5kIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoZXMgZm9yIGBzdHJgIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhFcnJvcnNcbiAqIEByZXR1cm4ge1N0cmluZ01hdGNoW119XG4gKi9cbmZ1bmN0aW9uIHNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycykge1xuICAvLyBEbyBhIGZhc3Qgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLiBUaGUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGxpYnJhcnlcbiAgLy8gZG9lc24ndCBjdXJyZW50bHkgaW5jb3Jwb3JhdGUgdGhpcyBvcHRpbWl6YXRpb24gaXRzZWxmLlxuICBsZXQgbWF0Y2hQb3MgPSAwO1xuICBsZXQgZXhhY3RNYXRjaGVzID0gW107XG4gIHdoaWxlIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICBtYXRjaFBvcyA9IHRleHQuaW5kZXhPZihzdHIsIG1hdGNoUG9zKTtcbiAgICBpZiAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgICBleGFjdE1hdGNoZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtYXRjaFBvcyxcbiAgICAgICAgZW5kOiBtYXRjaFBvcyArIHN0ci5sZW5ndGgsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgIH0pO1xuICAgICAgbWF0Y2hQb3MgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4YWN0TWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGV4YWN0TWF0Y2hlcztcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBubyBleGFjdCBtYXRjaGVzLCBkbyBhIG1vcmUgZXhwZW5zaXZlIHNlYXJjaCBmb3IgbWF0Y2hlc1xuICAvLyB3aXRoIGVycm9ycy5cbiAgcmV0dXJuIGFwcHJveFNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGB0ZXh0YCBhbmQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gdGV4dE1hdGNoU2NvcmUodGV4dCwgc3RyKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gYHNjb3JlTWF0Y2hgIHdpbGwgbmV2ZXIgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKi9cbiAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgc3RyLCBzdHIubGVuZ3RoKTtcblxuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgcmV0dXJuIDEgLSAobWF0Y2hlc1swXS5lcnJvcnMgLyBzdHIubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoIGZvciBgcXVvdGVgIGluIGB0ZXh0YC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBpZiBubyBtYXRjaCBleGNlZWRpbmcgdGhlIG1pbmltdW0gcXVhbGl0eSB0aHJlc2hvbGQgd2FzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRG9jdW1lbnQgdGV4dCB0byBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdW90ZSAtIFN0cmluZyB0byBmaW5kIHdpdGhpbiBgdGV4dGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IC1cbiAqICAgQ29udGV4dCBpbiB3aGljaCB0aGUgcXVvdGUgb3JpZ2luYWxseSBhcHBlYXJlZC4gVGhpcyBpcyB1c2VkIHRvIGNob29zZSB0aGVcbiAqICAgYmVzdCBtYXRjaC5cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF0gLSBFeHBlY3RlZCB0ZXh0IGJlZm9yZSB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF0gLSBFeHBlY3RlZCB0ZXh0IGFmdGVyIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge251bWJlcn0gW2NvbnRleHQuaGludF0gLSBFeHBlY3RlZCBvZmZzZXQgb2YgbWF0Y2ggd2l0aGluIHRleHRcbiAqIEByZXR1cm4ge01hdGNofG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1b3RlKHRleHQsIHF1b3RlLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKHF1b3RlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hvb3NlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gYWxsb3cgZm9yIHRoZSBpbml0aWFsIHNlYXJjaC5cbiAgLy8gVGhpcyBjaG9pY2UgaW52b2x2ZXMgYSB0cmFkZW9mZiBiZXR3ZWVuOlxuICAvL1xuICAvLyAgLSBSZWNhbGwgKHByb3BvcnRpb24gb2YgXCJnb29kXCIgbWF0Y2hlcyBmb3VuZClcbiAgLy8gIC0gUHJlY2lzaW9uIChwcm9wb3J0aW9uIG9mIG1hdGNoZXMgZm91bmQgd2hpY2ggYXJlIFwiZ29vZFwiKVxuICAvLyAgLSBDb3N0IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgb2YgcHJvY2Vzc2luZyB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgWzFdXG4gIC8vXG4gIC8vIFsxXSBTcGVjaWZpY2FsbHksIHRoZSBleHBlY3RlZC10aW1lIGNvbXBsZXhpdHkgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGlzXG4gIC8vICAgICBgTygobWF4RXJyb3JzIC8gMzIpICogdGV4dC5sZW5ndGgpYC4gU2VlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBkb2NzLlxuICBjb25zdCBtYXhFcnJvcnMgPSBNYXRoLm1pbigyNTYsIHF1b3RlLmxlbmd0aCAvIDIpO1xuXG4gIC8vIEZpbmQgY2xvc2VzdCBtYXRjaGVzIGZvciBgcXVvdGVgIGluIGB0ZXh0YCBiYXNlZCBvbiBlZGl0IGRpc3RhbmNlLlxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHF1b3RlLCBtYXhFcnJvcnMpO1xuXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgYSBtYXRjaCBjYW5kaWRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nTWF0Y2h9IG1hdGNoXG4gICAqL1xuICBjb25zdCBzY29yZU1hdGNoID0gbWF0Y2ggPT4ge1xuICAgIGNvbnN0IHF1b3RlV2VpZ2h0ID0gNTA7IC8vIFNpbWlsYXJpdHkgb2YgbWF0Y2hlZCB0ZXh0IHRvIHF1b3RlLlxuICAgIGNvbnN0IHByZWZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYmVmb3JlIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5wcmVmaXhgLlxuICAgIGNvbnN0IHN1ZmZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYWZ0ZXIgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnN1ZmZpeGAuXG4gICAgY29uc3QgcG9zV2VpZ2h0ID0gMjsgLy8gUHJveGltaXR5IHRvIGV4cGVjdGVkIGxvY2F0aW9uLiBVc2VkIGFzIGEgdGllLWJyZWFrZXIuXG5cbiAgICBjb25zdCBxdW90ZVNjb3JlID0gMSAtIG1hdGNoLmVycm9ycyAvIHF1b3RlLmxlbmd0aDtcblxuICAgIGNvbnN0IHByZWZpeFNjb3JlID0gY29udGV4dC5wcmVmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShNYXRoLm1heCgwLCBtYXRjaC5zdGFydCAtIGNvbnRleHQucHJlZml4Lmxlbmd0aCksIG1hdGNoLnN0YXJ0KSxcbiAgICAgICAgICBjb250ZXh0LnByZWZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcbiAgICBjb25zdCBzdWZmaXhTY29yZSA9IGNvbnRleHQuc3VmZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UobWF0Y2guZW5kLCBtYXRjaC5lbmQgKyBjb250ZXh0LnN1ZmZpeC5sZW5ndGgpLFxuICAgICAgICAgIGNvbnRleHQuc3VmZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuXG4gICAgbGV0IHBvc1Njb3JlID0gMS4wO1xuICAgIGlmICh0eXBlb2YgY29udGV4dC5oaW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMobWF0Y2guc3RhcnQgLSBjb250ZXh0LmhpbnQpO1xuICAgICAgcG9zU2NvcmUgPSAxLjAgLSBvZmZzZXQgLyB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTY29yZSA9XG4gICAgICBxdW90ZVdlaWdodCAqIHF1b3RlU2NvcmUgK1xuICAgICAgcHJlZml4V2VpZ2h0ICogcHJlZml4U2NvcmUgK1xuICAgICAgc3VmZml4V2VpZ2h0ICogc3VmZml4U2NvcmUgK1xuICAgICAgcG9zV2VpZ2h0ICogcG9zU2NvcmU7XG4gICAgY29uc3QgbWF4U2NvcmUgPSBxdW90ZVdlaWdodCArIHByZWZpeFdlaWdodCArIHN1ZmZpeFdlaWdodCArIHBvc1dlaWdodDtcbiAgICBjb25zdCBub3JtYWxpemVkU2NvcmUgPSByYXdTY29yZSAvIG1heFNjb3JlO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTY29yZTtcbiAgfTtcblxuICAvLyBSYW5rIG1hdGNoZXMgYmFzZWQgb24gc2ltaWxhcml0eSBvZiBhY3R1YWwgYW5kIGV4cGVjdGVkIHN1cnJvdW5kaW5nIHRleHRcbiAgLy8gYW5kIGFjdHVhbC9leHBlY3RlZCBvZmZzZXQgaW4gdGhlIGRvY3VtZW50IHRleHQuXG4gIGNvbnN0IHNjb3JlZE1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+ICh7XG4gICAgc3RhcnQ6IG0uc3RhcnQsXG4gICAgZW5kOiBtLmVuZCxcbiAgICBzY29yZTogc2NvcmVNYXRjaChtKSxcbiAgfSkpO1xuXG4gIC8vIENob29zZSBtYXRjaCB3aXRoIGhpZ2hlc3Qgc2NvcmUuXG4gIHNjb3JlZE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICByZXR1cm4gc2NvcmVkTWF0Y2hlc1swXTtcbn1cbiIsIi8qKlxuICogUmV0dXJuIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGV4dCBub2RlcyBjb250YWluZWQgaW4gYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBub2RlVGV4dExlbmd0aChub2RlKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIC8vIG5iLiBgdGV4dENvbnRlbnRgIGV4Y2x1ZGVzIHRleHQgaW4gY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAvLyB3aGVuIGNhbGxlZCBvbiBhIHBhcmVudCBlbGVtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0IHRoYXQgaGVyZS5cblxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobm9kZS50ZXh0Q29udGVudCkubGVuZ3RoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IG9mIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIHdoaWxlIChzaWJsaW5nKSB7XG4gICAgbGVuZ3RoICs9IG5vZGVUZXh0TGVuZ3RoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIG9yIG1vcmUgY2hhcmFjdGVyIG9mZnNldHMgd2l0aGluIGFuIGVsZW1lbnQgdG8gKHRleHQgbm9kZSwgcG9zaXRpb24pXG4gKiBwYWlycy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyW119IG9mZnNldHMgLSBPZmZzZXRzLCB3aGljaCBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfVtdfVxuICovXG5mdW5jdGlvbiByZXNvbHZlT2Zmc2V0cyhlbGVtZW50LCAuLi5vZmZzZXRzKSB7XG4gIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICBjb25zdCBub2RlSXRlciA9IC8qKiBAdHlwZSB7RG9jdW1lbnR9ICovIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgKS5jcmVhdGVOb2RlSXRlcmF0b3IoZWxlbWVudCwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgbGV0IHRleHROb2RlO1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICAvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgYG5leHRPZmZzZXRgdGggY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0XG4gIC8vIG9mIGBlbGVtZW50YC5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Tm9kZSkge1xuICAgIHRleHROb2RlID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAoY3VycmVudE5vZGUpO1xuICAgIGlmIChsZW5ndGggKyB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IG5leHRPZmZzZXQpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IG5leHRPZmZzZXQgLSBsZW5ndGggfSk7XG4gICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gICAgICBsZW5ndGggKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLy8gQm91bmRhcnkgY2FzZS5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0Tm9kZSAmJiBsZW5ndGggPT09IG5leHRPZmZzZXQpIHtcbiAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCB9KTtcbiAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICB9XG5cbiAgaWYgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgZXhjZWVkcyB0ZXh0IGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBsZXQgUkVTT0xWRV9GT1JXQVJEUyA9IDE7XG5leHBvcnQgbGV0IFJFU09MVkVfQkFDS1dBUkRTID0gMjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9mZnNldCB3aXRoaW4gdGhlIHRleHQgY29udGVudCBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoaXMgcG9zaXRpb24gY2FuIGJlIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZGVzY2VuZGFudCBub2RlIGluIHRoZSBjdXJyZW50XG4gKiBET00gc3VidHJlZSBvZiB0aGUgZWxlbWVudCB1c2luZyB0aGUgYHJlc29sdmVgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgdGV4dCBwb3NpdGlvbiBgb2Zmc2V0YCB3aXRoaW5cbiAgICogdGhlIHRleHQgY29udGVudCBvZiBgZWxlbWVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPZmZzZXQgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8qKiBFbGVtZW50IHRoYXQgYG9mZnNldGAgaXMgcmVsYXRpdmUgdG8uICovXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIC8qKiBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50J3MgYHRleHRDb250ZW50YC4gKi9cbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcG9zaXRpb24gd2l0aCBvZmZzZXQgcmVsYXRpdmUgdG8gYSBnaXZlbiBhbmNlc3RvclxuICAgKiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudCAtIEFuY2VzdG9yIG9mIGB0aGlzLmVsZW1lbnRgXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHJlbGF0aXZlVG8ocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuY29udGFpbnModGhpcy5lbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGN1cnJlbnQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgd2hpbGUgKGVsICE9PSBwYXJlbnQpIHtcbiAgICAgIG9mZnNldCArPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChlbCk7XG4gICAgICBlbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHBvc2l0aW9uIHRvIGEgc3BlY2lmaWMgdGV4dCBub2RlIGFuZCBvZmZzZXQgd2l0aGluIHRoYXQgbm9kZS5cbiAgICpcbiAgICogVGhyb3dzIGlmIGB0aGlzLm9mZnNldGAgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSW4gdGhlXG4gICAqIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaGFzIG5vIHRleHQgYW5kIGB0aGlzLm9mZnNldGAgaXMgMCwgdGhlIGBkaXJlY3Rpb25gXG4gICAqIG9wdGlvbiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucy5cbiAgICpcbiAgICogT2Zmc2V0cyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbm9kZXMgYXJlIHJlc29sdmVkIHRvIHRoZSBzdGFydCBvZiB0aGVcbiAgICogbm9kZSB0aGF0IGJlZ2lucyBhdCB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICBAcGFyYW0ge1JFU09MVkVfRk9SV0FSRFN8UkVTT0xWRV9CQUNLV0FSRFN9IFtvcHRpb25zLmRpcmVjdGlvbl0gLVxuICAgKiAgICAgU3BlY2lmaWVzIGluIHdoaWNoIGRpcmVjdGlvbiB0byBzZWFyY2ggZm9yIHRoZSBuZWFyZXN0IHRleHQgbm9kZSBpZlxuICAgKiAgICAgYHRoaXMub2Zmc2V0YCBpcyBgMGAgYW5kIGB0aGlzLmVsZW1lbnRgIGhhcyBubyB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkXG4gICAqICAgICBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfX1cbiAgICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAgICovXG4gIHJlc29sdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXNvbHZlT2Zmc2V0cyh0aGlzLmVsZW1lbnQsIHRoaXMub2Zmc2V0KVswXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMCAmJiBvcHRpb25zLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHR3ID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Um9vdE5vZGUoKSxcbiAgICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVFxuICAgICAgICApO1xuICAgICAgICB0dy5jdXJyZW50Tm9kZSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9yd2FyZHMgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUkVTT0xWRV9GT1JXQVJEUztcbiAgICAgICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7VGV4dHxudWxsfSAqLyAoXG4gICAgICAgICAgZm9yd2FyZHMgPyB0dy5uZXh0Tm9kZSgpIDogdHcucHJldmlvdXNOb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRleHQsIG9mZnNldDogZm9yd2FyZHMgPyAwIDogdGV4dC5kYXRhLmxlbmd0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgYG9mZnNldGB0aCBjaGFyYWN0ZXIgd2l0aGluXG4gICAqIGBub2RlYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21DaGFyT2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbi5mcm9tUG9pbnQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCBvZmZzZXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGlzIG5vdCBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIHN0YXJ0IG9yIGVuZCBwb2ludCAobm9kZSwgb2Zmc2V0KS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGV4dCBvciBFbGVtZW50IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIE9mZnNldCB3aXRoaW4gdGhlIG5vZGUuXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tUG9pbnQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IC8qKiBAdHlwZSB7VGV4dH0gKi8gKG5vZGUpLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBoYXMgbm8gcGFyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSArIG9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihub2RlLnBhcmVudEVsZW1lbnQsIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggYmVmb3JlIHRoZSBgb2Zmc2V0YHRoIGNoaWxkIG9mIGVsZW1lbnQuXG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgICAgIHRleHRPZmZzZXQgKz0gbm9kZVRleHRMZW5ndGgobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IGluIGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZ2lvbiBvZiBhIGRvY3VtZW50IGFzIGEgKHN0YXJ0LCBlbmQpIHBhaXIgb2YgYFRleHRQb3NpdGlvbmAgcG9pbnRzLlxuICpcbiAqIFJlcHJlc2VudGluZyBhIHJhbmdlIGluIHRoaXMgd2F5IGFsbG93cyBmb3IgY2hhbmdlcyBpbiB0aGUgRE9NIGNvbnRlbnQgb2YgdGhlXG4gKiByYW5nZSB3aGljaCBkb24ndCBhZmZlY3QgaXRzIHRleHQgY29udGVudCwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHRleHQgY29udGVudFxuICogb2YgdGhlIHJhbmdlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRSYW5nZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW1tdXRhYmxlIGBUZXh0UmFuZ2VgIGZyb20gYSBgc3RhcnRgIGFuZCBgZW5kYCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IHN0YXJ0XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gYVxuICAgKiBnaXZlbiBhbmNlc3Rvci4gU2VlIGBUZXh0UG9zaXRpb24ucmVsYXRpdmVUb2AuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgcmVsYXRpdmVUbyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlVG8oZWxlbWVudCksXG4gICAgICB0aGlzLmVuZC5yZWxhdGl2ZVRvKGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgVGV4dFJhbmdlYCB0byBhIERPTSByYW5nZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBET00gUmFuZ2Ugd2lsbCBhbHdheXMgc3RhcnQgYW5kIGVuZCBpbiBhIGBUZXh0YCBub2RlLlxuICAgKiBIZW5jZSBgVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkudG9SYW5nZSgpYCBjYW4gYmUgdXNlZCB0byBcInNocmlua1wiIGFcbiAgICogcmFuZ2UgdG8gdGhlIHRleHQgaXQgY29udGFpbnMuXG4gICAqXG4gICAqIE1heSB0aHJvdyBpZiB0aGUgYHN0YXJ0YCBvciBgZW5kYCBwb3NpdGlvbnMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cbiAgdG9SYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCA9PT0gdGhpcy5lbmQuZWxlbWVudCAmJlxuICAgICAgdGhpcy5zdGFydC5vZmZzZXQgPD0gdGhpcy5lbmQub2Zmc2V0XG4gICAgKSB7XG4gICAgICAvLyBGYXN0IHBhdGggZm9yIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGluIHNhbWUgZWxlbWVudC5cbiAgICAgIFtzdGFydCwgZW5kXSA9IHJlc29sdmVPZmZzZXRzKFxuICAgICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQsXG4gICAgICAgIHRoaXMuc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmVuZC5vZmZzZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5zdGFydC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0ZPUldBUkRTIH0pO1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9CQUNLV0FSRFMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gZXhpc3RpbmcgRE9NIGBSYW5nZWAgdG8gYSBgVGV4dFJhbmdlYFxuICAgKlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKiBAcmV0dXJuIHtUZXh0UmFuZ2V9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KFxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICByYW5nZS5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgYFRleHRSYW5nZWAgZnJvbSB0aGUgYHN0YXJ0YHRoIHRvIGBlbmRgdGggY2hhcmFjdGVycyBpbiBgcm9vdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgc3RhdGljIGZyb21PZmZzZXRzKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgc3RhcnQpLFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBlbmQpXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGNsYXNzZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBET00gYFJhbmdlYFxuICogb2JqZWN0cyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlbGVjdG9ycy4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhXG4gKiBzZXQgb2YgYW5jaG9yaW5nIGxpYnJhcmllcy4gSXQgc2VydmVzIHR3byBtYWluIHB1cnBvc2VzOlxuICpcbiAqICAxLiBQcm92aWRpbmcgYSBjb25zaXN0ZW50IGludGVyZmFjZSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFuY2hvcnMuXG4gKiAgMi4gSW5zdWxhdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIEFQSSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGFuY2hvcmluZ1xuICogICAgIGxpYnJhcmllcy5cbiAqL1xuXG5pbXBvcnQgeyBtYXRjaFF1b3RlIH0gZnJvbSAnLi9tYXRjaC1xdW90ZSc7XG5pbXBvcnQgeyBUZXh0UmFuZ2UsIFRleHRQb3NpdGlvbiB9IGZyb20gJy4vdGV4dC1yYW5nZSc7XG5pbXBvcnQgeyBub2RlRnJvbVhQYXRoLCB4cGF0aEZyb21Ob2RlIH0gZnJvbSAnLi94cGF0aCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuUmFuZ2VTZWxlY3Rvcn0gUmFuZ2VTZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFBvc2l0aW9uU2VsZWN0b3J9IFRleHRQb3NpdGlvblNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UXVvdGVTZWxlY3Rvcn0gVGV4dFF1b3RlU2VsZWN0b3JcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUmFuZ2VBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgcmFuZ2UpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhbmNob3IgZnJvbSBhIHNlcmlhbGl6ZWQgYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2VTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3Iuc3RhcnRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghc3RhcnRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgc3RhcnRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLmVuZENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFlbmRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZW5kQ29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5lbmRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpLnRvUmFuZ2UoKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7UmFuZ2VTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgLy8gXCJTaHJpbmtcIiB0aGUgcmFuZ2Ugc28gdGhhdCBpdCB0aWdodGx5IHdyYXBzIGl0cyB0ZXh0LiBUaGlzIGVuc3VyZXMgbW9yZVxuICAgIC8vIHByZWRpY3RhYmxlIG91dHB1dCBmb3IgYSBnaXZlbiB0ZXh0IHNlbGVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkUmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHRoaXMucmFuZ2UpLnRvUmFuZ2UoKTtcblxuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2Uobm9ybWFsaXplZFJhbmdlKTtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLnN0YXJ0LmVsZW1lbnQsIHRoaXMucm9vdCk7XG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2UuZW5kLmVsZW1lbnQsIHRoaXMucm9vdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JhbmdlU2VsZWN0b3InLFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzdGFydE9mZnNldDogdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIGVuZE9mZnNldDogdGV4dFJhbmdlLmVuZC5vZmZzZXQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRQb3NpdGlvblNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbkFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKFxuICAgICAgcm9vdCxcbiAgICAgIHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICB0ZXh0UmFuZ2UuZW5kLm9mZnNldFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvblNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHJvb3QsIHNlbGVjdG9yLnN0YXJ0LCBzZWxlY3Rvci5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvblNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRQb3NpdGlvblNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICB9O1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gVGV4dFJhbmdlLmZyb21PZmZzZXRzKHRoaXMucm9vdCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLnRvUmFuZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFF1b3RlTWF0Y2hPcHRpb25zXG4gKiBAcHJvcCB7bnVtYmVyfSBbaGludF0gLSBFeHBlY3RlZCBwb3NpdGlvbiBvZiBtYXRjaCBpbiB0ZXh0LiBTZWUgYG1hdGNoUXVvdGVgLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFF1b3RlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFF1b3RlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhhY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XVxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBleGFjdCwgY29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmV4YWN0ID0gZXhhY3Q7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgVGV4dFF1b3RlQW5jaG9yYCBmcm9tIGEgcmFuZ2UuXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgYHJhbmdlYCBkb2VzIG5vdCBjb250YWluIGFueSB0ZXh0IG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICAgIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBxdW90ZSB0byBjYXB0dXJlIGFzIGNvbnRleHQuIFdlIGN1cnJlbnRseVxuICAgIC8vIGFsd2F5cyB1c2UgYSBmaXhlZCBhbW91bnQsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhpcyBjb2RlIHdhcyBhd2FyZVxuICAgIC8vIG9mIGxvZ2ljYWwgYm91bmRhcmllcyBpbiB0aGUgZG9jdW1lbnQgKHBhcmFncmFwaCwgYXJ0aWNsZSBldGMuKSB0byBhdm9pZFxuICAgIC8vIGNhcHR1cmluZyB0ZXh0IHVucmVsYXRlZCB0byB0aGUgcXVvdGUuXG4gICAgLy9cbiAgICAvLyBJbiByZWd1bGFyIHByb3NlIHRoZSBpZGVhbCBjb250ZW50IHdvdWxkIG9mdGVuIGJlIHRoZSBzdXJyb3VuZGluZyBzZW50ZW5jZS5cbiAgICAvLyBUaGlzIGlzIGEgbmF0dXJhbCB1bml0IG9mIG1lYW5pbmcgd2hpY2ggZW5hYmxlcyBkaXNwbGF5aW5nIHF1b3RlcyBpblxuICAgIC8vIGNvbnRleHQgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBpcyBub3QgYXZhaWxhYmxlLiBXZSBjb3VsZCB1c2UgYEludGwuU2VnbWVudGVyYFxuICAgIC8vIGZvciB0aGlzIHdoZW4gYXZhaWxhYmxlLlxuICAgIGNvbnN0IGNvbnRleHRMZW4gPSAzMjtcblxuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCksIHtcbiAgICAgIHByZWZpeDogdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIGNvbnRleHRMZW4pLCBzdGFydCksXG4gICAgICBzdWZmaXg6IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgY29udGV4dExlbikpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRRdW90ZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHsgcHJlZml4LCBzdWZmaXggfSA9IHNlbGVjdG9yO1xuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHNlbGVjdG9yLmV4YWN0LCB7IHByZWZpeCwgc3VmZml4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRRdW90ZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRRdW90ZVNlbGVjdG9yJyxcbiAgICAgIGV4YWN0OiB0aGlzLmV4YWN0LFxuICAgICAgcHJlZml4OiB0aGlzLmNvbnRleHQucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLmNvbnRleHQuc3VmZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1JhbmdlKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnRvUG9zaXRpb25BbmNob3Iob3B0aW9ucykudG9SYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hRdW90ZSh0ZXh0LCB0aGlzLmV4YWN0LCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICBoaW50OiBvcHRpb25zLmhpbnQsXG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdW90ZSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IodGhpcy5yb290LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgVGV4dFF1b3RlQW5jaG9yIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzXCI7XG5cbi8vIENhdGNoIEpTIGVycm9ycyB0byBsb2cgdGhlbSBpbiB0aGUgYXBwLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwiZXJyb3JcIixcbiAgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgQW5kcm9pZC5sb2dFcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5maWxlbmFtZSwgZXZlbnQubGluZW5vKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8vIE5vdGlmeSBuYXRpdmUgY29kZSB0aGF0IHRoZSBwYWdlIGhhcyBsb2FkZWQuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gICAgICBzbmFwQ3VycmVudE9mZnNldCgpO1xuICAgIH0pO1xuICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8qKlxuICogSGF2aW5nIGFuIG9kZCBudW1iZXIgb2YgY29sdW1ucyB3aGVuIGRpc3BsYXlpbmcgdHdvIGNvbHVtbnMgcGVyIHNjcmVlbiBjYXVzZXMgc25hcHBpbmcgYW5kIHBhZ2VcbiAqIHR1cm5pbmcgaXNzdWVzLiBUbyBmaXggdGhpcywgd2UgaW5zZXJ0IGEgYmxhbmsgdmlydHVhbCBjb2x1bW4gYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpIHtcbiAgY29uc3QgaWQgPSBcInJlYWRpdW0tdmlydHVhbC1wYWdlXCI7XG4gIHZhciB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHx8IGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkgIT0gMikge1xuICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGNvbENvdW50ID0gZG9jdW1lbnRXaWR0aCAvIHBhZ2VXaWR0aDtcbiAgICB2YXIgaGFzT2RkQ29sQ291bnQgPSAoTWF0aC5yb3VuZChjb2xDb3VudCAqIDIpIC8gMikgJSAxID4gMC4xO1xuICAgIGlmIChoYXNPZGRDb2xDb3VudCkge1xuICAgICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2aXJ0dWFsQ29sLnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgICAgdmlydHVhbENvbC5zdHlsZS5icmVha0JlZm9yZSA9IFwiY29sdW1uXCI7XG4gICAgICAgIHZpcnR1YWxDb2wuaW5uZXJIVE1MID0gXCImIzgyMDM7XCI7IC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aXJ0dWFsQ29sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHZhciBwYWdlV2lkdGggPSAxO1xuXG5mdW5jdGlvbiBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCkge1xuICAvLyBXZSBjYW4ndCByZWx5IG9uIHdpbmRvdy5pbm5lcldpZHRoIGZvciB0aGUgcGFnZVdpZHRoIG9uIEFuZHJvaWQsIGJlY2F1c2UgaWYgdGhlXG4gIC8vIGRldmljZSBwaXhlbCByYXRpbyBpcyBub3QgYW4gaW50ZWdlciwgd2UgZ2V0IHJvdW5kaW5nIGlzc3VlcyBvZmZzZXR0aW5nIHRoZSBwYWdlcy5cbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3JlYWRpdW0tY3NzL2lzc3Vlcy85N1xuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcjItbmF2aWdhdG9yLWtvdGxpbi9pc3N1ZXMvMTQ2XG4gIHZhciB3aWR0aCA9IEFuZHJvaWQuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICBwYWdlV2lkdGggPSB3aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBzZXRQcm9wZXJ0eShcbiAgICBcIi0tUlNfX3ZpZXdwb3J0V2lkdGhcIixcbiAgICBcImNhbGMoXCIgKyB3aWR0aCArIFwicHggLyBcIiArIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICsgXCIpXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkge1xuICByZXR1cm4gcGFyc2VJbnQoXG4gICAgd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbi1jb3VudFwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1VU0VSX19zY3JvbGxcIilcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpID09IFwicmVhZGl1bS1zY3JvbGwtb25cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Q3NzU2VsZWN0b3IgfSBmcm9tIFwiY3NzLXNlbGVjdG9yLWdlbmVyYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IoKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50KCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhyZWY6IFwiI1wiLFxuICAgIHR5cGU6IFwiYXBwbGljYXRpb24veGh0bWwreG1sXCIsXG4gICAgbG9jYXRpb25zOiB7XG4gICAgICBjc3NTZWxlY3RvcjogZ2V0Q3NzU2VsZWN0b3IoZWxlbWVudCksXG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IGVsZW1lbnQudGV4dENvbnRlbnQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUJsb2NrRWxlbWVudCgpIHtcbiAgcmV0dXJuIGZpbmRFbGVtZW50KFxuICAgIGRvY3VtZW50LmJvZHksXG4gICAgKGVsZW1lbnQpID0+IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmRpc3BsYXkgIT0gXCJibG9ja1wiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbmRFbGVtZW50KHJvb3RFbGVtZW50LCBzaG91bGRJZ25vcmUpIHtcbiAgdmFyIGZvdW5kRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgZm9yICh2YXIgaSA9IHJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgY2hpbGQgPSByb290RWxlbWVudC5jaGlsZHJlbltpXTtcbiAgICBjb25zdCBlbGVtZW50ID0gZmluZEVsZW1lbnQoY2hpbGQsIHNob3VsZElnbm9yZSk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0VsZW1lbnRWaXNpYmxlKHJvb3RFbGVtZW50LCB1bmRlZmluZWQsIHNob3VsZElnbm9yZSkpIHtcbiAgICByZXR1cm4gcm9vdEVsZW1lbnQ7XG4gIH1cbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovLCBzaG91bGRJZ25vcmUpIHtcbiAgaWYgKFxuICAgIHJlYWRpdW0uaXNGaXhlZExheW91dCB8fFxuICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgfHxcbiAgICBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKFxuICAgICFkb2N1bWVudCB8fFxuICAgICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHxcbiAgICAhZG9jdW1lbnQuYm9keSB8fFxuICAgIChzaG91bGRJZ25vcmUgJiYgc2hvdWxkSWdub3JlKGVsZW1lbnQpKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBlbFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgaWYgKGVsU3R5bGUpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKTtcbiAgICBpZiAoZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZWN0LmxlZnQgPCBwYWdlV2lkdGg7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGxvZ0Vycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IHRvTmF0aXZlUmVjdCB9IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IFRleHRSYW5nZSB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlXCI7XG5cbi8vIFBvbHlmaWxsIGZvciBBbmRyb2lkIEFQSSAyNlxuaW1wb3J0IG1hdGNoQWxsIGZyb20gXCJzdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsXCI7XG5tYXRjaEFsbC5zaGltKCk7XG5cbmNvbnN0IGRlYnVnID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb24oKSB7XG4gIGNvbnN0IHRleHQgPSBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdCgpO1xuICByZXR1cm4geyB0ZXh0LCByZWN0IH07XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIHJldHVybiB0b05hdGl2ZVJlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhbkhpZ2hsaWdodCA9IGhpZ2hsaWdodFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxuL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDtcbiAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhkb2N1bWVudC5ib2R5KTtcbiAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICBjb25zdCBzbmlwcGV0TGVuZ3RoID0gMjAwO1xuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYmVmb3JlIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBmaXJzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYmVmb3JlID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIHNuaXBwZXRMZW5ndGgpLCBzdGFydCk7XG4gIGxldCBmaXJzdFdvcmRTdGFydCA9IGJlZm9yZS5zZWFyY2goL1xcUHtMfVxccHtMfS9ndSk7XG4gIGlmIChmaXJzdFdvcmRTdGFydCAhPT0gLTEpIHtcbiAgICBiZWZvcmUgPSBiZWZvcmUuc2xpY2UoZmlyc3RXb3JkU3RhcnQgKyAxKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYWZ0ZXIgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGxhc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGFmdGVyID0gdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBzbmlwcGV0TGVuZ3RoKSk7XG4gIGxldCBsYXN0V29yZEVuZCA9IEFycmF5LmZyb20oYWZ0ZXIubWF0Y2hBbGwoL1xccHtMfVxcUHtMfS9ndSkpLnBvcCgpO1xuICBpZiAobGFzdFdvcmRFbmQgIT09IHVuZGVmaW5lZCAmJiBsYXN0V29yZEVuZC5pbmRleCA+IDEpIHtcbiAgICBhZnRlciA9IGFmdGVyLnNsaWNlKDAsIGxhc3RXb3JkRW5kLmluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4geyBoaWdobGlnaHQsIGJlZm9yZSwgYWZ0ZXIgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIEJhc2Ugc2NyaXB0IHVzZWQgYnkgYm90aCByZWZsb3dhYmxlIGFuZCBmaXhlZCBsYXlvdXQgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2dlc3R1cmVzXCI7XG5pbXBvcnQge1xuICByZW1vdmVQcm9wZXJ0eSxcbiAgc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvRW5kLFxuICBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb1RleHQsXG4gIHNldFByb3BlcnR5LFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5ub3RhdGlvbixcbiAgY3JlYXRlSGlnaGxpZ2h0LFxuICBkZXN0cm95SGlnaGxpZ2h0LFxuICBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbyxcbiAgZ2V0U2VsZWN0aW9uUmVjdCxcbiAgcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElELFxuICBzZXRTY3JvbGxNb2RlLFxufSBmcm9tIFwiLi9oaWdobGlnaHRcIjtcbmltcG9ydCB7IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yIH0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXREZWNvcmF0aW9ucywgcmVnaXN0ZXJUZW1wbGF0ZXMgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxuLy8gUHVibGljIEFQSSB1c2VkIGJ5IHRoZSBuYXZpZ2F0b3IuXG53aW5kb3cucmVhZGl1bSA9IHtcbiAgLy8gdXRpbHNcbiAgc2Nyb2xsVG9JZDogc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbjogc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9UZXh0OiBzY3JvbGxUb1RleHQsXG4gIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0OiBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9TdGFydDogc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9FbmQ6IHNjcm9sbFRvRW5kLFxuICBzZXRQcm9wZXJ0eTogc2V0UHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnR5OiByZW1vdmVQcm9wZXJ0eSxcblxuICAvLyBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbjogZ2V0Q3VycmVudFNlbGVjdGlvbixcblxuICAvLyBkZWNvcmF0aW9uXG4gIHJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlczogcmVnaXN0ZXJUZW1wbGF0ZXMsXG4gIGdldERlY29yYXRpb25zOiBnZXREZWNvcmF0aW9ucyxcblxuICAvLyBET01cbiAgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3I6IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yLFxufTtcblxuLy8gTGVnYWN5IGhpZ2hsaWdodHMgQVBJLlxud2luZG93LmNyZWF0ZUFubm90YXRpb24gPSBjcmVhdGVBbm5vdGF0aW9uO1xud2luZG93LmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbndpbmRvdy5kZXN0cm95SGlnaGxpZ2h0ID0gZGVzdHJveUhpZ2hsaWdodDtcbndpbmRvdy5nZXRDdXJyZW50U2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvO1xud2luZG93LmdldFNlbGVjdGlvblJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0O1xud2luZG93LnJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCA9IHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRDtcbndpbmRvdy5zZXRTY3JvbGxNb2RlID0gc2V0U2Nyb2xsTW9kZTtcbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIFNjcmlwdCB1c2VkIGZvciByZWZsb3dhYmxlIHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9pbmRleFwiO1xuXG53aW5kb3cucmVhZGl1bS5pc1JlZmxvd2FibGUgPSB0cnVlO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFNldHVwcyB0aGUgYHZpZXdwb3J0YCBtZXRhIHRhZyB0byBkaXNhYmxlIHpvb21pbmcuXG4gIGxldCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpO1xuICBtZXRhLnNldEF0dHJpYnV0ZShcbiAgICBcImNvbnRlbnRcIixcbiAgICBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCBzaHJpbmstdG8tZml0PW5vXCJcbiAgKTtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChtZXRhKTtcbn0pO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEZpcnN0VmlzaWJsZUJsb2NrRWxlbWVudCIsImhyZWYiLCJmaW5kRWxlbWVudCIsImRpc3BsYXkiLCJyb290RWxlbWVudCIsInNob3VsZElnbm9yZSIsImlzRWxlbWVudFZpc2libGUiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzIiwiaXNSZWZsb3dhYmxlIiwibWV0YSIsImhlYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/R2BasicWebView.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/R2BasicWebView.kt index d9632aa364..599db96ede 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/R2BasicWebView.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/R2BasicWebView.kt @@ -434,6 +434,11 @@ open class R2BasicWebView(context: Context, attrs: AttributeSet) : WebView(conte runJavaScript("getSelectionRect();", callback) } + internal suspend fun findFirstVisibleLocator(): Locator? = + runJavaScriptSuspend("readium.findFirstVisibleLocator();") + .let { tryOrNull { JSONObject(it) } } + ?.let { Locator.fromJSON(it) } + fun createHighlight(locator: String?, color: String?, callback: (String) -> Unit) { uiScope.launch { runJavaScript("createHighlight($locator, $color, true);", callback) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index b8e830e810..afeae94453 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -54,6 +54,7 @@ import org.readium.r2.shared.publication.presentation.presentation import org.readium.r2.shared.publication.services.isRestricted import org.readium.r2.shared.publication.services.positionsByReadingOrder import org.readium.r2.shared.util.launchWebBrowser +import org.readium.r2.shared.util.mediatype.MediaType import kotlin.math.ceil import kotlin.reflect.KClass @@ -639,6 +640,18 @@ class EpubNavigatorFragment private constructor( ?: requireNotNull(publication.locatorFromLink(publication.readingOrder.first())) ) + @InternalReadiumApi + suspend fun firstVisibleElementLocator(): Locator? { + if (!::resourcePager.isInitialized) return null + + val resource = publication.readingOrder[resourcePager.currentItem] + return currentFragment?.webView?.findFirstVisibleLocator() + ?.copy( + href = resource.href, + type = resource.type ?: MediaType.XHTML.toString() + ) + } + /** * While scrolling we receive a lot of new current locations, so we use a coroutine job to * debounce the notification. diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt index 2a2631a475..caa0dba0dd 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt @@ -18,6 +18,7 @@ import org.readium.r2.shared.fetcher.mapCatching import org.readium.r2.shared.publication.Link import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.html.cssSelector import org.readium.r2.shared.publication.indexOfFirstWithHref import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.SuspendingCloseable @@ -89,14 +90,15 @@ interface ContentIterator : SuspendingCloseable { class PublicationContentIterator( private val publication: Publication, - start: Locator?, + private val start: Locator?, private val resourceContentIteratorFactories: List ) : ContentIterator { - - private var nextIndex = + private val startIndex = start?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } ?: 0 + private var nextIndex = startIndex + private var currentIterator: ContentIterator? = null private suspend fun iterator(): ContentIterator? { @@ -108,7 +110,13 @@ class PublicationContentIterator( } val link = publication.readingOrder[nextIndex] - val locator = publication.locatorFromLink(link) ?: return null + var locator = publication.locatorFromLink(link) ?: return null + if (start != null && nextIndex == startIndex) { + locator = locator.copy( + text = start.text, + locations = start.locations + ) + } val resource = publication.get(link) currentIterator = resourceContentIteratorFactories .firstNotNullOfOrNull { factory -> factory(resource, locator) } @@ -158,9 +166,19 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) } private fun parseElement(element: Element): List { - val contentParser = ContentParser(locator) + val contentParser = ContentParser( + baseLocator = locator, + startElement = locator.locations.cssSelector + // The JS third-party library used to generate the CSS Selector sometimes adds + // :root >, which doesn't work with JSoup. + ?.let { element.selectFirst(it.removePrefix(":root > ")) }, + ) NodeTraversor.traverse(contentParser, element) - return contentParser.content.toList() + var content = contentParser.content + if (contentParser.startIndex > 0) { + content = content.subList(contentParser.startIndex, content.size) + } + return content.toList() } private var items: Try, Exception>? = null @@ -181,9 +199,12 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) items().map { it.removeFirstOrNull() } private class ContentParser( - private var baseLocator: Locator + private var baseLocator: Locator, + private val startElement: Element?, ) : NodeVisitor { val content = mutableListOf() + var startIndex = 0 + var currentElement: Element? = null private val spansAcc = mutableListOf() private var textAcc = StringBuilder() @@ -202,6 +223,8 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) } if (node is Element) { + currentElement = node + val tag = node.normalName() when { tag == "br" -> { @@ -273,6 +296,9 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) flushSpan() if (spansAcc.isEmpty()) return + if (startElement != null && currentElement == startElement) { + startIndex = content.size + } content.add(Content.Text( spans = spansAcc.toList(), )) From 6679272a47ea09cb76a9e0c6c7d56a5e3a8eb4ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 5 Apr 2022 18:45:10 +0200 Subject: [PATCH 16/59] Optimize first visible element selection --- .../src/main/assets/_scripts/src/dom.js | 80 ++++++++++--------- .../assets/readium/scripts/readium-fixed.js | 2 +- .../readium/scripts/readium-reflowable.js | 2 +- 3 files changed, 44 insertions(+), 40 deletions(-) diff --git a/readium/navigator/src/main/assets/_scripts/src/dom.js b/readium/navigator/src/main/assets/_scripts/src/dom.js index 4a9ba00d3a..ae94d981ae 100644 --- a/readium/navigator/src/main/assets/_scripts/src/dom.js +++ b/readium/navigator/src/main/assets/_scripts/src/dom.js @@ -8,7 +8,7 @@ import { log as logNative, isScrollModeEnabled, pageWidth } from "./utils"; import { getCssSelector } from "css-selector-generator"; export function findFirstVisibleLocator() { - const element = findFirstVisibleBlockElement(); + const element = findElement(document.body); if (!element) { return undefined; } @@ -25,51 +25,62 @@ export function findFirstVisibleLocator() { }; } -function findFirstVisibleBlockElement() { - return findElement( - document.body, - (element) => window.getComputedStyle(element).display != "block" - ); -} - -function findElement(rootElement, shouldIgnore) { +function findElement(rootElement) { var foundElement = undefined; for (var i = rootElement.children.length - 1; i >= 0; i--) { const child = rootElement.children[i]; - const element = findElement(child, shouldIgnore); - if (element) { - return element; + const position = elementRelativePosition(child, undefined); + if (position == 0) { + if (!shouldIgnoreElement(child)) { + foundElement = child; + } + } else if (position < 0) { + if (!foundElement) { + foundElement = child; + } + break; } } - if (isElementVisible(rootElement, undefined, shouldIgnore)) { - return rootElement; + if (foundElement) { + return findElement(foundElement); } + return rootElement; } // See computeVisibility_() in r2-navigator-js -function isElementVisible(element, domRect /* nullable */, shouldIgnore) { - if ( - readium.isFixedLayout || - element === document.body || - element === document.documentElement - ) { - return true; +function elementRelativePosition(element, domRect /* nullable */) { + if (readium.isFixedLayout) return true; + + if (element === document.body || element === document.documentElement) { + return -1; } - if ( - !document || - !document.documentElement || - !document.body || - (shouldIgnore && shouldIgnore(element)) - ) { - return false; + if (!document || !document.documentElement || !document.body) { + return 1; + } + + const rect = domRect || element.getBoundingClientRect(); + + const scrollElement = document.scrollingElement; + if (isScrollModeEnabled()) { + return rect.top >= 0 && rect.top <= document.documentElement.clientHeight; + } else { + if (rect.left >= pageWidth) { + return 1; + } else if (rect.left >= 0) { + return 0; + } else { + return -1; + } } +} +function shouldIgnoreElement(element) { const elStyle = getComputedStyle(element); if (elStyle) { const display = elStyle.getPropertyValue("display"); if (display === "none") { - return false; + return true; } // Cannot be relied upon, because web browser engine reports invisible when out of view in // scrolled columns! @@ -79,16 +90,9 @@ function isElementVisible(element, domRect /* nullable */, shouldIgnore) { // } const opacity = elStyle.getPropertyValue("opacity"); if (opacity === "0") { - return false; + return true; } } - const rect = domRect || element.getBoundingClientRect(); - - const scrollElement = document.scrollingElement; - if (isScrollModeEnabled()) { - return rect.top >= 0 && rect.top <= document.documentElement.clientHeight; - } else { - return rect.left < pageWidth; - } + return false; } diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js index a38ddfb480..97fac15f7b 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findFirstVisibleBlockElement();\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findFirstVisibleBlockElement() {\n return findElement(document.body, function (element) {\n return window.getComputedStyle(element).display != "block";\n });\n}\n\nfunction findElement(rootElement, shouldIgnore) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var element = findElement(child, shouldIgnore);\n\n if (element) {\n return element;\n }\n }\n\n if (isElementVisible(rootElement, undefined, shouldIgnore)) {\n return rootElement;\n }\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction isElementVisible(element, domRect\n/* nullable */\n, shouldIgnore) {\n if (readium.isFixedLayout || element === document.body || element === document.documentElement) {\n return true;\n }\n\n if (!document || !document.documentElement || !document.body || shouldIgnore && shouldIgnore(element)) {\n return false;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n return rect.left < pageWidth;\n }\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBc2UsRUFBQUEsbUJBQW1CLEVBQUVBLG1CQWJOO0FBZWY7QUFDQU8sRUFBQUEsMkJBQTJCLEVBQUVuYSxpQkFoQmQ7QUFpQmZRLEVBQUFBLGNBQWMsRUFBRUEsY0FqQkQ7QUFtQmY7QUFDQXVZLEVBQUFBLHVCQUF1QixFQUFFQSx1QkFBdUJBO0FBcEJqQyxDQUFqQixFQXVCQTs7QUFDQWhqQixNQUFNLENBQUN3ZSxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0F4ZSxNQUFNLENBQUNzZSxlQUFQLEdBQXlCQSxlQUF6QjtBQUNBdGUsTUFBTSxDQUFDb1gsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBcFgsTUFBTSxDQUFDMlksdUJBQVAsR0FBaUNBLHVCQUFqQztBQUNBM1ksTUFBTSxDQUFDMmlCLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQTNpQixNQUFNLENBQUMwaUIsMkJBQVAsR0FBcUNBLDJCQUFyQztBQUNBMWlCLE1BQU0sQ0FBQzhpQixhQUFQLEdBQXVCQSxhQUF2QixDOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBOWlCLE1BQU0sQ0FBQ3lqQixPQUFQLENBQWU5RSxhQUFmLEdBQStCLElBQS9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvbWF0Y2gtcXVvdGUuanM/ZGQ2YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlLmpzP2ZkZWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXMuanM/NDAwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3V0aWxzLmpzPzAyNWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9yZWN0LmpzPzRkNWEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kZWNvcmF0b3IuanM/MWIwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2dlc3R1cmVzLmpzPzE0YzIiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9oaWdobGlnaHQuanM/OGRhOCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RvbS5qcz9jYmYwIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvc2VsZWN0aW9uLmpzPzU5YWMiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC5qcz9iNjM1Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXgtZml4ZWQuanM/ZDk5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JUTCgpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuZGlyLnRvTG93ZXJDYXNlKCkgPT0gXCJydGxcIjtcbn1cblxuLy8gU2Nyb2xsIHRvIHRoZSBnaXZlbiBUYWdJZCBpbiBkb2N1bWVudCBhbmQgc25hcC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0lkKGlkKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVG9SZWN0KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG4vLyBQb3NpdGlvbiBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCAtIDFdLCAwLTEwMCUuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbikge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1Bvc2l0aW9uIFwiICsgcG9zaXRpb24pO1xuICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gMSkge1xuICAgIHRocm93IFwic2Nyb2xsVG9Qb3NpdGlvbigpIG11c3QgYmUgZ2l2ZW4gYSBwb3NpdGlvbiBmcm9tIDAuMCB0byAgMS4wXCI7XG4gIH1cblxuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxIZWlnaHQgKiBwb3NpdGlvbjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcbiAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnRXaWR0aCAqIHBvc2l0aW9uICogZmFjdG9yO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgfVxufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiB0ZXh0IHNuaXBwZXQuXG4vL1xuLy8gVGhlIGV4cGVjdGVkIHRleHQgYXJndW1lbnQgaXMgYSBMb2NhdG9yIFRleHQgb2JqZWN0LCBhcyBkZWZpbmVkIGhlcmU6XG4vLyBodHRwczovL3JlYWRpdW0ub3JnL2FyY2hpdGVjdHVyZS9tb2RlbHMvbG9jYXRvcnMvXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9UZXh0KHRleHQpIHtcbiAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcih7IHRleHQgfSk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2Nyb2xsVG9SYW5nZShyYW5nZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JhbmdlKHJhbmdlKSB7XG4gIHNjcm9sbFRvUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmVjdChyZWN0KSB7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gd2luZG93LmlubmVySGVpZ2h0IC8gMjtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1N0YXJ0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1N0YXJ0XCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbmQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvRW5kXCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoICogZmFjdG9yXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0O1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSBsZWZ0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCAtIHBhZ2VXaWR0aDtcbiAgdmFyIG1pbk9mZnNldCA9IGlzUlRMKCkgPyAtKGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGgpIDogMDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWF4KG9mZnNldCwgbWluT2Zmc2V0KSk7XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgcmlnaHQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFJpZ2h0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCArIHBhZ2VXaWR0aDtcbiAgdmFyIG1heE9mZnNldCA9IGlzUlRMKCkgPyAwIDogZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWluKG9mZnNldCwgbWF4T2Zmc2V0KSk7XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGdpdmVuIGxlZnQgb2Zmc2V0LlxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBzY3JvbGwgcG9zaXRpb24gaXMgYWxyZWFkeSBjbG9zZSBlbm91Z2ggdG8gdGhlIGdpdmVuIG9mZnNldC5cbmZ1bmN0aW9uIHNjcm9sbFRvT2Zmc2V0KG9mZnNldCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb09mZnNldCBcIiArIG9mZnNldCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBcIkNhbGxlZCBzY3JvbGxUb09mZnNldCgpIHdpdGggc2Nyb2xsIG1vZGUgZW5hYmxlZC4gVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHBhZ2luYXRlZCBtb2RlLlwiO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICAvLyBJbiBzb21lIGNhc2UgdGhlIHNjcm9sbFggY2Fubm90IHJlYWNoIHRoZSBwb3NpdGlvbiByZXNwZWN0aW5nIHRvIGlubmVyV2lkdGhcbiAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50T2Zmc2V0IC0gb2Zmc2V0KSAvIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIGRpZmYgPiAwLjAxO1xufVxuXG4vLyBTbmFwIHRoZSBvZmZzZXQgdG8gdGhlIHNjcmVlbiB3aWR0aCAocGFnZSB3aWR0aCkuXG5mdW5jdGlvbiBzbmFwT2Zmc2V0KG9mZnNldCkge1xuICB2YXIgdmFsdWUgPSBvZmZzZXQgKyAoaXNSVEwoKSA/IC0xIDogMSk7XG4gIHJldHVybiB2YWx1ZSAtICh2YWx1ZSAlIHBhZ2VXaWR0aCk7XG59XG5cbi8vIFNuYXBzIHRoZSBjdXJyZW50IG9mZnNldCB0byB0aGUgcGFnZSB3aWR0aC5cbmZ1bmN0aW9uIHNuYXBDdXJyZW50T2Zmc2V0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzbmFwQ3VycmVudE9mZnNldFwiKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICAvLyBBZGRzIGhhbGYgYSBwYWdlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzbmFwIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgdmFyIGRlbHRhID0gZmFjdG9yICogKHBhZ2VXaWR0aCAvIDIpO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KGN1cnJlbnRPZmZzZXQgKyBkZWx0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUZyb21Mb2NhdG9yKGxvY2F0b3IpIHtcbiAgbGV0IHRleHQgPSBsb2NhdG9yLnRleHQ7XG4gIGlmICghdGV4dCB8fCAhdGV4dC5oaWdobGlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHZhciByb290O1xuICAgIGxldCBsb2NhdGlvbnMgPSBsb2NhdG9yLmxvY2F0aW9ucztcbiAgICBpZiAobG9jYXRpb25zICYmIGxvY2F0aW9ucy5jc3NTZWxlY3Rvcikge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb25zLmNzc1NlbGVjdG9yKTtcbiAgICB9XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDc3NTZWxlY3RvciB9IGZyb20gXCJjc3Mtc2VsZWN0b3ItZ2VuZXJhdG9yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcigpIHtcbiAgY29uc3QgZWxlbWVudCA9IGZpbmRGaXJzdFZpc2libGVCbG9ja0VsZW1lbnQoKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaHJlZjogXCIjXCIsXG4gICAgdHlwZTogXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIixcbiAgICBsb2NhdGlvbnM6IHtcbiAgICAgIGNzc1NlbGVjdG9yOiBnZXRDc3NTZWxlY3RvcihlbGVtZW50KSxcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogZWxlbWVudC50ZXh0Q29udGVudCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50KCkge1xuICByZXR1cm4gZmluZEVsZW1lbnQoXG4gICAgZG9jdW1lbnQuYm9keSxcbiAgICAoZWxlbWVudCkgPT4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlzcGxheSAhPSBcImJsb2NrXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmluZEVsZW1lbnQocm9vdEVsZW1lbnQsIHNob3VsZElnbm9yZSkge1xuICB2YXIgZm91bmRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChjaGlsZCwgc2hvdWxkSWdub3JlKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzRWxlbWVudFZpc2libGUocm9vdEVsZW1lbnQsIHVuZGVmaW5lZCwgc2hvdWxkSWdub3JlKSkge1xuICAgIHJldHVybiByb290RWxlbWVudDtcbiAgfVxufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBpc0VsZW1lbnRWaXNpYmxlKGVsZW1lbnQsIGRvbVJlY3QgLyogbnVsbGFibGUgKi8sIHNob3VsZElnbm9yZSkge1xuICBpZiAoXG4gICAgcmVhZGl1bS5pc0ZpeGVkTGF5b3V0IHx8XG4gICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fFxuICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoXG4gICAgIWRvY3VtZW50IHx8XG4gICAgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fFxuICAgICFkb2N1bWVudC5ib2R5IHx8XG4gICAgKHNob3VsZElnbm9yZSAmJiBzaG91bGRJZ25vcmUoZWxlbWVudCkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlY3QubGVmdCA8IHBhZ2VXaWR0aDtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIGZpeGVkIGxheW91dHMgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzRml4ZWRMYXlvdXQgPSB0cnVlO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEZpcnN0VmlzaWJsZUJsb2NrRWxlbWVudCIsImhyZWYiLCJmaW5kRWxlbWVudCIsImRpc3BsYXkiLCJyb290RWxlbWVudCIsInNob3VsZElnbm9yZSIsImlzRWxlbWVudFZpc2libGUiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsOENBQThDO0FBQ2hGLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEMsdURBQXVELHVCQUF1Qjs7QUFFOUU7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxHQUFHO0FBQ0gsZ0RBQWdEO0FBQ2hELEdBQUc7QUFDSCxzREFBc0Q7QUFDdEQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyxJQUFlO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFLO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0Isa0JBQWtCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUVBLFlBSkM7QUFLZkYsRUFBQUEsVUFBVSxFQUFFQSxVQUxHO0FBTWZnQixFQUFBQSxXQUFXLEVBQUVBLFdBTkU7QUFPZkwsRUFBQUEsYUFBYSxFQUFFQSxhQVBBO0FBUWZFLEVBQUFBLFdBQVcsRUFBRUEsV0FSRTtBQVNmL0IsRUFBQUEsV0FBVyxFQUFFQSxXQVRFO0FBVWZrRCxFQUFBQSxjQUFjLEVBQUVBLGNBVkQ7QUFZZjtBQUNBcWUsRUFBQUEsbUJBQW1CLEVBQUVBLG1CQWJOO0FBZWY7QUFDQU8sRUFBQUEsMkJBQTJCLEVBQUVsYSxpQkFoQmQ7QUFpQmZRLEVBQUFBLGNBQWMsRUFBRUEsY0FqQkQ7QUFtQmY7QUFDQXVZLEVBQUFBLHVCQUF1QixFQUFFQSx1QkFBdUJBO0FBcEJqQyxDQUFqQixFQXVCQTs7QUFDQWhqQixNQUFNLENBQUN3ZSxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0F4ZSxNQUFNLENBQUNzZSxlQUFQLEdBQXlCQSxlQUF6QjtBQUNBdGUsTUFBTSxDQUFDb1gsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBcFgsTUFBTSxDQUFDMlksdUJBQVAsR0FBaUNBLHVCQUFqQztBQUNBM1ksTUFBTSxDQUFDMmlCLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQTNpQixNQUFNLENBQUMwaUIsMkJBQVAsR0FBcUNBLDJCQUFyQztBQUNBMWlCLE1BQU0sQ0FBQzhpQixhQUFQLEdBQXVCQSxhQUF2QixDOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBOWlCLE1BQU0sQ0FBQ3VqQixPQUFQLENBQWU1RSxhQUFmLEdBQStCLElBQS9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvbWF0Y2gtcXVvdGUuanM/ZGQ2YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlLmpzP2ZkZWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXMuanM/NDAwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3V0aWxzLmpzPzAyNWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9yZWN0LmpzPzRkNWEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kZWNvcmF0b3IuanM/MWIwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2dlc3R1cmVzLmpzPzE0YzIiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9oaWdobGlnaHQuanM/OGRhOCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RvbS5qcz9jYmYwIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvc2VsZWN0aW9uLmpzPzU5YWMiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC5qcz9iNjM1Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXgtZml4ZWQuanM/ZDk5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JUTCgpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuZGlyLnRvTG93ZXJDYXNlKCkgPT0gXCJydGxcIjtcbn1cblxuLy8gU2Nyb2xsIHRvIHRoZSBnaXZlbiBUYWdJZCBpbiBkb2N1bWVudCBhbmQgc25hcC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0lkKGlkKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVG9SZWN0KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG4vLyBQb3NpdGlvbiBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCAtIDFdLCAwLTEwMCUuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbikge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1Bvc2l0aW9uIFwiICsgcG9zaXRpb24pO1xuICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gMSkge1xuICAgIHRocm93IFwic2Nyb2xsVG9Qb3NpdGlvbigpIG11c3QgYmUgZ2l2ZW4gYSBwb3NpdGlvbiBmcm9tIDAuMCB0byAgMS4wXCI7XG4gIH1cblxuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxIZWlnaHQgKiBwb3NpdGlvbjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcbiAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnRXaWR0aCAqIHBvc2l0aW9uICogZmFjdG9yO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgfVxufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiB0ZXh0IHNuaXBwZXQuXG4vL1xuLy8gVGhlIGV4cGVjdGVkIHRleHQgYXJndW1lbnQgaXMgYSBMb2NhdG9yIFRleHQgb2JqZWN0LCBhcyBkZWZpbmVkIGhlcmU6XG4vLyBodHRwczovL3JlYWRpdW0ub3JnL2FyY2hpdGVjdHVyZS9tb2RlbHMvbG9jYXRvcnMvXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9UZXh0KHRleHQpIHtcbiAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcih7IHRleHQgfSk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2Nyb2xsVG9SYW5nZShyYW5nZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JhbmdlKHJhbmdlKSB7XG4gIHNjcm9sbFRvUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmVjdChyZWN0KSB7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gd2luZG93LmlubmVySGVpZ2h0IC8gMjtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1N0YXJ0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1N0YXJ0XCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbmQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvRW5kXCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoICogZmFjdG9yXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0O1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSBsZWZ0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCAtIHBhZ2VXaWR0aDtcbiAgdmFyIG1pbk9mZnNldCA9IGlzUlRMKCkgPyAtKGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGgpIDogMDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWF4KG9mZnNldCwgbWluT2Zmc2V0KSk7XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgcmlnaHQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFJpZ2h0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCArIHBhZ2VXaWR0aDtcbiAgdmFyIG1heE9mZnNldCA9IGlzUlRMKCkgPyAwIDogZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWluKG9mZnNldCwgbWF4T2Zmc2V0KSk7XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGdpdmVuIGxlZnQgb2Zmc2V0LlxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBzY3JvbGwgcG9zaXRpb24gaXMgYWxyZWFkeSBjbG9zZSBlbm91Z2ggdG8gdGhlIGdpdmVuIG9mZnNldC5cbmZ1bmN0aW9uIHNjcm9sbFRvT2Zmc2V0KG9mZnNldCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb09mZnNldCBcIiArIG9mZnNldCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBcIkNhbGxlZCBzY3JvbGxUb09mZnNldCgpIHdpdGggc2Nyb2xsIG1vZGUgZW5hYmxlZC4gVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHBhZ2luYXRlZCBtb2RlLlwiO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICAvLyBJbiBzb21lIGNhc2UgdGhlIHNjcm9sbFggY2Fubm90IHJlYWNoIHRoZSBwb3NpdGlvbiByZXNwZWN0aW5nIHRvIGlubmVyV2lkdGhcbiAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50T2Zmc2V0IC0gb2Zmc2V0KSAvIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIGRpZmYgPiAwLjAxO1xufVxuXG4vLyBTbmFwIHRoZSBvZmZzZXQgdG8gdGhlIHNjcmVlbiB3aWR0aCAocGFnZSB3aWR0aCkuXG5mdW5jdGlvbiBzbmFwT2Zmc2V0KG9mZnNldCkge1xuICB2YXIgdmFsdWUgPSBvZmZzZXQgKyAoaXNSVEwoKSA/IC0xIDogMSk7XG4gIHJldHVybiB2YWx1ZSAtICh2YWx1ZSAlIHBhZ2VXaWR0aCk7XG59XG5cbi8vIFNuYXBzIHRoZSBjdXJyZW50IG9mZnNldCB0byB0aGUgcGFnZSB3aWR0aC5cbmZ1bmN0aW9uIHNuYXBDdXJyZW50T2Zmc2V0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzbmFwQ3VycmVudE9mZnNldFwiKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICAvLyBBZGRzIGhhbGYgYSBwYWdlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzbmFwIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgdmFyIGRlbHRhID0gZmFjdG9yICogKHBhZ2VXaWR0aCAvIDIpO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KGN1cnJlbnRPZmZzZXQgKyBkZWx0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUZyb21Mb2NhdG9yKGxvY2F0b3IpIHtcbiAgbGV0IHRleHQgPSBsb2NhdG9yLnRleHQ7XG4gIGlmICghdGV4dCB8fCAhdGV4dC5oaWdobGlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHZhciByb290O1xuICAgIGxldCBsb2NhdGlvbnMgPSBsb2NhdG9yLmxvY2F0aW9ucztcbiAgICBpZiAobG9jYXRpb25zICYmIGxvY2F0aW9ucy5jc3NTZWxlY3Rvcikge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb25zLmNzc1NlbGVjdG9yKTtcbiAgICB9XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDc3NTZWxlY3RvciB9IGZyb20gXCJjc3Mtc2VsZWN0b3ItZ2VuZXJhdG9yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcigpIHtcbiAgY29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBocmVmOiBcIiNcIixcbiAgICB0eXBlOiBcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiLFxuICAgIGxvY2F0aW9uczoge1xuICAgICAgY3NzU2VsZWN0b3I6IGdldENzc1NlbGVjdG9yKGVsZW1lbnQpLFxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiBlbGVtZW50LnRleHRDb250ZW50LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFbGVtZW50KHJvb3RFbGVtZW50KSB7XG4gIHZhciBmb3VuZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgY29uc3QgcG9zaXRpb24gPSBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihjaGlsZCwgdW5kZWZpbmVkKTtcbiAgICBpZiAocG9zaXRpb24gPT0gMCkge1xuICAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICBmb3VuZEVsZW1lbnQgPSBjaGlsZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgaWYgKCFmb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50KGZvdW5kRWxlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJvb3RFbGVtZW50O1xufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHJldHVybiB0cnVlO1xuXG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgIWRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGlmIChyZWN0LmxlZnQgPj0gcGFnZVdpZHRoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKHJlY3QubGVmdCA+PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIGZpeGVkIGxheW91dHMgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzRml4ZWRMYXlvdXQgPSB0cnVlO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEVsZW1lbnQiLCJocmVmIiwicm9vdEVsZW1lbnQiLCJlbGVtZW50UmVsYXRpdmVQb3NpdGlvbiIsInNob3VsZElnbm9yZUVsZW1lbnQiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js index 8912e29556..b59df64363 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findFirstVisibleBlockElement();\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findFirstVisibleBlockElement() {\n return findElement(document.body, function (element) {\n return window.getComputedStyle(element).display != "block";\n });\n}\n\nfunction findElement(rootElement, shouldIgnore) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var element = findElement(child, shouldIgnore);\n\n if (element) {\n return element;\n }\n }\n\n if (isElementVisible(rootElement, undefined, shouldIgnore)) {\n return rootElement;\n }\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction isElementVisible(element, domRect\n/* nullable */\n, shouldIgnore) {\n if (readium.isFixedLayout || element === document.body || element === document.documentElement) {\n return true;\n }\n\n if (!document || !document.documentElement || !document.body || shouldIgnore && shouldIgnore(element)) {\n return false;\n }\n\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return false;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return false;\n }\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n return rect.left < pageWidth;\n }\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTIzMi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFNBQVNDLE1BQVQsQ0FBZ0JDLElBQWhCLEVBQXNCQyxHQUF0QixFQUEyQkMsU0FBM0IsRUFBc0M7QUFDcEM7QUFDQTtBQUNBLE1BQUlDLFFBQVEsR0FBRyxDQUFmO0FBQ0EsTUFBSUMsWUFBWSxHQUFHLEVBQW5COztBQUNBLFNBQU9ELFFBQVEsS0FBSyxDQUFDLENBQXJCLEVBQXdCO0FBQ3RCQSxJQUFBQSxRQUFRLEdBQUdILElBQUksQ0FBQ0ssT0FBTCxDQUFhSixHQUFiLEVBQWtCRSxRQUFsQixDQUFYOztBQUNBLFFBQUlBLFFBQVEsS0FBSyxDQUFDLENBQWxCLEVBQXFCO0FBQ25CQyxNQUFBQSxZQUFZLENBQUNFLElBQWIsQ0FBa0I7QUFDaEJDLFFBQUFBLEtBQUssRUFBRUosUUFEUztBQUVoQkssUUFBQUEsR0FBRyxFQUFFTCxRQUFRLEdBQUdGLEdBQUcsQ0FBQ1EsTUFGSjtBQUdoQkMsUUFBQUEsTUFBTSxFQUFFO0FBSFEsT0FBbEI7QUFLQVAsTUFBQUEsUUFBUSxJQUFJLENBQVo7QUFDRDtBQUNGOztBQUNELE1BQUlDLFlBQVksQ0FBQ0ssTUFBYixHQUFzQixDQUExQixFQUE2QjtBQUMzQixXQUFPTCxZQUFQO0FBQ0QsR0FsQm1DLENBb0JwQztBQUNBOzs7QUFDQSxTQUFPTix1QkFBWSxDQUFDRSxJQUFELEVBQU9DLEdBQVAsRUFBWUMsU0FBWixDQUFuQjtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTUyxjQUFULENBQXdCWCxJQUF4QixFQUE4QkMsR0FBOUIsRUFBbUM7QUFDakM7QUFDQSxNQUFJQSxHQUFHLENBQUNRLE1BQUosS0FBZSxDQUFmLElBQW9CVCxJQUFJLENBQUNTLE1BQUwsS0FBZ0IsQ0FBeEMsRUFBMkM7QUFDekMsV0FBTyxHQUFQO0FBQ0Q7O0FBQ0QsTUFBTUcsT0FBTyxHQUFHYixNQUFNLENBQUNDLElBQUQsRUFBT0MsR0FBUCxFQUFZQSxHQUFHLENBQUNRLE1BQWhCLENBQXRCLENBTGlDLENBT2pDOztBQUNBLFNBQU8sSUFBS0csT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXRixNQUFYLEdBQW9CVCxHQUFHLENBQUNRLE1BQXBDO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNJLFVBQVQsQ0FBb0JiLElBQXBCLEVBQTBCYyxLQUExQixFQUErQztBQUFBLE1BQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFDcEQsTUFBSUQsS0FBSyxDQUFDTCxNQUFOLEtBQWlCLENBQXJCLEVBQXdCO0FBQ3RCLFdBQU8sSUFBUDtBQUNELEdBSG1ELENBS3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTVAsU0FBUyxHQUFHYyxJQUFJLENBQUNDLEdBQUwsQ0FBUyxHQUFULEVBQWNILEtBQUssQ0FBQ0wsTUFBTixHQUFlLENBQTdCLENBQWxCLENBZG9ELENBZ0JwRDs7QUFDQSxNQUFNRyxPQUFPLEdBQUdiLE1BQU0sQ0FBQ0MsSUFBRCxFQUFPYyxLQUFQLEVBQWNaLFNBQWQsQ0FBdEI7O0FBRUEsTUFBSVUsT0FBTyxDQUFDSCxNQUFSLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLFdBQU8sSUFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0UsTUFBTVMsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBQUMsS0FBSyxFQUFJO0FBQzFCLFFBQU1DLFdBQVcsR0FBRyxFQUFwQixDQUQwQixDQUNGOztBQUN4QixRQUFNQyxZQUFZLEdBQUcsRUFBckIsQ0FGMEIsQ0FFRDs7QUFDekIsUUFBTUMsWUFBWSxHQUFHLEVBQXJCLENBSDBCLENBR0Q7O0FBQ3pCLFFBQU1DLFNBQVMsR0FBRyxDQUFsQixDQUowQixDQUlMOztBQUVyQixRQUFNQyxVQUFVLEdBQUcsSUFBSUwsS0FBSyxDQUFDVCxNQUFOLEdBQWVJLEtBQUssQ0FBQ0wsTUFBNUM7QUFFQSxRQUFNZ0IsV0FBVyxHQUFHVixPQUFPLENBQUNXLE1BQVIsR0FDaEJmLGNBQWMsQ0FDWlgsSUFBSSxDQUFDMkIsS0FBTCxDQUFXWCxJQUFJLENBQUNZLEdBQUwsQ0FBUyxDQUFULEVBQVlULEtBQUssQ0FBQ1osS0FBTixHQUFjUSxPQUFPLENBQUNXLE1BQVIsQ0FBZWpCLE1BQXpDLENBQVgsRUFBNkRVLEtBQUssQ0FBQ1osS0FBbkUsQ0FEWSxFQUVaUSxPQUFPLENBQUNXLE1BRkksQ0FERSxHQUtoQixHQUxKO0FBTUEsUUFBTUcsV0FBVyxHQUFHZCxPQUFPLENBQUNlLE1BQVIsR0FDaEJuQixjQUFjLENBQ1pYLElBQUksQ0FBQzJCLEtBQUwsQ0FBV1IsS0FBSyxDQUFDWCxHQUFqQixFQUFzQlcsS0FBSyxDQUFDWCxHQUFOLEdBQVlPLE9BQU8sQ0FBQ2UsTUFBUixDQUFlckIsTUFBakQsQ0FEWSxFQUVaTSxPQUFPLENBQUNlLE1BRkksQ0FERSxHQUtoQixHQUxKO0FBT0EsUUFBSUMsUUFBUSxHQUFHLEdBQWY7O0FBQ0EsUUFBSSxPQUFPaEIsT0FBTyxDQUFDaUIsSUFBZixLQUF3QixRQUE1QixFQUFzQztBQUNwQyxVQUFNQyxNQUFNLEdBQUdqQixJQUFJLENBQUNrQixHQUFMLENBQVNmLEtBQUssQ0FBQ1osS0FBTixHQUFjUSxPQUFPLENBQUNpQixJQUEvQixDQUFmO0FBQ0FELE1BQUFBLFFBQVEsR0FBRyxNQUFNRSxNQUFNLEdBQUdqQyxJQUFJLENBQUNTLE1BQS9CO0FBQ0Q7O0FBRUQsUUFBTTBCLFFBQVEsR0FDWmYsV0FBVyxHQUFHSSxVQUFkLEdBQ0FILFlBQVksR0FBR0ksV0FEZixHQUVBSCxZQUFZLEdBQUdPLFdBRmYsR0FHQU4sU0FBUyxHQUFHUSxRQUpkO0FBS0EsUUFBTUssUUFBUSxHQUFHaEIsV0FBVyxHQUFHQyxZQUFkLEdBQTZCQyxZQUE3QixHQUE0Q0MsU0FBN0Q7QUFDQSxRQUFNYyxlQUFlLEdBQUdGLFFBQVEsR0FBR0MsUUFBbkM7QUFFQSxXQUFPQyxlQUFQO0FBQ0QsR0FwQ0QsQ0E1Qm9ELENBa0VwRDtBQUNBOzs7QUFDQSxNQUFNQyxhQUFhLEdBQUcxQixPQUFPLENBQUMyQixHQUFSLENBQVksVUFBQUMsQ0FBQztBQUFBLFdBQUs7QUFDdENqQyxNQUFBQSxLQUFLLEVBQUVpQyxDQUFDLENBQUNqQyxLQUQ2QjtBQUV0Q0MsTUFBQUEsR0FBRyxFQUFFZ0MsQ0FBQyxDQUFDaEMsR0FGK0I7QUFHdENpQyxNQUFBQSxLQUFLLEVBQUV2QixVQUFVLENBQUNzQixDQUFEO0FBSHFCLEtBQUw7QUFBQSxHQUFiLENBQXRCLENBcEVvRCxDQTBFcEQ7O0FBQ0FGLEVBQUFBLGFBQWEsQ0FBQ0ksSUFBZCxDQUFtQixVQUFDQyxDQUFELEVBQUlDLENBQUo7QUFBQSxXQUFVQSxDQUFDLENBQUNILEtBQUYsR0FBVUUsQ0FBQyxDQUFDRixLQUF0QjtBQUFBLEdBQW5CO0FBQ0EsU0FBT0gsYUFBYSxDQUFDLENBQUQsQ0FBcEI7QUFDRCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdKRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU08sY0FBVCxDQUF3QkMsSUFBeEIsRUFBOEI7QUFDNUIsVUFBUUEsSUFBSSxDQUFDQyxRQUFiO0FBQ0UsU0FBS0MsSUFBSSxDQUFDQyxZQUFWO0FBQ0EsU0FBS0QsSUFBSSxDQUFDRSxTQUFWO0FBQ0U7QUFDQTtBQUVBO0FBQU87QUFBdUJKLFFBQUFBLElBQUksQ0FBQ0ssV0FBTixDQUFtQjFDO0FBQWhEOztBQUNGO0FBQ0UsYUFBTyxDQUFQO0FBUko7QUFVRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVMyQywwQkFBVCxDQUFvQ04sSUFBcEMsRUFBMEM7QUFDeEMsTUFBSU8sT0FBTyxHQUFHUCxJQUFJLENBQUNRLGVBQW5CO0FBQ0EsTUFBSTdDLE1BQU0sR0FBRyxDQUFiOztBQUNBLFNBQU80QyxPQUFQLEVBQWdCO0FBQ2Q1QyxJQUFBQSxNQUFNLElBQUlvQyxjQUFjLENBQUNRLE9BQUQsQ0FBeEI7QUFDQUEsSUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNDLGVBQWxCO0FBQ0Q7O0FBQ0QsU0FBTzdDLE1BQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVM4QyxjQUFULENBQXdCQyxPQUF4QixFQUE2QztBQUFBLG9DQUFUQyxPQUFTO0FBQVRBLElBQUFBLE9BQVM7QUFBQTs7QUFDM0MsTUFBSUMsVUFBVSxHQUFHRCxPQUFPLENBQUNFLEtBQVIsRUFBakI7QUFDQSxNQUFNQyxRQUFRO0FBQUc7QUFDZkosRUFBQUEsT0FBTyxDQUFDSyxhQUQrQixDQUV2Q0Msa0JBRnVDLENBRXBCTixPQUZvQixFQUVYTyxVQUFVLENBQUNDLFNBRkEsQ0FBekM7QUFHQSxNQUFNQyxPQUFPLEdBQUcsRUFBaEI7QUFFQSxNQUFJQyxXQUFXLEdBQUdOLFFBQVEsQ0FBQ08sUUFBVCxFQUFsQjtBQUNBLE1BQUlDLFFBQUo7QUFDQSxNQUFJM0QsTUFBTSxHQUFHLENBQWIsQ0FUMkMsQ0FXM0M7QUFDQTs7QUFDQSxTQUFPaUQsVUFBVSxLQUFLVyxTQUFmLElBQTRCSCxXQUFuQyxFQUFnRDtBQUM5Q0UsSUFBQUEsUUFBUTtBQUFHO0FBQXFCRixJQUFBQSxXQUFoQzs7QUFDQSxRQUFJekQsTUFBTSxHQUFHMkQsUUFBUSxDQUFDRSxJQUFULENBQWM3RCxNQUF2QixHQUFnQ2lELFVBQXBDLEVBQWdEO0FBQzlDTyxNQUFBQSxPQUFPLENBQUMzRCxJQUFSLENBQWE7QUFBRXdDLFFBQUFBLElBQUksRUFBRXNCLFFBQVI7QUFBa0JuQyxRQUFBQSxNQUFNLEVBQUV5QixVQUFVLEdBQUdqRDtBQUF2QyxPQUFiO0FBQ0FpRCxNQUFBQSxVQUFVLEdBQUdELE9BQU8sQ0FBQ0UsS0FBUixFQUFiO0FBQ0QsS0FIRCxNQUdPO0FBQ0xPLE1BQUFBLFdBQVcsR0FBR04sUUFBUSxDQUFDTyxRQUFULEVBQWQ7QUFDQTFELE1BQUFBLE1BQU0sSUFBSTJELFFBQVEsQ0FBQ0UsSUFBVCxDQUFjN0QsTUFBeEI7QUFDRDtBQUNGLEdBdEIwQyxDQXdCM0M7OztBQUNBLFNBQU9pRCxVQUFVLEtBQUtXLFNBQWYsSUFBNEJELFFBQTVCLElBQXdDM0QsTUFBTSxLQUFLaUQsVUFBMUQsRUFBc0U7QUFDcEVPLElBQUFBLE9BQU8sQ0FBQzNELElBQVIsQ0FBYTtBQUFFd0MsTUFBQUEsSUFBSSxFQUFFc0IsUUFBUjtBQUFrQm5DLE1BQUFBLE1BQU0sRUFBRW1DLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjN0Q7QUFBeEMsS0FBYjtBQUNBaUQsSUFBQUEsVUFBVSxHQUFHRCxPQUFPLENBQUNFLEtBQVIsRUFBYjtBQUNEOztBQUVELE1BQUlELFVBQVUsS0FBS1csU0FBbkIsRUFBOEI7QUFDNUIsVUFBTSxJQUFJRSxVQUFKLENBQWUsNEJBQWYsQ0FBTjtBQUNEOztBQUVELFNBQU9OLE9BQVA7QUFDRDs7QUFFTSxJQUFJTyxnQkFBZ0IsR0FBRyxDQUF2QjtBQUNBLElBQUlDLGlCQUFpQixHQUFHLENBQXhCO0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNPLElBQU1DLHVCQUFiO0FBQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRSx3QkFBWWxCLE9BQVosRUFBcUJ2QixNQUFyQixFQUE2QjtBQUFBOztBQUMzQixRQUFJQSxNQUFNLEdBQUcsQ0FBYixFQUFnQjtBQUNkLFlBQU0sSUFBSTBDLEtBQUosQ0FBVSxtQkFBVixDQUFOO0FBQ0Q7QUFFRDs7O0FBQ0EsU0FBS25CLE9BQUwsR0FBZUEsT0FBZjtBQUVBOztBQUNBLFNBQUt2QixNQUFMLEdBQWNBLE1BQWQ7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUExQkE7QUFBQTtBQUFBLFdBMkJFLG9CQUFXMkMsTUFBWCxFQUFtQjtBQUNqQixVQUFJLENBQUNBLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQixLQUFLckIsT0FBckIsQ0FBTCxFQUFvQztBQUNsQyxjQUFNLElBQUltQixLQUFKLENBQVUsOENBQVYsQ0FBTjtBQUNEOztBQUVELFVBQUlHLEVBQUUsR0FBRyxLQUFLdEIsT0FBZDtBQUNBLFVBQUl2QixNQUFNLEdBQUcsS0FBS0EsTUFBbEI7O0FBQ0EsYUFBTzZDLEVBQUUsS0FBS0YsTUFBZCxFQUFzQjtBQUNwQjNDLFFBQUFBLE1BQU0sSUFBSW1CLDBCQUEwQixDQUFDMEIsRUFBRCxDQUFwQztBQUNBQSxRQUFBQSxFQUFFO0FBQUc7QUFBd0JBLFFBQUFBLEVBQUUsQ0FBQ0MsYUFBaEM7QUFDRDs7QUFFRCxhQUFPLElBQUlMLFlBQUosQ0FBaUJJLEVBQWpCLEVBQXFCN0MsTUFBckIsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQTNEQTtBQUFBO0FBQUEsV0E0REUsbUJBQXNCO0FBQUEsVUFBZCtDLE9BQWMsdUVBQUosRUFBSTs7QUFDcEIsVUFBSTtBQUNGLGVBQU96QixjQUFjLENBQUMsS0FBS0MsT0FBTixFQUFlLEtBQUt2QixNQUFwQixDQUFkLENBQTBDLENBQTFDLENBQVA7QUFDRCxPQUZELENBRUUsT0FBT2dELEdBQVAsRUFBWTtBQUNaLFlBQUksS0FBS2hELE1BQUwsS0FBZ0IsQ0FBaEIsSUFBcUIrQyxPQUFPLENBQUNFLFNBQVIsS0FBc0JiLFNBQS9DLEVBQTBEO0FBQ3hELGNBQU1jLEVBQUUsR0FBR0MsUUFBUSxDQUFDQyxnQkFBVCxDQUNULEtBQUs3QixPQUFMLENBQWE4QixXQUFiLEVBRFMsRUFFVHZCLFVBQVUsQ0FBQ0MsU0FGRixDQUFYO0FBSUFtQixVQUFBQSxFQUFFLENBQUNqQixXQUFILEdBQWlCLEtBQUtWLE9BQXRCO0FBQ0EsY0FBTStCLFFBQVEsR0FBR1AsT0FBTyxDQUFDRSxTQUFSLEtBQXNCVixnQkFBdkM7QUFDQSxjQUFNeEUsSUFBSTtBQUFHO0FBQ1h1RixVQUFBQSxRQUFRLEdBQUdKLEVBQUUsQ0FBQ2hCLFFBQUgsRUFBSCxHQUFtQmdCLEVBQUUsQ0FBQ0ssWUFBSCxFQUQ3Qjs7QUFHQSxjQUFJLENBQUN4RixJQUFMLEVBQVc7QUFDVCxrQkFBTWlGLEdBQU47QUFDRDs7QUFDRCxpQkFBTztBQUFFbkMsWUFBQUEsSUFBSSxFQUFFOUMsSUFBUjtBQUFjaUMsWUFBQUEsTUFBTSxFQUFFc0QsUUFBUSxHQUFHLENBQUgsR0FBT3ZGLElBQUksQ0FBQ3NFLElBQUwsQ0FBVTdEO0FBQS9DLFdBQVA7QUFDRCxTQWRELE1BY087QUFDTCxnQkFBTXdFLEdBQU47QUFDRDtBQUNGO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQTNGQTtBQUFBO0FBQUEsV0E0RkUsd0JBQXNCbkMsSUFBdEIsRUFBNEJiLE1BQTVCLEVBQW9DO0FBQ2xDLGNBQVFhLElBQUksQ0FBQ0MsUUFBYjtBQUNFLGFBQUtDLElBQUksQ0FBQ0UsU0FBVjtBQUNFLGlCQUFPd0IsWUFBWSxDQUFDZSxTQUFiLENBQXVCM0MsSUFBdkIsRUFBNkJiLE1BQTdCLENBQVA7O0FBQ0YsYUFBS2UsSUFBSSxDQUFDQyxZQUFWO0FBQ0UsaUJBQU8sSUFBSXlCLFlBQUo7QUFBaUI7QUFBd0I1QixVQUFBQSxJQUF6QyxFQUFnRGIsTUFBaEQsQ0FBUDs7QUFDRjtBQUNFLGdCQUFNLElBQUkwQyxLQUFKLENBQVUscUNBQVYsQ0FBTjtBQU5KO0FBUUQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUE3R0E7QUFBQTtBQUFBLFdBOEdFLG1CQUFpQjdCLElBQWpCLEVBQXVCYixNQUF2QixFQUErQjtBQUM3QixjQUFRYSxJQUFJLENBQUNDLFFBQWI7QUFDRSxhQUFLQyxJQUFJLENBQUNFLFNBQVY7QUFBcUI7QUFDbkIsZ0JBQUlqQixNQUFNLEdBQUcsQ0FBVCxJQUFjQSxNQUFNO0FBQUc7QUFBcUJhLFlBQUFBLElBQUQsQ0FBT3dCLElBQVAsQ0FBWTdELE1BQTNELEVBQW1FO0FBQ2pFLG9CQUFNLElBQUlrRSxLQUFKLENBQVUsa0NBQVYsQ0FBTjtBQUNEOztBQUVELGdCQUFJLENBQUM3QixJQUFJLENBQUNpQyxhQUFWLEVBQXlCO0FBQ3ZCLG9CQUFNLElBQUlKLEtBQUosQ0FBVSx5QkFBVixDQUFOO0FBQ0QsYUFQa0IsQ0FTbkI7OztBQUNBLGdCQUFNZSxVQUFVLEdBQUd0QywwQkFBMEIsQ0FBQ04sSUFBRCxDQUExQixHQUFtQ2IsTUFBdEQ7QUFFQSxtQkFBTyxJQUFJeUMsWUFBSixDQUFpQjVCLElBQUksQ0FBQ2lDLGFBQXRCLEVBQXFDVyxVQUFyQyxDQUFQO0FBQ0Q7O0FBQ0QsYUFBSzFDLElBQUksQ0FBQ0MsWUFBVjtBQUF3QjtBQUN0QixnQkFBSWhCLE1BQU0sR0FBRyxDQUFULElBQWNBLE1BQU0sR0FBR2EsSUFBSSxDQUFDNkMsVUFBTCxDQUFnQmxGLE1BQTNDLEVBQW1EO0FBQ2pELG9CQUFNLElBQUlrRSxLQUFKLENBQVUsbUNBQVYsQ0FBTjtBQUNELGFBSHFCLENBS3RCOzs7QUFDQSxnQkFBSWUsV0FBVSxHQUFHLENBQWpCOztBQUNBLGlCQUFLLElBQUlFLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUczRCxNQUFwQixFQUE0QjJELENBQUMsRUFBN0IsRUFBaUM7QUFDL0JGLGNBQUFBLFdBQVUsSUFBSTdDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDNkMsVUFBTCxDQUFnQkMsQ0FBaEIsQ0FBRCxDQUE1QjtBQUNEOztBQUVELG1CQUFPLElBQUlsQixZQUFKO0FBQWlCO0FBQXdCNUIsWUFBQUEsSUFBekMsRUFBZ0Q0QyxXQUFoRCxDQUFQO0FBQ0Q7O0FBQ0Q7QUFDRSxnQkFBTSxJQUFJZixLQUFKLENBQVUseUNBQVYsQ0FBTjtBQTdCSjtBQStCRDtBQTlJSDs7QUFBQTtBQUFBO0FBaUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNPLElBQU1rQixvQkFBYjtBQUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFLHFCQUFZdEYsS0FBWixFQUFtQkMsR0FBbkIsRUFBd0I7QUFBQTs7QUFDdEIsU0FBS0QsS0FBTCxHQUFhQSxLQUFiO0FBQ0EsU0FBS0MsR0FBTCxHQUFXQSxHQUFYO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQWpCQTtBQUFBO0FBQUEsV0FrQkUsb0JBQVdnRCxPQUFYLEVBQW9CO0FBQ2xCLGFBQU8sSUFBSXFDLFNBQUosQ0FDTCxLQUFLdEYsS0FBTCxDQUFXdUYsVUFBWCxDQUFzQnRDLE9BQXRCLENBREssRUFFTCxLQUFLaEQsR0FBTCxDQUFTc0YsVUFBVCxDQUFvQnRDLE9BQXBCLENBRkssQ0FBUDtBQUlEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFuQ0E7QUFBQTtBQUFBLFdBb0NFLG1CQUFVO0FBQ1IsVUFBSWpELEtBQUo7QUFDQSxVQUFJQyxHQUFKOztBQUVBLFVBQ0UsS0FBS0QsS0FBTCxDQUFXaUQsT0FBWCxLQUF1QixLQUFLaEQsR0FBTCxDQUFTZ0QsT0FBaEMsSUFDQSxLQUFLakQsS0FBTCxDQUFXMEIsTUFBWCxJQUFxQixLQUFLekIsR0FBTCxDQUFTeUIsTUFGaEMsRUFHRTtBQUNBO0FBREEsOEJBRWVzQixjQUFjLENBQzNCLEtBQUtoRCxLQUFMLENBQVdpRCxPQURnQixFQUUzQixLQUFLakQsS0FBTCxDQUFXMEIsTUFGZ0IsRUFHM0IsS0FBS3pCLEdBQUwsQ0FBU3lCLE1BSGtCLENBRjdCOztBQUFBOztBQUVDMUIsUUFBQUEsS0FGRDtBQUVRQyxRQUFBQSxHQUZSO0FBT0QsT0FWRCxNQVVPO0FBQ0xELFFBQUFBLEtBQUssR0FBRyxLQUFLQSxLQUFMLENBQVd3RixPQUFYLENBQW1CO0FBQUViLFVBQUFBLFNBQVMsRUFBRVY7QUFBYixTQUFuQixDQUFSO0FBQ0FoRSxRQUFBQSxHQUFHLEdBQUcsS0FBS0EsR0FBTCxDQUFTdUYsT0FBVCxDQUFpQjtBQUFFYixVQUFBQSxTQUFTLEVBQUVUO0FBQWIsU0FBakIsQ0FBTjtBQUNEOztBQUVELFVBQU11QixLQUFLLEdBQUcsSUFBSUMsS0FBSixFQUFkO0FBQ0FELE1BQUFBLEtBQUssQ0FBQ0UsUUFBTixDQUFlM0YsS0FBSyxDQUFDdUMsSUFBckIsRUFBMkJ2QyxLQUFLLENBQUMwQixNQUFqQztBQUNBK0QsTUFBQUEsS0FBSyxDQUFDRyxNQUFOLENBQWEzRixHQUFHLENBQUNzQyxJQUFqQixFQUF1QnRDLEdBQUcsQ0FBQ3lCLE1BQTNCO0FBQ0EsYUFBTytELEtBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFsRUE7QUFBQTtBQUFBLFdBbUVFLG1CQUFpQkEsS0FBakIsRUFBd0I7QUFDdEIsVUFBTXpGLEtBQUssR0FBR21FLHVCQUFZLENBQUNlLFNBQWIsQ0FDWk8sS0FBSyxDQUFDSSxjQURNLEVBRVpKLEtBQUssQ0FBQ0ssV0FGTSxDQUFkO0FBSUEsVUFBTTdGLEdBQUcsR0FBR2tFLHVCQUFZLENBQUNlLFNBQWIsQ0FBdUJPLEtBQUssQ0FBQ00sWUFBN0IsRUFBMkNOLEtBQUssQ0FBQ08sU0FBakQsQ0FBWjtBQUNBLGFBQU8sSUFBSVYsU0FBSixDQUFjdEYsS0FBZCxFQUFxQkMsR0FBckIsQ0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBbEZBO0FBQUE7QUFBQSxXQW1GRSxxQkFBbUJnRyxJQUFuQixFQUF5QmpHLEtBQXpCLEVBQWdDQyxHQUFoQyxFQUFxQztBQUNuQyxhQUFPLElBQUlxRixTQUFKLENBQ0wsSUFBSW5CLHVCQUFKLENBQWlCOEIsSUFBakIsRUFBdUJqRyxLQUF2QixDQURLLEVBRUwsSUFBSW1FLHVCQUFKLENBQWlCOEIsSUFBakIsRUFBdUJoRyxHQUF2QixDQUZLLENBQVA7QUFJRDtBQXhGSDs7QUFBQTtBQUFBLEk7Ozs7Ozs7Ozs7Ozs7O0FDL09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUNPLElBQU1tRyxXQUFiO0FBQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDRSx1QkFBWUgsSUFBWixFQUFrQlIsS0FBbEIsRUFBeUI7QUFBQTs7QUFDdkIsU0FBS1EsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS1IsS0FBTCxHQUFhQSxLQUFiO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7O0FBYkE7QUFBQTtBQUFBLFdBZ0RFLG1CQUFVO0FBQ1IsYUFBTyxLQUFLQSxLQUFaO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7O0FBdERBO0FBQUE7QUFBQSxXQXVERSxzQkFBYTtBQUNYO0FBQ0E7QUFDQSxVQUFNWSxlQUFlLEdBQUdmLFNBQVMsQ0FBQ2dCLFNBQVYsQ0FBb0IsS0FBS2IsS0FBekIsRUFBZ0NjLE9BQWhDLEVBQXhCO0FBRUEsVUFBTUMsU0FBUyxHQUFHbEIsU0FBUyxDQUFDZ0IsU0FBVixDQUFvQkQsZUFBcEIsQ0FBbEI7QUFDQSxVQUFNUixjQUFjLEdBQUdNLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDeEcsS0FBVixDQUFnQmlELE9BQWpCLEVBQTBCLEtBQUtnRCxJQUEvQixDQUFwQztBQUNBLFVBQU1GLFlBQVksR0FBR0ksYUFBYSxDQUFDSyxTQUFTLENBQUN2RyxHQUFWLENBQWNnRCxPQUFmLEVBQXdCLEtBQUtnRCxJQUE3QixDQUFsQztBQUVBLGFBQU87QUFDTFEsUUFBQUEsSUFBSSxFQUFFLGVBREQ7QUFFTFosUUFBQUEsY0FBYyxFQUFkQSxjQUZLO0FBR0xDLFFBQUFBLFdBQVcsRUFBRVUsU0FBUyxDQUFDeEcsS0FBVixDQUFnQjBCLE1BSHhCO0FBSUxxRSxRQUFBQSxZQUFZLEVBQVpBLFlBSks7QUFLTEMsUUFBQUEsU0FBUyxFQUFFUSxTQUFTLENBQUN2RyxHQUFWLENBQWN5QjtBQUxwQixPQUFQO0FBT0Q7QUF2RUg7QUFBQTtBQUFBLFdBY0UsbUJBQWlCdUUsSUFBakIsRUFBdUJSLEtBQXZCLEVBQThCO0FBQzVCLGFBQU8sSUFBSVcsV0FBSixDQUFnQkgsSUFBaEIsRUFBc0JSLEtBQXRCLENBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUF2QkE7QUFBQTtBQUFBLFdBd0JFLHNCQUFvQlEsSUFBcEIsRUFBMEJTLFFBQTFCLEVBQW9DO0FBQ2xDLFVBQU1iLGNBQWMsR0FBR0ssYUFBYSxDQUFDUSxRQUFRLENBQUNiLGNBQVYsRUFBMEJJLElBQTFCLENBQXBDOztBQUNBLFVBQUksQ0FBQ0osY0FBTCxFQUFxQjtBQUNuQixjQUFNLElBQUl6QixLQUFKLENBQVUsd0NBQVYsQ0FBTjtBQUNEOztBQUVELFVBQU0yQixZQUFZLEdBQUdHLGFBQWEsQ0FBQ1EsUUFBUSxDQUFDWCxZQUFWLEVBQXdCRSxJQUF4QixDQUFsQzs7QUFDQSxVQUFJLENBQUNGLFlBQUwsRUFBbUI7QUFDakIsY0FBTSxJQUFJM0IsS0FBSixDQUFVLHNDQUFWLENBQU47QUFDRDs7QUFFRCxVQUFNdUMsUUFBUSxHQUFHeEMsWUFBWSxDQUFDeUMsY0FBYixDQUNmZixjQURlLEVBRWZhLFFBQVEsQ0FBQ1osV0FGTSxDQUFqQjtBQUlBLFVBQU1lLE1BQU0sR0FBRzFDLFlBQVksQ0FBQ3lDLGNBQWIsQ0FDYmIsWUFEYSxFQUViVyxRQUFRLENBQUNWLFNBRkksQ0FBZjtBQUtBLFVBQU1QLEtBQUssR0FBRyxJQUFJSCxTQUFKLENBQWNxQixRQUFkLEVBQXdCRSxNQUF4QixFQUFnQ04sT0FBaEMsRUFBZDtBQUNBLGFBQU8sSUFBSUgsV0FBSixDQUFnQkgsSUFBaEIsRUFBc0JSLEtBQXRCLENBQVA7QUFDRDtBQTlDSDs7QUFBQTtBQUFBO0FBMEVBO0FBQ0E7QUFDQTs7QUFDTyxJQUFNcUIsa0JBQWI7QUFDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0UsOEJBQVliLElBQVosRUFBa0JqRyxLQUFsQixFQUF5QkMsR0FBekIsRUFBOEI7QUFBQTs7QUFDNUIsU0FBS2dHLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtqRyxLQUFMLEdBQWFBLEtBQWI7QUFDQSxTQUFLQyxHQUFMLEdBQVdBLEdBQVg7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7QUFmQTtBQUFBO0FBQUE7QUFnQ0U7QUFDRjtBQUNBO0FBQ0UsMEJBQWE7QUFDWCxhQUFPO0FBQ0x3RyxRQUFBQSxJQUFJLEVBQUUsc0JBREQ7QUFFTHpHLFFBQUFBLEtBQUssRUFBRSxLQUFLQSxLQUZQO0FBR0xDLFFBQUFBLEdBQUcsRUFBRSxLQUFLQTtBQUhMLE9BQVA7QUFLRDtBQXpDSDtBQUFBO0FBQUEsV0EyQ0UsbUJBQVU7QUFDUixhQUFPcUYsZ0NBQUEsQ0FBc0IsS0FBS1csSUFBM0IsRUFBaUMsS0FBS2pHLEtBQXRDLEVBQTZDLEtBQUtDLEdBQWxELEVBQXVEc0csT0FBdkQsRUFBUDtBQUNEO0FBN0NIO0FBQUE7QUFBQSxXQWdCRSxtQkFBaUJOLElBQWpCLEVBQXVCUixLQUF2QixFQUE4QjtBQUM1QixVQUFNZSxTQUFTLEdBQUdsQiw4QkFBQSxDQUFvQkcsS0FBcEIsRUFBMkJGLFVBQTNCLENBQXNDVSxJQUF0QyxDQUFsQjtBQUNBLGFBQU8sSUFBSWEsa0JBQUosQ0FDTGIsSUFESyxFQUVMTyxTQUFTLENBQUN4RyxLQUFWLENBQWdCMEIsTUFGWCxFQUdMOEUsU0FBUyxDQUFDdkcsR0FBVixDQUFjeUIsTUFIVCxDQUFQO0FBS0Q7QUFDRDtBQUNGO0FBQ0E7QUFDQTs7QUEzQkE7QUFBQTtBQUFBLFdBNEJFLHNCQUFvQnVFLElBQXBCLEVBQTBCUyxRQUExQixFQUFvQztBQUNsQyxhQUFPLElBQUlJLGtCQUFKLENBQXVCYixJQUF2QixFQUE2QlMsUUFBUSxDQUFDMUcsS0FBdEMsRUFBNkMwRyxRQUFRLENBQUN6RyxHQUF0RCxDQUFQO0FBQ0Q7QUE5Qkg7O0FBQUE7QUFBQTtBQWdEQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBQ08sSUFBTStHLGVBQWI7QUFDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFLDJCQUFZZixJQUFaLEVBQWtCZ0IsS0FBbEIsRUFBdUM7QUFBQSxRQUFkekcsT0FBYyx1RUFBSixFQUFJOztBQUFBOztBQUNyQyxTQUFLeUYsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS2dCLEtBQUwsR0FBYUEsS0FBYjtBQUNBLFNBQUt6RyxPQUFMLEdBQWVBLE9BQWY7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQXJCQTtBQUFBO0FBQUE7QUF1REU7QUFDRjtBQUNBO0FBQ0UsMEJBQWE7QUFDWCxhQUFPO0FBQ0xpRyxRQUFBQSxJQUFJLEVBQUUsbUJBREQ7QUFFTFEsUUFBQUEsS0FBSyxFQUFFLEtBQUtBLEtBRlA7QUFHTDlGLFFBQUFBLE1BQU0sRUFBRSxLQUFLWCxPQUFMLENBQWFXLE1BSGhCO0FBSUxJLFFBQUFBLE1BQU0sRUFBRSxLQUFLZixPQUFMLENBQWFlO0FBSmhCLE9BQVA7QUFNRDtBQUVEO0FBQ0Y7QUFDQTs7QUFyRUE7QUFBQTtBQUFBLFdBc0VFLG1CQUFzQjtBQUFBLFVBQWRrRCxPQUFjLHVFQUFKLEVBQUk7QUFDcEIsYUFBTyxLQUFLeUMsZ0JBQUwsQ0FBc0J6QyxPQUF0QixFQUErQjhCLE9BQS9CLEVBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTs7QUE1RUE7QUFBQTtBQUFBLFdBNkVFLDRCQUErQjtBQUFBLFVBQWQ5QixPQUFjLHVFQUFKLEVBQUk7QUFDN0IsVUFBTWhGLElBQUk7QUFBRztBQUF1QixXQUFLd0csSUFBTCxDQUFVckQsV0FBOUM7QUFDQSxVQUFNaEMsS0FBSyxHQUFHTixVQUFVLENBQUNiLElBQUQsRUFBTyxLQUFLd0gsS0FBWixrQ0FDbkIsS0FBS3pHLE9BRGM7QUFFdEJpQixRQUFBQSxJQUFJLEVBQUVnRCxPQUFPLENBQUNoRDtBQUZRLFNBQXhCOztBQUlBLFVBQUksQ0FBQ2IsS0FBTCxFQUFZO0FBQ1YsY0FBTSxJQUFJd0QsS0FBSixDQUFVLGlCQUFWLENBQU47QUFDRDs7QUFDRCxhQUFPLElBQUkwQyxrQkFBSixDQUF1QixLQUFLYixJQUE1QixFQUFrQ3JGLEtBQUssQ0FBQ1osS0FBeEMsRUFBK0NZLEtBQUssQ0FBQ1gsR0FBckQsQ0FBUDtBQUNEO0FBdkZIO0FBQUE7QUFBQSxXQXNCRSxtQkFBaUJnRyxJQUFqQixFQUF1QlIsS0FBdkIsRUFBOEI7QUFDNUIsVUFBTWhHLElBQUk7QUFBRztBQUF1QndHLE1BQUFBLElBQUksQ0FBQ3JELFdBQXpDO0FBQ0EsVUFBTTRELFNBQVMsR0FBR2xCLDhCQUFBLENBQW9CRyxLQUFwQixFQUEyQkYsVUFBM0IsQ0FBc0NVLElBQXRDLENBQWxCO0FBRUEsVUFBTWpHLEtBQUssR0FBR3dHLFNBQVMsQ0FBQ3hHLEtBQVYsQ0FBZ0IwQixNQUE5QjtBQUNBLFVBQU16QixHQUFHLEdBQUd1RyxTQUFTLENBQUN2RyxHQUFWLENBQWN5QixNQUExQixDQUw0QixDQU81QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsVUFBTXlGLFVBQVUsR0FBRyxFQUFuQjtBQUVBLGFBQU8sSUFBSUgsZUFBSixDQUFvQmYsSUFBcEIsRUFBMEJ4RyxJQUFJLENBQUMyQixLQUFMLENBQVdwQixLQUFYLEVBQWtCQyxHQUFsQixDQUExQixFQUFrRDtBQUN2RGtCLFFBQUFBLE1BQU0sRUFBRTFCLElBQUksQ0FBQzJCLEtBQUwsQ0FBV1gsSUFBSSxDQUFDWSxHQUFMLENBQVMsQ0FBVCxFQUFZckIsS0FBSyxHQUFHbUgsVUFBcEIsQ0FBWCxFQUE0Q25ILEtBQTVDLENBRCtDO0FBRXZEdUIsUUFBQUEsTUFBTSxFQUFFOUIsSUFBSSxDQUFDMkIsS0FBTCxDQUFXbkIsR0FBWCxFQUFnQlEsSUFBSSxDQUFDQyxHQUFMLENBQVNqQixJQUFJLENBQUNTLE1BQWQsRUFBc0JELEdBQUcsR0FBR2tILFVBQTVCLENBQWhCO0FBRitDLE9BQWxELENBQVA7QUFJRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOztBQWpEQTtBQUFBO0FBQUEsV0FrREUsc0JBQW9CbEIsSUFBcEIsRUFBMEJTLFFBQTFCLEVBQW9DO0FBQ2xDLFVBQVF2RixNQUFSLEdBQTJCdUYsUUFBM0IsQ0FBUXZGLE1BQVI7QUFBQSxVQUFnQkksTUFBaEIsR0FBMkJtRixRQUEzQixDQUFnQm5GLE1BQWhCO0FBQ0EsYUFBTyxJQUFJeUYsZUFBSixDQUFvQmYsSUFBcEIsRUFBMEJTLFFBQVEsQ0FBQ08sS0FBbkMsRUFBMEM7QUFBRTlGLFFBQUFBLE1BQU0sRUFBTkEsTUFBRjtBQUFVSSxRQUFBQSxNQUFNLEVBQU5BO0FBQVYsT0FBMUMsQ0FBUDtBQUNEO0FBckRIOztBQUFBO0FBQUEsSTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUlBOztBQUNBNkYsTUFBTSxDQUFDQyxnQkFBUCxDQUNFLE9BREYsRUFFRSxVQUFVQyxLQUFWLEVBQWlCO0FBQ2ZDLEVBQUFBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQkYsS0FBSyxDQUFDRyxPQUF2QixFQUFnQ0gsS0FBSyxDQUFDSSxRQUF0QyxFQUFnREosS0FBSyxDQUFDSyxNQUF0RDtBQUNELENBSkgsRUFLRSxLQUxGLEdBUUE7O0FBQ0FQLE1BQU0sQ0FBQ0MsZ0JBQVAsQ0FDRSxNQURGLEVBRUUsWUFBWTtBQUNWLE1BQU1PLFFBQVEsR0FBRyxJQUFJQyxjQUFKLENBQW1CLFlBQU07QUFDeENDLElBQUFBLDJCQUEyQjtBQUM1QixHQUZnQixDQUFqQjtBQUdBRixFQUFBQSxRQUFRLENBQUNHLE9BQVQsQ0FBaUJsRCxRQUFRLENBQUNtRCxJQUExQjtBQUVBWixFQUFBQSxNQUFNLENBQUNDLGdCQUFQLENBQXdCLG1CQUF4QixFQUE2QyxZQUFZO0FBQ3ZEWSxJQUFBQSxzQkFBc0I7QUFDdEJDLElBQUFBLGlCQUFpQjtBQUNsQixHQUhEO0FBSUFELEVBQUFBLHNCQUFzQjtBQUN2QixDQWJILEVBY0UsS0FkRjtBQWlCQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxTQUFTSCwyQkFBVCxHQUF1QztBQUNyQyxNQUFNSyxFQUFFLEdBQUcsc0JBQVg7QUFDQSxNQUFJQyxVQUFVLEdBQUd2RCxRQUFRLENBQUN3RCxjQUFULENBQXdCRixFQUF4QixDQUFqQjs7QUFDQSxNQUFJRyxtQkFBbUIsTUFBTUMsdUJBQXVCLE1BQU0sQ0FBMUQsRUFBNkQ7QUFDM0QsUUFBSUgsVUFBSixFQUFnQjtBQUNkQSxNQUFBQSxVQUFVLENBQUNJLE1BQVg7QUFDRDtBQUNGLEdBSkQsTUFJTztBQUNMLFFBQUlDLGFBQWEsR0FBRzVELFFBQVEsQ0FBQzZELGdCQUFULENBQTBCQyxXQUE5QztBQUNBLFFBQUlDLFFBQVEsR0FBR0gsYUFBYSxHQUFHSSxTQUEvQjtBQUNBLFFBQUlDLGNBQWMsR0FBSXJJLElBQUksQ0FBQ3NJLEtBQUwsQ0FBV0gsUUFBUSxHQUFHLENBQXRCLElBQTJCLENBQTVCLEdBQWlDLENBQWpDLEdBQXFDLEdBQTFEOztBQUNBLFFBQUlFLGNBQUosRUFBb0I7QUFDbEIsVUFBSVYsVUFBSixFQUFnQjtBQUNkQSxRQUFBQSxVQUFVLENBQUNJLE1BQVg7QUFDRCxPQUZELE1BRU87QUFDTEosUUFBQUEsVUFBVSxHQUFHdkQsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixLQUF2QixDQUFiO0FBQ0FaLFFBQUFBLFVBQVUsQ0FBQ2EsWUFBWCxDQUF3QixJQUF4QixFQUE4QmQsRUFBOUI7QUFDQUMsUUFBQUEsVUFBVSxDQUFDYyxLQUFYLENBQWlCQyxXQUFqQixHQUErQixRQUEvQjtBQUNBZixRQUFBQSxVQUFVLENBQUNnQixTQUFYLEdBQXVCLFNBQXZCLENBSkssQ0FJNkI7O0FBQ2xDdkUsUUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcUIsV0FBZCxDQUEwQmpCLFVBQTFCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBRU0sSUFBSVMsU0FBUyxHQUFHLENBQWhCOztBQUVQLFNBQVNaLHNCQUFULEdBQWtDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFJcUIsS0FBSyxHQUFHL0IsT0FBTyxDQUFDZ0MsZ0JBQVIsRUFBWjtBQUNBVixFQUFBQSxTQUFTLEdBQUdTLEtBQUssR0FBR2xDLE1BQU0sQ0FBQ29DLGdCQUEzQjtBQUNBQyxFQUFBQSxXQUFXLENBQ1QscUJBRFMsRUFFVCxVQUFVSCxLQUFWLEdBQWtCLE9BQWxCLEdBQTRCbEMsTUFBTSxDQUFDb0MsZ0JBQW5DLEdBQXNELEdBRjdDLENBQVg7QUFJRDs7QUFFTSxTQUFTakIsdUJBQVQsR0FBbUM7QUFDeEMsU0FBT21CLFFBQVEsQ0FDYnRDLE1BQU0sQ0FDSHVDLGdCQURILENBQ29COUUsUUFBUSxDQUFDK0UsZUFEN0IsRUFFR0MsZ0JBRkgsQ0FFb0IsY0FGcEIsQ0FEYSxDQUFmO0FBS0Q7QUFFTSxTQUFTdkIsbUJBQVQsR0FBK0I7QUFDcEMsU0FDRXpELFFBQVEsQ0FBQytFLGVBQVQsQ0FBeUJWLEtBQXpCLENBQ0dXLGdCQURILENBQ29CLGdCQURwQixFQUVHQyxRQUZILEdBR0dDLElBSEgsTUFHYSxtQkFKZjtBQU1EO0FBRU0sU0FBU0MsS0FBVCxHQUFpQjtBQUN0QixTQUFPbkYsUUFBUSxDQUFDbUQsSUFBVCxDQUFjaUMsR0FBZCxDQUFrQkMsV0FBbEIsTUFBbUMsS0FBMUM7QUFDRCxFQUVEOztBQUNPLFNBQVNDLFVBQVQsQ0FBb0JoQyxFQUFwQixFQUF3QjtBQUM3QixNQUFJbEYsT0FBTyxHQUFHNEIsUUFBUSxDQUFDd0QsY0FBVCxDQUF3QkYsRUFBeEIsQ0FBZDs7QUFDQSxNQUFJLENBQUNsRixPQUFMLEVBQWM7QUFDWixXQUFPLEtBQVA7QUFDRDs7QUFFRCxTQUFPbUgsWUFBWSxDQUFDbkgsT0FBTyxDQUFDb0gscUJBQVIsRUFBRCxDQUFuQjtBQUNELEVBRUQ7O0FBQ08sU0FBU0MsZ0JBQVQsQ0FBMEJDLFFBQTFCLEVBQW9DO0FBQ3pDO0FBQ0EsTUFBSUEsUUFBUSxHQUFHLENBQVgsSUFBZ0JBLFFBQVEsR0FBRyxDQUEvQixFQUFrQztBQUNoQyxVQUFNLDhEQUFOO0FBQ0Q7O0FBRUQsTUFBSTdJLE1BQUo7O0FBQ0EsTUFBSTRHLG1CQUFtQixFQUF2QixFQUEyQjtBQUN6QjVHLElBQUFBLE1BQU0sR0FBR21ELFFBQVEsQ0FBQzZELGdCQUFULENBQTBCOEIsWUFBMUIsR0FBeUNELFFBQWxEO0FBQ0ExRixJQUFBQSxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQitCLFNBQTFCLEdBQXNDL0ksTUFBdEMsQ0FGeUIsQ0FHekI7QUFDRCxHQUpELE1BSU87QUFDTCxRQUFJK0csYUFBYSxHQUFHNUQsUUFBUSxDQUFDNkQsZ0JBQVQsQ0FBMEJDLFdBQTlDO0FBQ0EsUUFBSStCLE1BQU0sR0FBR1YsS0FBSyxLQUFLLENBQUMsQ0FBTixHQUFVLENBQTVCO0FBQ0F0SSxJQUFBQSxNQUFNLEdBQUcrRyxhQUFhLEdBQUc4QixRQUFoQixHQUEyQkcsTUFBcEM7QUFDQTdGLElBQUFBLFFBQVEsQ0FBQzZELGdCQUFULENBQTBCaUMsVUFBMUIsR0FBdUNDLFVBQVUsQ0FBQ2xKLE1BQUQsQ0FBakQ7QUFDRDtBQUNGLEVBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBQ08sU0FBU21KLFlBQVQsQ0FBc0JwTCxJQUF0QixFQUE0QjtBQUNqQyxNQUFJZ0csS0FBSyxHQUFHcUYsZ0JBQWdCLENBQUM7QUFBRXJMLElBQUFBLElBQUksRUFBSkE7QUFBRixHQUFELENBQTVCOztBQUNBLE1BQUksQ0FBQ2dHLEtBQUwsRUFBWTtBQUNWLFdBQU8sS0FBUDtBQUNEOztBQUNEc0YsRUFBQUEsYUFBYSxDQUFDdEYsS0FBRCxDQUFiO0FBQ0EsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU3NGLGFBQVQsQ0FBdUJ0RixLQUF2QixFQUE4QjtBQUM1QjJFLEVBQUFBLFlBQVksQ0FBQzNFLEtBQUssQ0FBQzRFLHFCQUFOLEVBQUQsQ0FBWjtBQUNEOztBQUVELFNBQVNELFlBQVQsQ0FBc0JZLElBQXRCLEVBQTRCO0FBQzFCLE1BQUkxQyxtQkFBbUIsRUFBdkIsRUFBMkI7QUFDekJ6RCxJQUFBQSxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQitCLFNBQTFCLEdBQ0VPLElBQUksQ0FBQ0MsR0FBTCxHQUFXN0QsTUFBTSxDQUFDOEQsT0FBbEIsR0FBNEI5RCxNQUFNLENBQUMrRCxXQUFQLEdBQXFCLENBRG5EO0FBRUQsR0FIRCxNQUdPO0FBQ0x0RyxJQUFBQSxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQmlDLFVBQTFCLEdBQXVDQyxVQUFVLENBQy9DSSxJQUFJLENBQUNJLElBQUwsR0FBWWhFLE1BQU0sQ0FBQ2lFLE9BRDRCLENBQWpEO0FBR0Q7QUFDRjs7QUFFTSxTQUFTQyxhQUFULEdBQXlCO0FBQzlCO0FBQ0EsTUFBSSxDQUFDaEQsbUJBQW1CLEVBQXhCLEVBQTRCO0FBQzFCekQsSUFBQUEsUUFBUSxDQUFDNkQsZ0JBQVQsQ0FBMEJpQyxVQUExQixHQUF1QyxDQUF2QztBQUNELEdBRkQsTUFFTztBQUNMOUYsSUFBQUEsUUFBUSxDQUFDNkQsZ0JBQVQsQ0FBMEIrQixTQUExQixHQUFzQyxDQUF0QztBQUNBckQsSUFBQUEsTUFBTSxDQUFDbUUsUUFBUCxDQUFnQixDQUFoQixFQUFtQixDQUFuQjtBQUNEO0FBQ0Y7QUFFTSxTQUFTQyxXQUFULEdBQXVCO0FBQzVCO0FBQ0EsTUFBSSxDQUFDbEQsbUJBQW1CLEVBQXhCLEVBQTRCO0FBQzFCLFFBQUlvQyxNQUFNLEdBQUdWLEtBQUssS0FBSyxDQUFDLENBQU4sR0FBVSxDQUE1QjtBQUNBbkYsSUFBQUEsUUFBUSxDQUFDNkQsZ0JBQVQsQ0FBMEJpQyxVQUExQixHQUF1Q0MsVUFBVSxDQUMvQy9GLFFBQVEsQ0FBQzZELGdCQUFULENBQTBCQyxXQUExQixHQUF3QytCLE1BRE8sQ0FBakQ7QUFHRCxHQUxELE1BS087QUFDTDdGLElBQUFBLFFBQVEsQ0FBQzZELGdCQUFULENBQTBCK0IsU0FBMUIsR0FBc0M1RixRQUFRLENBQUNtRCxJQUFULENBQWN3QyxZQUFwRDtBQUNBcEQsSUFBQUEsTUFBTSxDQUFDbUUsUUFBUCxDQUFnQixDQUFoQixFQUFtQjFHLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY3dDLFlBQWpDO0FBQ0Q7QUFDRixFQUVEOztBQUNPLFNBQVNHLFVBQVQsR0FBc0I7QUFDM0IsTUFBSWxDLGFBQWEsR0FBRzVELFFBQVEsQ0FBQzZELGdCQUFULENBQTBCQyxXQUE5QztBQUNBLE1BQUlqSCxNQUFNLEdBQUcwRixNQUFNLENBQUNpRSxPQUFQLEdBQWlCeEMsU0FBOUI7QUFDQSxNQUFJNEMsU0FBUyxHQUFHekIsS0FBSyxLQUFLLEVBQUV2QixhQUFhLEdBQUdJLFNBQWxCLENBQUwsR0FBb0MsQ0FBekQ7QUFDQSxTQUFPNkMsY0FBYyxDQUFDakwsSUFBSSxDQUFDWSxHQUFMLENBQVNLLE1BQVQsRUFBaUIrSixTQUFqQixDQUFELENBQXJCO0FBQ0QsRUFFRDs7QUFDTyxTQUFTRSxXQUFULEdBQXVCO0FBQzVCLE1BQUlsRCxhQUFhLEdBQUc1RCxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQkMsV0FBOUM7QUFDQSxNQUFJakgsTUFBTSxHQUFHMEYsTUFBTSxDQUFDaUUsT0FBUCxHQUFpQnhDLFNBQTlCO0FBQ0EsTUFBSStDLFNBQVMsR0FBRzVCLEtBQUssS0FBSyxDQUFMLEdBQVN2QixhQUFhLEdBQUdJLFNBQTlDO0FBQ0EsU0FBTzZDLGNBQWMsQ0FBQ2pMLElBQUksQ0FBQ0MsR0FBTCxDQUFTZ0IsTUFBVCxFQUFpQmtLLFNBQWpCLENBQUQsQ0FBckI7QUFDRCxFQUVEO0FBQ0E7O0FBQ0EsU0FBU0YsY0FBVCxDQUF3QmhLLE1BQXhCLEVBQWdDO0FBQzlCO0FBQ0EsTUFBSTRHLG1CQUFtQixFQUF2QixFQUEyQjtBQUN6QixVQUFNLDRGQUFOO0FBQ0Q7O0FBRUQsTUFBSXVELGFBQWEsR0FBR3pFLE1BQU0sQ0FBQ2lFLE9BQTNCO0FBQ0F4RyxFQUFBQSxRQUFRLENBQUM2RCxnQkFBVCxDQUEwQmlDLFVBQTFCLEdBQXVDQyxVQUFVLENBQUNsSixNQUFELENBQWpELENBUDhCLENBUTlCOztBQUNBLE1BQUlvSyxJQUFJLEdBQUdyTCxJQUFJLENBQUNrQixHQUFMLENBQVNrSyxhQUFhLEdBQUduSyxNQUF6QixJQUFtQ21ILFNBQTlDO0FBQ0EsU0FBT2lELElBQUksR0FBRyxJQUFkO0FBQ0QsRUFFRDs7O0FBQ0EsU0FBU2xCLFVBQVQsQ0FBb0JsSixNQUFwQixFQUE0QjtBQUMxQixNQUFJcUssS0FBSyxHQUFHckssTUFBTSxJQUFJc0ksS0FBSyxLQUFLLENBQUMsQ0FBTixHQUFVLENBQW5CLENBQWxCO0FBQ0EsU0FBTytCLEtBQUssR0FBSUEsS0FBSyxHQUFHbEQsU0FBeEI7QUFDRCxFQUVEOzs7QUFDQSxTQUFTWCxpQkFBVCxHQUE2QjtBQUMzQjtBQUNBLE1BQUlJLG1CQUFtQixFQUF2QixFQUEyQjtBQUN6QjtBQUNEOztBQUNELE1BQUl1RCxhQUFhLEdBQUd6RSxNQUFNLENBQUNpRSxPQUEzQixDQUwyQixDQU0zQjs7QUFDQSxNQUFJWCxNQUFNLEdBQUdWLEtBQUssS0FBSyxDQUFDLENBQU4sR0FBVSxDQUE1QjtBQUNBLE1BQUlnQyxLQUFLLEdBQUd0QixNQUFNLElBQUk3QixTQUFTLEdBQUcsQ0FBaEIsQ0FBbEI7QUFDQWhFLEVBQUFBLFFBQVEsQ0FBQzZELGdCQUFULENBQTBCaUMsVUFBMUIsR0FBdUNDLFVBQVUsQ0FBQ2lCLGFBQWEsR0FBR0csS0FBakIsQ0FBakQ7QUFDRDs7QUFFTSxTQUFTbEIsZ0JBQVQsQ0FBMEJtQixPQUExQixFQUFtQztBQUN4QyxNQUFJeE0sSUFBSSxHQUFHd00sT0FBTyxDQUFDeE0sSUFBbkI7O0FBQ0EsTUFBSSxDQUFDQSxJQUFELElBQVMsQ0FBQ0EsSUFBSSxDQUFDeU0sU0FBbkIsRUFBOEI7QUFDNUIsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsTUFBSTtBQUNGLFFBQUlqRyxJQUFKO0FBQ0EsUUFBSWtHLFNBQVMsR0FBR0YsT0FBTyxDQUFDRSxTQUF4Qjs7QUFDQSxRQUFJQSxTQUFTLElBQUlBLFNBQVMsQ0FBQ0MsV0FBM0IsRUFBd0M7QUFDdENuRyxNQUFBQSxJQUFJLEdBQUdwQixRQUFRLENBQUN3SCxhQUFULENBQXVCRixTQUFTLENBQUNDLFdBQWpDLENBQVA7QUFDRDs7QUFDRCxRQUFJLENBQUNuRyxJQUFMLEVBQVc7QUFDVEEsTUFBQUEsSUFBSSxHQUFHcEIsUUFBUSxDQUFDbUQsSUFBaEI7QUFDRDs7QUFFRCxRQUFJc0UsTUFBTSxHQUFHLElBQUl0RixlQUFKLENBQW9CZixJQUFwQixFQUEwQnhHLElBQUksQ0FBQ3lNLFNBQS9CLEVBQTBDO0FBQ3JEL0ssTUFBQUEsTUFBTSxFQUFFMUIsSUFBSSxDQUFDOE0sTUFEd0M7QUFFckRoTCxNQUFBQSxNQUFNLEVBQUU5QixJQUFJLENBQUMrTTtBQUZ3QyxLQUExQyxDQUFiO0FBSUEsV0FBT0YsTUFBTSxDQUFDL0YsT0FBUCxFQUFQO0FBQ0QsR0FmRCxDQWVFLE9BQU9rRyxDQUFQLEVBQVU7QUFDVmpGLElBQUFBLFFBQVEsQ0FBQ2lGLENBQUQsQ0FBUjtBQUNBLFdBQU8sSUFBUDtBQUNEO0FBQ0YsRUFFRDtBQUVBOztBQUNPLFNBQVNoRCxXQUFULENBQXFCaUQsR0FBckIsRUFBMEJYLEtBQTFCLEVBQWlDO0FBQ3RDLE1BQUk5RixJQUFJLEdBQUdwQixRQUFRLENBQUMrRSxlQUFwQjtBQUVBM0QsRUFBQUEsSUFBSSxDQUFDaUQsS0FBTCxDQUFXTyxXQUFYLENBQXVCaUQsR0FBdkIsRUFBNEJYLEtBQTVCO0FBQ0QsRUFFRDs7QUFDTyxTQUFTWSxjQUFULENBQXdCRCxHQUF4QixFQUE2QjtBQUNsQyxNQUFJekcsSUFBSSxHQUFHcEIsUUFBUSxDQUFDK0UsZUFBcEI7QUFFQTNELEVBQUFBLElBQUksQ0FBQ2lELEtBQUwsQ0FBV3lELGNBQVgsQ0FBMEJELEdBQTFCO0FBQ0QsRUFFRDs7QUFFTyxTQUFTRSxHQUFULEdBQWU7QUFDcEIsTUFBSW5GLE9BQU8sR0FBR29GLEtBQUssQ0FBQ0MsU0FBTixDQUFnQjFMLEtBQWhCLENBQXNCMkwsSUFBdEIsQ0FBMkJDLFNBQTNCLEVBQXNDQyxJQUF0QyxDQUEyQyxHQUEzQyxDQUFkO0FBQ0ExRixFQUFBQSxPQUFPLENBQUNxRixHQUFSLENBQVluRixPQUFaO0FBQ0Q7QUFFTSxTQUFTRCxRQUFULENBQWtCQyxPQUFsQixFQUEyQjtBQUNoQ0YsRUFBQUEsT0FBTyxDQUFDQyxRQUFSLENBQWlCQyxPQUFqQixFQUEwQixFQUExQixFQUE4QixDQUE5QjtBQUNELEM7Ozs7Ozs7Ozs7QUMzUkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsSUFBTTBGLEtBQUssR0FBRyxLQUFkO0FBRUE7QUFDQTtBQUNBOztBQUNPLFNBQVNDLFlBQVQsQ0FBc0JwQyxJQUF0QixFQUE0QjtBQUNqQyxNQUFNcUMsVUFBVSxHQUFHakcsTUFBTSxDQUFDb0MsZ0JBQTFCO0FBQ0EsTUFBTUYsS0FBSyxHQUFHMEIsSUFBSSxDQUFDMUIsS0FBTCxHQUFhK0QsVUFBM0I7QUFDQSxNQUFNQyxNQUFNLEdBQUd0QyxJQUFJLENBQUNzQyxNQUFMLEdBQWNELFVBQTdCO0FBQ0EsTUFBTWpDLElBQUksR0FBR0osSUFBSSxDQUFDSSxJQUFMLEdBQVlpQyxVQUF6QjtBQUNBLE1BQU1wQyxHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBTCxHQUFXb0MsVUFBdkI7QUFDQSxNQUFNRSxLQUFLLEdBQUduQyxJQUFJLEdBQUc5QixLQUFyQjtBQUNBLE1BQU1rRSxNQUFNLEdBQUd2QyxHQUFHLEdBQUdxQyxNQUFyQjtBQUNBLFNBQU87QUFBRWhFLElBQUFBLEtBQUssRUFBTEEsS0FBRjtBQUFTZ0UsSUFBQUEsTUFBTSxFQUFOQSxNQUFUO0FBQWlCbEMsSUFBQUEsSUFBSSxFQUFKQSxJQUFqQjtBQUF1QkgsSUFBQUEsR0FBRyxFQUFIQSxHQUF2QjtBQUE0QnNDLElBQUFBLEtBQUssRUFBTEEsS0FBNUI7QUFBbUNDLElBQUFBLE1BQU0sRUFBTkE7QUFBbkMsR0FBUDtBQUNEO0FBRU0sU0FBU0MsdUJBQVQsQ0FDTGhJLEtBREssRUFFTGlJLGtDQUZLLEVBR0w7QUFDQSxNQUFJQyxXQUFXLEdBQUdsSSxLQUFLLENBQUNtSSxjQUFOLEVBQWxCO0FBRUEsTUFBTUMsU0FBUyxHQUFHLENBQWxCO0FBQ0EsTUFBTUMsYUFBYSxHQUFHLEVBQXRCOztBQUpBLDZDQUs4QkgsV0FMOUI7QUFBQTs7QUFBQTtBQUtBLHdEQUEyQztBQUFBLFVBQWhDSSxlQUFnQztBQUN6Q0QsTUFBQUEsYUFBYSxDQUFDL04sSUFBZCxDQUFtQjtBQUNqQnlOLFFBQUFBLE1BQU0sRUFBRU8sZUFBZSxDQUFDUCxNQURQO0FBRWpCRixRQUFBQSxNQUFNLEVBQUVTLGVBQWUsQ0FBQ1QsTUFGUDtBQUdqQmxDLFFBQUFBLElBQUksRUFBRTJDLGVBQWUsQ0FBQzNDLElBSEw7QUFJakJtQyxRQUFBQSxLQUFLLEVBQUVRLGVBQWUsQ0FBQ1IsS0FKTjtBQUtqQnRDLFFBQUFBLEdBQUcsRUFBRThDLGVBQWUsQ0FBQzlDLEdBTEo7QUFNakIzQixRQUFBQSxLQUFLLEVBQUV5RSxlQUFlLENBQUN6RTtBQU5OLE9BQW5CO0FBUUQ7QUFkRDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWVBLE1BQU0wRSxXQUFXLEdBQUdDLGtCQUFrQixDQUNwQ0gsYUFEb0MsRUFFcENELFNBRm9DLEVBR3BDSCxrQ0FIb0MsQ0FBdEM7QUFLQSxNQUFNUSxnQkFBZ0IsR0FBR0Msb0JBQW9CLENBQUNILFdBQUQsRUFBY0gsU0FBZCxDQUE3QztBQUNBLE1BQU1PLFFBQVEsR0FBR0Msc0JBQXNCLENBQUNILGdCQUFELENBQXZDO0FBQ0EsTUFBTUksT0FBTyxHQUFHLElBQUksQ0FBcEI7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUdILFFBQVEsQ0FBQ2xPLE1BQVQsR0FBa0IsQ0FBL0IsRUFBa0NxTyxDQUFDLElBQUksQ0FBdkMsRUFBMENBLENBQUMsRUFBM0MsRUFBK0M7QUFDN0MsUUFBTXZELElBQUksR0FBR29ELFFBQVEsQ0FBQ0csQ0FBRCxDQUFyQjtBQUNBLFFBQU1DLFNBQVMsR0FBR3hELElBQUksQ0FBQzFCLEtBQUwsR0FBYTBCLElBQUksQ0FBQ3NDLE1BQWxCLEdBQTJCZ0IsT0FBN0M7O0FBQ0EsUUFBSSxDQUFDRSxTQUFMLEVBQWdCO0FBQ2QsVUFBSUosUUFBUSxDQUFDbE8sTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUN2QjBNLFFBQUFBLFFBQUcsQ0FBQywyQkFBRCxDQUFIO0FBQ0F3QixRQUFBQSxRQUFRLENBQUNLLE1BQVQsQ0FBZ0JGLENBQWhCLEVBQW1CLENBQW5CO0FBQ0QsT0FIRCxNQUdPO0FBQ0wzQixRQUFBQSxRQUFHLENBQUMsc0RBQUQsQ0FBSDtBQUNBO0FBQ0Q7QUFDRjtBQUNGOztBQUNEQSxFQUFBQSxRQUFHLGdDQUF5QmtCLGFBQWEsQ0FBQzVOLE1BQXZDLGtCQUFxRGtPLFFBQVEsQ0FBQ2xPLE1BQTlELEVBQUg7QUFDQSxTQUFPa08sUUFBUDtBQUNEOztBQUVELFNBQVNILGtCQUFULENBQ0VTLEtBREYsRUFFRWIsU0FGRixFQUdFSCxrQ0FIRixFQUlFO0FBQ0EsT0FBSyxJQUFJckksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3FKLEtBQUssQ0FBQ3hPLE1BQTFCLEVBQWtDbUYsQ0FBQyxFQUFuQyxFQUF1QztBQUFBLCtCQUM1QmtKLENBRDRCO0FBRW5DLFVBQU1JLEtBQUssR0FBR0QsS0FBSyxDQUFDckosQ0FBRCxDQUFuQjtBQUNBLFVBQU11SixLQUFLLEdBQUdGLEtBQUssQ0FBQ0gsQ0FBRCxDQUFuQjs7QUFDQSxVQUFJSSxLQUFLLEtBQUtDLEtBQWQsRUFBcUI7QUFDbkJoQyxRQUFBQSxRQUFHLENBQUMsd0NBQUQsQ0FBSDtBQUNBO0FBQ0Q7O0FBQ0QsVUFBTWlDLHFCQUFxQixHQUN6QkMsV0FBVyxDQUFDSCxLQUFLLENBQUMxRCxHQUFQLEVBQVkyRCxLQUFLLENBQUMzRCxHQUFsQixFQUF1QjRDLFNBQXZCLENBQVgsSUFDQWlCLFdBQVcsQ0FBQ0gsS0FBSyxDQUFDbkIsTUFBUCxFQUFlb0IsS0FBSyxDQUFDcEIsTUFBckIsRUFBNkJLLFNBQTdCLENBRmI7QUFHQSxVQUFNa0IsdUJBQXVCLEdBQzNCRCxXQUFXLENBQUNILEtBQUssQ0FBQ3ZELElBQVAsRUFBYXdELEtBQUssQ0FBQ3hELElBQW5CLEVBQXlCeUMsU0FBekIsQ0FBWCxJQUNBaUIsV0FBVyxDQUFDSCxLQUFLLENBQUNwQixLQUFQLEVBQWNxQixLQUFLLENBQUNyQixLQUFwQixFQUEyQk0sU0FBM0IsQ0FGYjtBQUdBLFVBQU1tQixpQkFBaUIsR0FBRyxDQUFDdEIsa0NBQTNCO0FBQ0EsVUFBTXVCLE9BQU8sR0FDVkYsdUJBQXVCLElBQUlDLGlCQUE1QixJQUNDSCxxQkFBcUIsSUFBSSxDQUFDRSx1QkFGN0I7QUFHQSxVQUFNRyxRQUFRLEdBQUdELE9BQU8sSUFBSUUsbUJBQW1CLENBQUNSLEtBQUQsRUFBUUMsS0FBUixFQUFlZixTQUFmLENBQS9DOztBQUNBLFVBQUlxQixRQUFKLEVBQWM7QUFDWnRDLFFBQUFBLFFBQUcsd0RBQytDaUMscUJBRC9DLDBCQUNvRkUsdUJBRHBGLGVBQ2dIckIsa0NBRGhILE9BQUg7QUFHQSxZQUFNVSxRQUFRLEdBQUdNLEtBQUssQ0FBQ1UsTUFBTixDQUFhLFVBQUNwRSxJQUFELEVBQVU7QUFDdEMsaUJBQU9BLElBQUksS0FBSzJELEtBQVQsSUFBa0IzRCxJQUFJLEtBQUs0RCxLQUFsQztBQUNELFNBRmdCLENBQWpCO0FBR0EsWUFBTVMscUJBQXFCLEdBQUdDLGVBQWUsQ0FBQ1gsS0FBRCxFQUFRQyxLQUFSLENBQTdDO0FBQ0FSLFFBQUFBLFFBQVEsQ0FBQ3JPLElBQVQsQ0FBY3NQLHFCQUFkO0FBQ0E7QUFBQSxhQUFPcEIsa0JBQWtCLENBQ3ZCRyxRQUR1QixFQUV2QlAsU0FGdUIsRUFHdkJILGtDQUh1QjtBQUF6QjtBQUtEO0FBakNrQzs7QUFDckMsU0FBSyxJQUFJYSxDQUFDLEdBQUdsSixDQUFDLEdBQUcsQ0FBakIsRUFBb0JrSixDQUFDLEdBQUdHLEtBQUssQ0FBQ3hPLE1BQTlCLEVBQXNDcU8sQ0FBQyxFQUF2QyxFQUEyQztBQUFBLHVCQUFsQ0EsQ0FBa0M7O0FBQUEsK0JBS3ZDO0FBTHVDO0FBaUMxQztBQUNGOztBQUNELFNBQU9HLEtBQVA7QUFDRDs7QUFFRCxTQUFTWSxlQUFULENBQXlCWCxLQUF6QixFQUFnQ0MsS0FBaEMsRUFBdUM7QUFDckMsTUFBTXhELElBQUksR0FBRzNLLElBQUksQ0FBQ0MsR0FBTCxDQUFTaU8sS0FBSyxDQUFDdkQsSUFBZixFQUFxQndELEtBQUssQ0FBQ3hELElBQTNCLENBQWI7QUFDQSxNQUFNbUMsS0FBSyxHQUFHOU0sSUFBSSxDQUFDWSxHQUFMLENBQVNzTixLQUFLLENBQUNwQixLQUFmLEVBQXNCcUIsS0FBSyxDQUFDckIsS0FBNUIsQ0FBZDtBQUNBLE1BQU10QyxHQUFHLEdBQUd4SyxJQUFJLENBQUNDLEdBQUwsQ0FBU2lPLEtBQUssQ0FBQzFELEdBQWYsRUFBb0IyRCxLQUFLLENBQUMzRCxHQUExQixDQUFaO0FBQ0EsTUFBTXVDLE1BQU0sR0FBRy9NLElBQUksQ0FBQ1ksR0FBTCxDQUFTc04sS0FBSyxDQUFDbkIsTUFBZixFQUF1Qm9CLEtBQUssQ0FBQ3BCLE1BQTdCLENBQWY7QUFDQSxTQUFPO0FBQ0xBLElBQUFBLE1BQU0sRUFBTkEsTUFESztBQUVMRixJQUFBQSxNQUFNLEVBQUVFLE1BQU0sR0FBR3ZDLEdBRlo7QUFHTEcsSUFBQUEsSUFBSSxFQUFKQSxJQUhLO0FBSUxtQyxJQUFBQSxLQUFLLEVBQUxBLEtBSks7QUFLTHRDLElBQUFBLEdBQUcsRUFBSEEsR0FMSztBQU1MM0IsSUFBQUEsS0FBSyxFQUFFaUUsS0FBSyxHQUFHbkM7QUFOVixHQUFQO0FBUUQ7O0FBRUQsU0FBUytDLG9CQUFULENBQThCTyxLQUE5QixFQUFxQ2IsU0FBckMsRUFBZ0Q7QUFDOUMsTUFBTTBCLFdBQVcsR0FBRyxJQUFJQyxHQUFKLENBQVFkLEtBQVIsQ0FBcEI7O0FBRDhDLDhDQUUzQkEsS0FGMkI7QUFBQTs7QUFBQTtBQUU5QywyREFBMEI7QUFBQSxVQUFmMUQsSUFBZTtBQUN4QixVQUFNd0QsU0FBUyxHQUFHeEQsSUFBSSxDQUFDMUIsS0FBTCxHQUFhLENBQWIsSUFBa0IwQixJQUFJLENBQUNzQyxNQUFMLEdBQWMsQ0FBbEQ7O0FBQ0EsVUFBSSxDQUFDa0IsU0FBTCxFQUFnQjtBQUNkNUIsUUFBQUEsUUFBRyxDQUFDLDBCQUFELENBQUg7QUFDQTJDLFFBQUFBLFdBQVcsQ0FBQ0UsTUFBWixDQUFtQnpFLElBQW5CO0FBQ0E7QUFDRDs7QUFOdUIsa0RBT2EwRCxLQVBiO0FBQUE7O0FBQUE7QUFPeEIsK0RBQTRDO0FBQUEsY0FBakNnQixzQkFBaUM7O0FBQzFDLGNBQUkxRSxJQUFJLEtBQUswRSxzQkFBYixFQUFxQztBQUNuQztBQUNEOztBQUNELGNBQUksQ0FBQ0gsV0FBVyxDQUFDSSxHQUFaLENBQWdCRCxzQkFBaEIsQ0FBTCxFQUE4QztBQUM1QztBQUNEOztBQUNELGNBQUlFLFlBQVksQ0FBQ0Ysc0JBQUQsRUFBeUIxRSxJQUF6QixFQUErQjZDLFNBQS9CLENBQWhCLEVBQTJEO0FBQ3pEakIsWUFBQUEsUUFBRyxDQUFDLCtCQUFELENBQUg7QUFDQTJDLFlBQUFBLFdBQVcsQ0FBQ0UsTUFBWixDQUFtQnpFLElBQW5CO0FBQ0E7QUFDRDtBQUNGO0FBbkJ1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0J6QjtBQXRCNkM7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUF1QjlDLFNBQU82QixLQUFLLENBQUNnRCxJQUFOLENBQVdOLFdBQVgsQ0FBUDtBQUNEOztBQUVELFNBQVNLLFlBQVQsQ0FBc0JqQixLQUF0QixFQUE2QkMsS0FBN0IsRUFBb0NmLFNBQXBDLEVBQStDO0FBQzdDLFNBQ0VpQyxpQkFBaUIsQ0FBQ25CLEtBQUQsRUFBUUMsS0FBSyxDQUFDeEQsSUFBZCxFQUFvQndELEtBQUssQ0FBQzNELEdBQTFCLEVBQStCNEMsU0FBL0IsQ0FBakIsSUFDQWlDLGlCQUFpQixDQUFDbkIsS0FBRCxFQUFRQyxLQUFLLENBQUNyQixLQUFkLEVBQXFCcUIsS0FBSyxDQUFDM0QsR0FBM0IsRUFBZ0M0QyxTQUFoQyxDQURqQixJQUVBaUMsaUJBQWlCLENBQUNuQixLQUFELEVBQVFDLEtBQUssQ0FBQ3hELElBQWQsRUFBb0J3RCxLQUFLLENBQUNwQixNQUExQixFQUFrQ0ssU0FBbEMsQ0FGakIsSUFHQWlDLGlCQUFpQixDQUFDbkIsS0FBRCxFQUFRQyxLQUFLLENBQUNyQixLQUFkLEVBQXFCcUIsS0FBSyxDQUFDcEIsTUFBM0IsRUFBbUNLLFNBQW5DLENBSm5CO0FBTUQ7O0FBRU0sU0FBU2lDLGlCQUFULENBQTJCOUUsSUFBM0IsRUFBaUMrRSxDQUFqQyxFQUFvQ0MsQ0FBcEMsRUFBdUNuQyxTQUF2QyxFQUFrRDtBQUN2RCxTQUNFLENBQUM3QyxJQUFJLENBQUNJLElBQUwsR0FBWTJFLENBQVosSUFBaUJqQixXQUFXLENBQUM5RCxJQUFJLENBQUNJLElBQU4sRUFBWTJFLENBQVosRUFBZWxDLFNBQWYsQ0FBN0IsTUFDQzdDLElBQUksQ0FBQ3VDLEtBQUwsR0FBYXdDLENBQWIsSUFBa0JqQixXQUFXLENBQUM5RCxJQUFJLENBQUN1QyxLQUFOLEVBQWF3QyxDQUFiLEVBQWdCbEMsU0FBaEIsQ0FEOUIsTUFFQzdDLElBQUksQ0FBQ0MsR0FBTCxHQUFXK0UsQ0FBWCxJQUFnQmxCLFdBQVcsQ0FBQzlELElBQUksQ0FBQ0MsR0FBTixFQUFXK0UsQ0FBWCxFQUFjbkMsU0FBZCxDQUY1QixNQUdDN0MsSUFBSSxDQUFDd0MsTUFBTCxHQUFjd0MsQ0FBZCxJQUFtQmxCLFdBQVcsQ0FBQzlELElBQUksQ0FBQ3dDLE1BQU4sRUFBY3dDLENBQWQsRUFBaUJuQyxTQUFqQixDQUgvQixDQURGO0FBTUQ7O0FBRUQsU0FBU1Esc0JBQVQsQ0FBZ0NLLEtBQWhDLEVBQXVDO0FBQ3JDLE9BQUssSUFBSXJKLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdxSixLQUFLLENBQUN4TyxNQUExQixFQUFrQ21GLENBQUMsRUFBbkMsRUFBdUM7QUFDckMsU0FBSyxJQUFJa0osQ0FBQyxHQUFHbEosQ0FBQyxHQUFHLENBQWpCLEVBQW9Ca0osQ0FBQyxHQUFHRyxLQUFLLENBQUN4TyxNQUE5QixFQUFzQ3FPLENBQUMsRUFBdkMsRUFBMkM7QUFDekMsVUFBTUksS0FBSyxHQUFHRCxLQUFLLENBQUNySixDQUFELENBQW5CO0FBQ0EsVUFBTXVKLEtBQUssR0FBR0YsS0FBSyxDQUFDSCxDQUFELENBQW5COztBQUNBLFVBQUlJLEtBQUssS0FBS0MsS0FBZCxFQUFxQjtBQUNuQmhDLFFBQUFBLFFBQUcsQ0FBQyw0Q0FBRCxDQUFIO0FBQ0E7QUFDRDs7QUFDRCxVQUFJdUMsbUJBQW1CLENBQUNSLEtBQUQsRUFBUUMsS0FBUixFQUFlLENBQUMsQ0FBaEIsQ0FBdkIsRUFBMkM7QUFBQTtBQUN6QyxjQUFJcUIsS0FBSyxHQUFHLEVBQVo7QUFDQSxjQUFJQyxRQUFRLFNBQVo7QUFDQSxjQUFNQyxjQUFjLEdBQUdDLFlBQVksQ0FBQ3pCLEtBQUQsRUFBUUMsS0FBUixDQUFuQzs7QUFDQSxjQUFJdUIsY0FBYyxDQUFDalEsTUFBZixLQUEwQixDQUE5QixFQUFpQztBQUMvQitQLFlBQUFBLEtBQUssR0FBR0UsY0FBUjtBQUNBRCxZQUFBQSxRQUFRLEdBQUd2QixLQUFYO0FBQ0QsV0FIRCxNQUdPO0FBQ0wsZ0JBQU0wQixjQUFjLEdBQUdELFlBQVksQ0FBQ3hCLEtBQUQsRUFBUUQsS0FBUixDQUFuQzs7QUFDQSxnQkFBSXdCLGNBQWMsQ0FBQ2pRLE1BQWYsR0FBd0JtUSxjQUFjLENBQUNuUSxNQUEzQyxFQUFtRDtBQUNqRCtQLGNBQUFBLEtBQUssR0FBR0UsY0FBUjtBQUNBRCxjQUFBQSxRQUFRLEdBQUd2QixLQUFYO0FBQ0QsYUFIRCxNQUdPO0FBQ0xzQixjQUFBQSxLQUFLLEdBQUdJLGNBQVI7QUFDQUgsY0FBQUEsUUFBUSxHQUFHdEIsS0FBWDtBQUNEO0FBQ0Y7O0FBQ0RoQyxVQUFBQSxRQUFHLG1EQUE0Q3FELEtBQUssQ0FBQy9QLE1BQWxELEVBQUg7QUFDQSxjQUFNa08sUUFBUSxHQUFHTSxLQUFLLENBQUNVLE1BQU4sQ0FBYSxVQUFDcEUsSUFBRCxFQUFVO0FBQ3RDLG1CQUFPQSxJQUFJLEtBQUtrRixRQUFoQjtBQUNELFdBRmdCLENBQWpCO0FBR0FyRCxVQUFBQSxLQUFLLENBQUNDLFNBQU4sQ0FBZ0IvTSxJQUFoQixDQUFxQnVRLEtBQXJCLENBQTJCbEMsUUFBM0IsRUFBcUM2QixLQUFyQztBQUNBO0FBQUEsZUFBTzVCLHNCQUFzQixDQUFDRCxRQUFEO0FBQTdCO0FBdEJ5Qzs7QUFBQTtBQXVCMUM7QUFDRjtBQUNGOztBQUNELFNBQU9NLEtBQVA7QUFDRDs7QUFFRCxTQUFTMEIsWUFBVCxDQUFzQnpCLEtBQXRCLEVBQTZCQyxLQUE3QixFQUFvQztBQUNsQyxNQUFNMkIsZUFBZSxHQUFHQyxhQUFhLENBQUM1QixLQUFELEVBQVFELEtBQVIsQ0FBckM7O0FBQ0EsTUFBSTRCLGVBQWUsQ0FBQ2pELE1BQWhCLEtBQTJCLENBQTNCLElBQWdDaUQsZUFBZSxDQUFDakgsS0FBaEIsS0FBMEIsQ0FBOUQsRUFBaUU7QUFDL0QsV0FBTyxDQUFDcUYsS0FBRCxDQUFQO0FBQ0Q7O0FBQ0QsTUFBTUQsS0FBSyxHQUFHLEVBQWQ7QUFDQTtBQUNFLFFBQU0rQixLQUFLLEdBQUc7QUFDWmpELE1BQUFBLE1BQU0sRUFBRW1CLEtBQUssQ0FBQ25CLE1BREY7QUFFWkYsTUFBQUEsTUFBTSxFQUFFLENBRkk7QUFHWmxDLE1BQUFBLElBQUksRUFBRXVELEtBQUssQ0FBQ3ZELElBSEE7QUFJWm1DLE1BQUFBLEtBQUssRUFBRWdELGVBQWUsQ0FBQ25GLElBSlg7QUFLWkgsTUFBQUEsR0FBRyxFQUFFMEQsS0FBSyxDQUFDMUQsR0FMQztBQU1aM0IsTUFBQUEsS0FBSyxFQUFFO0FBTkssS0FBZDtBQVFBbUgsSUFBQUEsS0FBSyxDQUFDbkgsS0FBTixHQUFjbUgsS0FBSyxDQUFDbEQsS0FBTixHQUFja0QsS0FBSyxDQUFDckYsSUFBbEM7QUFDQXFGLElBQUFBLEtBQUssQ0FBQ25ELE1BQU4sR0FBZW1ELEtBQUssQ0FBQ2pELE1BQU4sR0FBZWlELEtBQUssQ0FBQ3hGLEdBQXBDOztBQUNBLFFBQUl3RixLQUFLLENBQUNuRCxNQUFOLEtBQWlCLENBQWpCLElBQXNCbUQsS0FBSyxDQUFDbkgsS0FBTixLQUFnQixDQUExQyxFQUE2QztBQUMzQ29GLE1BQUFBLEtBQUssQ0FBQzNPLElBQU4sQ0FBVzBRLEtBQVg7QUFDRDtBQUNGO0FBQ0Q7QUFDRSxRQUFNQyxLQUFLLEdBQUc7QUFDWmxELE1BQUFBLE1BQU0sRUFBRStDLGVBQWUsQ0FBQ3RGLEdBRFo7QUFFWnFDLE1BQUFBLE1BQU0sRUFBRSxDQUZJO0FBR1psQyxNQUFBQSxJQUFJLEVBQUVtRixlQUFlLENBQUNuRixJQUhWO0FBSVptQyxNQUFBQSxLQUFLLEVBQUVnRCxlQUFlLENBQUNoRCxLQUpYO0FBS1p0QyxNQUFBQSxHQUFHLEVBQUUwRCxLQUFLLENBQUMxRCxHQUxDO0FBTVozQixNQUFBQSxLQUFLLEVBQUU7QUFOSyxLQUFkO0FBUUFvSCxJQUFBQSxLQUFLLENBQUNwSCxLQUFOLEdBQWNvSCxLQUFLLENBQUNuRCxLQUFOLEdBQWNtRCxLQUFLLENBQUN0RixJQUFsQztBQUNBc0YsSUFBQUEsS0FBSyxDQUFDcEQsTUFBTixHQUFlb0QsS0FBSyxDQUFDbEQsTUFBTixHQUFla0QsS0FBSyxDQUFDekYsR0FBcEM7O0FBQ0EsUUFBSXlGLEtBQUssQ0FBQ3BELE1BQU4sS0FBaUIsQ0FBakIsSUFBc0JvRCxLQUFLLENBQUNwSCxLQUFOLEtBQWdCLENBQTFDLEVBQTZDO0FBQzNDb0YsTUFBQUEsS0FBSyxDQUFDM08sSUFBTixDQUFXMlEsS0FBWDtBQUNEO0FBQ0Y7QUFDRDtBQUNFLFFBQU1DLEtBQUssR0FBRztBQUNabkQsTUFBQUEsTUFBTSxFQUFFbUIsS0FBSyxDQUFDbkIsTUFERjtBQUVaRixNQUFBQSxNQUFNLEVBQUUsQ0FGSTtBQUdabEMsTUFBQUEsSUFBSSxFQUFFbUYsZUFBZSxDQUFDbkYsSUFIVjtBQUlabUMsTUFBQUEsS0FBSyxFQUFFZ0QsZUFBZSxDQUFDaEQsS0FKWDtBQUtadEMsTUFBQUEsR0FBRyxFQUFFc0YsZUFBZSxDQUFDL0MsTUFMVDtBQU1abEUsTUFBQUEsS0FBSyxFQUFFO0FBTkssS0FBZDtBQVFBcUgsSUFBQUEsS0FBSyxDQUFDckgsS0FBTixHQUFjcUgsS0FBSyxDQUFDcEQsS0FBTixHQUFjb0QsS0FBSyxDQUFDdkYsSUFBbEM7QUFDQXVGLElBQUFBLEtBQUssQ0FBQ3JELE1BQU4sR0FBZXFELEtBQUssQ0FBQ25ELE1BQU4sR0FBZW1ELEtBQUssQ0FBQzFGLEdBQXBDOztBQUNBLFFBQUkwRixLQUFLLENBQUNyRCxNQUFOLEtBQWlCLENBQWpCLElBQXNCcUQsS0FBSyxDQUFDckgsS0FBTixLQUFnQixDQUExQyxFQUE2QztBQUMzQ29GLE1BQUFBLEtBQUssQ0FBQzNPLElBQU4sQ0FBVzRRLEtBQVg7QUFDRDtBQUNGO0FBQ0Q7QUFDRSxRQUFNQyxLQUFLLEdBQUc7QUFDWnBELE1BQUFBLE1BQU0sRUFBRW1CLEtBQUssQ0FBQ25CLE1BREY7QUFFWkYsTUFBQUEsTUFBTSxFQUFFLENBRkk7QUFHWmxDLE1BQUFBLElBQUksRUFBRW1GLGVBQWUsQ0FBQ2hELEtBSFY7QUFJWkEsTUFBQUEsS0FBSyxFQUFFb0IsS0FBSyxDQUFDcEIsS0FKRDtBQUtadEMsTUFBQUEsR0FBRyxFQUFFMEQsS0FBSyxDQUFDMUQsR0FMQztBQU1aM0IsTUFBQUEsS0FBSyxFQUFFO0FBTkssS0FBZDtBQVFBc0gsSUFBQUEsS0FBSyxDQUFDdEgsS0FBTixHQUFjc0gsS0FBSyxDQUFDckQsS0FBTixHQUFjcUQsS0FBSyxDQUFDeEYsSUFBbEM7QUFDQXdGLElBQUFBLEtBQUssQ0FBQ3RELE1BQU4sR0FBZXNELEtBQUssQ0FBQ3BELE1BQU4sR0FBZW9ELEtBQUssQ0FBQzNGLEdBQXBDOztBQUNBLFFBQUkyRixLQUFLLENBQUN0RCxNQUFOLEtBQWlCLENBQWpCLElBQXNCc0QsS0FBSyxDQUFDdEgsS0FBTixLQUFnQixDQUExQyxFQUE2QztBQUMzQ29GLE1BQUFBLEtBQUssQ0FBQzNPLElBQU4sQ0FBVzZRLEtBQVg7QUFDRDtBQUNGO0FBQ0QsU0FBT2xDLEtBQVA7QUFDRDs7QUFFRCxTQUFTOEIsYUFBVCxDQUF1QjdCLEtBQXZCLEVBQThCQyxLQUE5QixFQUFxQztBQUNuQyxNQUFNaUMsT0FBTyxHQUFHcFEsSUFBSSxDQUFDWSxHQUFMLENBQVNzTixLQUFLLENBQUN2RCxJQUFmLEVBQXFCd0QsS0FBSyxDQUFDeEQsSUFBM0IsQ0FBaEI7QUFDQSxNQUFNMEYsUUFBUSxHQUFHclEsSUFBSSxDQUFDQyxHQUFMLENBQVNpTyxLQUFLLENBQUNwQixLQUFmLEVBQXNCcUIsS0FBSyxDQUFDckIsS0FBNUIsQ0FBakI7QUFDQSxNQUFNd0QsTUFBTSxHQUFHdFEsSUFBSSxDQUFDWSxHQUFMLENBQVNzTixLQUFLLENBQUMxRCxHQUFmLEVBQW9CMkQsS0FBSyxDQUFDM0QsR0FBMUIsQ0FBZjtBQUNBLE1BQU0rRixTQUFTLEdBQUd2USxJQUFJLENBQUNDLEdBQUwsQ0FBU2lPLEtBQUssQ0FBQ25CLE1BQWYsRUFBdUJvQixLQUFLLENBQUNwQixNQUE3QixDQUFsQjtBQUNBLFNBQU87QUFDTEEsSUFBQUEsTUFBTSxFQUFFd0QsU0FESDtBQUVMMUQsSUFBQUEsTUFBTSxFQUFFN00sSUFBSSxDQUFDWSxHQUFMLENBQVMsQ0FBVCxFQUFZMlAsU0FBUyxHQUFHRCxNQUF4QixDQUZIO0FBR0wzRixJQUFBQSxJQUFJLEVBQUV5RixPQUhEO0FBSUx0RCxJQUFBQSxLQUFLLEVBQUV1RCxRQUpGO0FBS0w3RixJQUFBQSxHQUFHLEVBQUU4RixNQUxBO0FBTUx6SCxJQUFBQSxLQUFLLEVBQUU3SSxJQUFJLENBQUNZLEdBQUwsQ0FBUyxDQUFULEVBQVl5UCxRQUFRLEdBQUdELE9BQXZCO0FBTkYsR0FBUDtBQVFEOztBQUVELFNBQVMxQixtQkFBVCxDQUE2QlIsS0FBN0IsRUFBb0NDLEtBQXBDLEVBQTJDZixTQUEzQyxFQUFzRDtBQUNwRCxTQUNFLENBQUNjLEtBQUssQ0FBQ3ZELElBQU4sR0FBYXdELEtBQUssQ0FBQ3JCLEtBQW5CLElBQ0VNLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIsV0FBVyxDQUFDSCxLQUFLLENBQUN2RCxJQUFQLEVBQWF3RCxLQUFLLENBQUNyQixLQUFuQixFQUEwQk0sU0FBMUIsQ0FEaEMsTUFFQ2UsS0FBSyxDQUFDeEQsSUFBTixHQUFhdUQsS0FBSyxDQUFDcEIsS0FBbkIsSUFDRU0sU0FBUyxJQUFJLENBQWIsSUFBa0JpQixXQUFXLENBQUNGLEtBQUssQ0FBQ3hELElBQVAsRUFBYXVELEtBQUssQ0FBQ3BCLEtBQW5CLEVBQTBCTSxTQUExQixDQUhoQyxNQUlDYyxLQUFLLENBQUMxRCxHQUFOLEdBQVkyRCxLQUFLLENBQUNwQixNQUFsQixJQUNFSyxTQUFTLElBQUksQ0FBYixJQUFrQmlCLFdBQVcsQ0FBQ0gsS0FBSyxDQUFDMUQsR0FBUCxFQUFZMkQsS0FBSyxDQUFDcEIsTUFBbEIsRUFBMEJLLFNBQTFCLENBTGhDLE1BTUNlLEtBQUssQ0FBQzNELEdBQU4sR0FBWTBELEtBQUssQ0FBQ25CLE1BQWxCLElBQ0VLLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIsV0FBVyxDQUFDRixLQUFLLENBQUMzRCxHQUFQLEVBQVkwRCxLQUFLLENBQUNuQixNQUFsQixFQUEwQkssU0FBMUIsQ0FQaEMsQ0FERjtBQVVEOztBQUVELFNBQVNpQixXQUFULENBQXFCMU0sQ0FBckIsRUFBd0JDLENBQXhCLEVBQTJCd0wsU0FBM0IsRUFBc0M7QUFDcEMsU0FBT3BOLElBQUksQ0FBQ2tCLEdBQUwsQ0FBU1MsQ0FBQyxHQUFHQyxDQUFiLEtBQW1Cd0wsU0FBMUI7QUFDRDs7QUFFRCxTQUFTakIsUUFBVCxHQUFlO0FBQ2IsTUFBSU8sS0FBSixFQUFXO0FBQ1RELElBQUFBLFNBQUEsQ0FBZ0IsSUFBaEIsRUFBc0JGLFNBQXRCO0FBQ0Q7QUFDRixDOzs7Ozs7Ozs7Ozs7Ozs7O0FDelREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBRUEsSUFBSWlFLE1BQU0sR0FBRyxJQUFJQyxHQUFKLEVBQWI7QUFDQSxJQUFJQyxNQUFNLEdBQUcsSUFBSUQsR0FBSixFQUFiO0FBQ0EsSUFBSUUsV0FBVyxHQUFHLENBQWxCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDTyxTQUFTQyxpQkFBVCxDQUEyQkMsU0FBM0IsRUFBc0M7QUFDM0MsTUFBSUMsVUFBVSxHQUFHLEVBQWpCOztBQUVBLHFDQUEwQkMsTUFBTSxDQUFDQyxPQUFQLENBQWVILFNBQWYsQ0FBMUIscUNBQXFEO0FBQWhEO0FBQUEsUUFBT25KLEVBQVA7QUFBQSxRQUFXZSxLQUFYOztBQUNIK0gsSUFBQUEsTUFBTSxDQUFDUyxHQUFQLENBQVd2SixFQUFYLEVBQWVlLEtBQWY7O0FBQ0EsUUFBSUEsS0FBSyxDQUFDcUksVUFBVixFQUFzQjtBQUNwQkEsTUFBQUEsVUFBVSxJQUFJckksS0FBSyxDQUFDcUksVUFBTixHQUFtQixJQUFqQztBQUNEO0FBQ0Y7O0FBRUQsTUFBSUEsVUFBSixFQUFnQjtBQUNkLFFBQUlJLFlBQVksR0FBRzlNLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBbkI7QUFDQTJJLElBQUFBLFlBQVksQ0FBQ3ZJLFNBQWIsR0FBeUJtSSxVQUF6QjtBQUNBMU0sSUFBQUEsUUFBUSxDQUFDK00sb0JBQVQsQ0FBOEIsTUFBOUIsRUFBc0MsQ0FBdEMsRUFBeUN2SSxXQUF6QyxDQUFxRHNJLFlBQXJEO0FBQ0Q7QUFDRjtBQUVEO0FBQ0E7QUFDQTs7QUFDTyxTQUFTRSxjQUFULENBQXdCQyxTQUF4QixFQUFtQztBQUN4QyxNQUFJQyxLQUFLLEdBQUdaLE1BQU0sQ0FBQ2EsR0FBUCxDQUFXRixTQUFYLENBQVo7O0FBQ0EsTUFBSSxDQUFDQyxLQUFMLEVBQVk7QUFDVixRQUFJNUosRUFBRSxHQUFHLG1CQUFtQmlKLFdBQVcsRUFBdkM7QUFDQVcsSUFBQUEsS0FBSyxHQUFHRSxlQUFlLENBQUM5SixFQUFELEVBQUsySixTQUFMLENBQXZCO0FBQ0FYLElBQUFBLE1BQU0sQ0FBQ08sR0FBUCxDQUFXSSxTQUFYLEVBQXNCQyxLQUF0QjtBQUNEOztBQUNELFNBQU9BLEtBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUNPLFNBQVNHLDBCQUFULENBQW9DNUssS0FBcEMsRUFBMkM2SyxVQUEzQyxFQUF1RDtBQUM1RCxNQUFJaEIsTUFBTSxDQUFDaUIsSUFBUCxLQUFnQixDQUFwQixFQUF1QjtBQUNyQixXQUFPLEtBQVA7QUFDRDs7QUFFRCxXQUFTQyxVQUFULEdBQXNCO0FBQUEsd0RBQ2dCbEIsTUFEaEI7QUFBQTs7QUFBQTtBQUNwQiwwREFBNEM7QUFBQTtBQUFBLFlBQWhDWSxLQUFnQztBQUFBLFlBQXpCTyxZQUF5Qjs7QUFBQSw2REFDdkJBLFlBQVksQ0FBQ0MsS0FBYixDQUFtQkMsT0FBbkIsRUFEdUI7QUFBQTs7QUFBQTtBQUMxQyxpRUFBaUQ7QUFBQSxnQkFBdENDLElBQXNDOztBQUMvQyxnQkFBSSxDQUFDQSxJQUFJLENBQUNDLGlCQUFWLEVBQTZCO0FBQzNCO0FBQ0Q7O0FBSDhDLGlFQUl6QkQsSUFBSSxDQUFDQyxpQkFKb0I7QUFBQTs7QUFBQTtBQUkvQyxxRUFBOEM7QUFBQSxvQkFBbkN6UCxPQUFtQztBQUM1QyxvQkFBSStILElBQUksR0FBRy9ILE9BQU8sQ0FBQ29ILHFCQUFSLEdBQWdDc0ksTUFBaEMsRUFBWDs7QUFDQSxvQkFBSTdDLGlCQUFpQixDQUFDOUUsSUFBRCxFQUFPMUQsS0FBSyxDQUFDc0wsT0FBYixFQUFzQnRMLEtBQUssQ0FBQ3VMLE9BQTVCLEVBQXFDLENBQXJDLENBQXJCLEVBQThEO0FBQzVELHlCQUFPO0FBQUVkLG9CQUFBQSxLQUFLLEVBQUxBLEtBQUY7QUFBU1Usb0JBQUFBLElBQUksRUFBSkEsSUFBVDtBQUFleFAsb0JBQUFBLE9BQU8sRUFBUEEsT0FBZjtBQUF3QitILG9CQUFBQSxJQUFJLEVBQUpBO0FBQXhCLG1CQUFQO0FBQ0Q7QUFDRjtBQVQ4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVWhEO0FBWHlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZM0M7QUFibUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNyQjs7QUFFRCxNQUFJOEgsTUFBTSxHQUFHVCxVQUFVLEVBQXZCOztBQUNBLE1BQUksQ0FBQ1MsTUFBTCxFQUFhO0FBQ1gsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsU0FBT3ZMLE9BQU8sQ0FBQ3dMLHFCQUFSLENBQ0xDLElBQUksQ0FBQ0MsU0FBTCxDQUFlO0FBQ2I5SyxJQUFBQSxFQUFFLEVBQUUySyxNQUFNLENBQUNMLElBQVAsQ0FBWVMsVUFBWixDQUF1Qi9LLEVBRGQ7QUFFYjRKLElBQUFBLEtBQUssRUFBRWUsTUFBTSxDQUFDZixLQUZEO0FBR2IvRyxJQUFBQSxJQUFJLEVBQUVvQyxZQUFZLENBQUMwRixNQUFNLENBQUNMLElBQVAsQ0FBWWhOLEtBQVosQ0FBa0I0RSxxQkFBbEIsRUFBRCxDQUhMO0FBSWI4SSxJQUFBQSxLQUFLLEVBQUVoQjtBQUpNLEdBQWYsQ0FESyxDQUFQO0FBUUQ7QUFFRDtBQUNBO0FBQ0E7O0FBQ08sU0FBU0YsZUFBVCxDQUF5Qm1CLE9BQXpCLEVBQWtDdEIsU0FBbEMsRUFBNkM7QUFDbEQsTUFBSVMsS0FBSyxHQUFHLEVBQVo7QUFDQSxNQUFJYyxVQUFVLEdBQUcsQ0FBakI7QUFDQSxNQUFJQyxTQUFTLEdBQUcsSUFBaEI7QUFFQTtBQUNGO0FBQ0E7O0FBQ0UsV0FBU0MsR0FBVCxDQUFhTCxVQUFiLEVBQXlCO0FBQ3ZCLFFBQUkvSyxFQUFFLEdBQUdpTCxPQUFPLEdBQUcsR0FBVixHQUFnQkMsVUFBVSxFQUFuQztBQUVBLFFBQUk1TixLQUFLLEdBQUdxRixnQkFBZ0IsQ0FBQ29JLFVBQVUsQ0FBQ2pILE9BQVosQ0FBNUI7O0FBQ0EsUUFBSSxDQUFDeEcsS0FBTCxFQUFZO0FBQ1ZtSCxNQUFBQSxHQUFHLENBQUMsdUNBQUQsRUFBMENzRyxVQUExQyxDQUFIO0FBQ0E7QUFDRDs7QUFFRCxRQUFJVCxJQUFJLEdBQUc7QUFBRXRLLE1BQUFBLEVBQUUsRUFBRkEsRUFBRjtBQUFNK0ssTUFBQUEsVUFBVSxFQUFWQSxVQUFOO0FBQWtCek4sTUFBQUEsS0FBSyxFQUFMQTtBQUFsQixLQUFYO0FBQ0E4TSxJQUFBQSxLQUFLLENBQUN4UyxJQUFOLENBQVcwUyxJQUFYO0FBQ0FlLElBQUFBLE1BQU0sQ0FBQ2YsSUFBRCxDQUFOO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNFLFdBQVNqSyxNQUFULENBQWdCaUwsWUFBaEIsRUFBOEI7QUFDNUIsUUFBSUMsS0FBSyxHQUFHbkIsS0FBSyxDQUFDb0IsU0FBTixDQUFnQixVQUFDdE8sQ0FBRDtBQUFBLGFBQU9BLENBQUMsQ0FBQzZOLFVBQUYsQ0FBYS9LLEVBQWIsS0FBb0JzTCxZQUEzQjtBQUFBLEtBQWhCLENBQVo7O0FBQ0EsUUFBSUMsS0FBSyxLQUFLLENBQUMsQ0FBZixFQUFrQjtBQUNoQjtBQUNEOztBQUVELFFBQUlqQixJQUFJLEdBQUdGLEtBQUssQ0FBQ21CLEtBQUQsQ0FBaEI7QUFDQW5CLElBQUFBLEtBQUssQ0FBQzlELE1BQU4sQ0FBYWlGLEtBQWIsRUFBb0IsQ0FBcEI7QUFDQWpCLElBQUFBLElBQUksQ0FBQ0MsaUJBQUwsR0FBeUIsSUFBekI7O0FBQ0EsUUFBSUQsSUFBSSxDQUFDYSxTQUFULEVBQW9CO0FBQ2xCYixNQUFBQSxJQUFJLENBQUNhLFNBQUwsQ0FBZTlLLE1BQWY7QUFDQWlLLE1BQUFBLElBQUksQ0FBQ2EsU0FBTCxHQUFpQixJQUFqQjtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7OztBQUNFLFdBQVNNLE1BQVQsQ0FBZ0JWLFVBQWhCLEVBQTRCO0FBQzFCMUssSUFBQUEsTUFBTSxDQUFDMEssVUFBVSxDQUFDL0ssRUFBWixDQUFOO0FBQ0FvTCxJQUFBQSxHQUFHLENBQUNMLFVBQUQsQ0FBSDtBQUNEO0FBRUQ7QUFDRjtBQUNBOzs7QUFDRSxXQUFTVyxLQUFULEdBQWlCO0FBQ2ZDLElBQUFBLGNBQWM7QUFDZHZCLElBQUFBLEtBQUssQ0FBQ3JTLE1BQU4sR0FBZSxDQUFmO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRSxXQUFTNlQsYUFBVCxHQUF5QjtBQUN2QkQsSUFBQUEsY0FBYztBQUNkdkIsSUFBQUEsS0FBSyxDQUFDeUIsT0FBTixDQUFjLFVBQUN2QixJQUFEO0FBQUEsYUFBVWUsTUFBTSxDQUFDZixJQUFELENBQWhCO0FBQUEsS0FBZDtBQUNEO0FBRUQ7QUFDRjtBQUNBOzs7QUFDRSxXQUFTZSxNQUFULENBQWdCZixJQUFoQixFQUFzQjtBQUNwQixRQUFJd0IsY0FBYyxHQUFHQyxnQkFBZ0IsRUFBckM7QUFFQSxRQUFJaEwsS0FBSyxHQUFHK0gsTUFBTSxDQUFDZSxHQUFQLENBQVdTLElBQUksQ0FBQ1MsVUFBTCxDQUFnQmhLLEtBQTNCLENBQVo7O0FBQ0EsUUFBSSxDQUFDQSxLQUFMLEVBQVk7QUFDVjFCLE1BQUFBLFFBQVEscUNBQThCaUwsSUFBSSxDQUFDUyxVQUFMLENBQWdCaEssS0FBOUMsRUFBUjtBQUNBO0FBQ0Q7O0FBRUQsUUFBSWlMLGFBQWEsR0FBR3RQLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBcEI7QUFDQW1MLElBQUFBLGFBQWEsQ0FBQ2xMLFlBQWQsQ0FBMkIsSUFBM0IsRUFBaUN3SixJQUFJLENBQUN0SyxFQUF0QztBQUNBZ00sSUFBQUEsYUFBYSxDQUFDbEwsWUFBZCxDQUEyQixZQUEzQixFQUF5Q3dKLElBQUksQ0FBQ1MsVUFBTCxDQUFnQmhLLEtBQXpEO0FBQ0FpTCxJQUFBQSxhQUFhLENBQUNqTCxLQUFkLENBQW9CTyxXQUFwQixDQUFnQyxnQkFBaEMsRUFBa0QsTUFBbEQ7QUFFQSxRQUFJMkssYUFBYSxHQUFHaE4sTUFBTSxDQUFDaU4sVUFBM0I7QUFDQSxRQUFJQyxXQUFXLEdBQUc1SyxRQUFRLENBQ3hCQyxnQkFBZ0IsQ0FBQzlFLFFBQVEsQ0FBQytFLGVBQVYsQ0FBaEIsQ0FBMkNDLGdCQUEzQyxDQUNFLGNBREYsQ0FEd0IsQ0FBMUI7QUFLQSxRQUFJaEIsU0FBUyxHQUFHdUwsYUFBYSxJQUFJRSxXQUFXLElBQUksQ0FBbkIsQ0FBN0I7QUFDQSxRQUFJNUwsZ0JBQWdCLEdBQUc3RCxRQUFRLENBQUM2RCxnQkFBaEM7QUFDQSxRQUFJNkwsT0FBTyxHQUFHN0wsZ0JBQWdCLENBQUNpQyxVQUEvQjtBQUNBLFFBQUk2SixPQUFPLEdBQUc5TCxnQkFBZ0IsQ0FBQytCLFNBQS9COztBQUVBLGFBQVNnSyxlQUFULENBQXlCeFIsT0FBekIsRUFBa0MrSCxJQUFsQyxFQUF3QzBKLFlBQXhDLEVBQXNEO0FBQ3BEelIsTUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjcUIsUUFBZCxHQUF5QixVQUF6Qjs7QUFFQSxVQUFJckIsS0FBSyxDQUFDSSxLQUFOLEtBQWdCLE1BQXBCLEVBQTRCO0FBQzFCckcsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjSSxLQUFkLGFBQXlCMEIsSUFBSSxDQUFDMUIsS0FBOUI7QUFDQXJHLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY29FLE1BQWQsYUFBMEJ0QyxJQUFJLENBQUNzQyxNQUEvQjtBQUNBckssUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFja0MsSUFBZCxhQUF3QkosSUFBSSxDQUFDSSxJQUFMLEdBQVltSixPQUFwQztBQUNBdFIsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjK0IsR0FBZCxhQUF1QkQsSUFBSSxDQUFDQyxHQUFMLEdBQVd1SixPQUFsQztBQUNELE9BTEQsTUFLTyxJQUFJdEwsS0FBSyxDQUFDSSxLQUFOLEtBQWdCLFVBQXBCLEVBQWdDO0FBQ3JDckcsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjSSxLQUFkLGFBQXlCOEssYUFBekI7QUFDQW5SLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY29FLE1BQWQsYUFBMEJ0QyxJQUFJLENBQUNzQyxNQUEvQjtBQUNBLFlBQUlsQyxJQUFJLEdBQUczSyxJQUFJLENBQUNrVSxLQUFMLENBQVczSixJQUFJLENBQUNJLElBQUwsR0FBWWdKLGFBQXZCLElBQXdDQSxhQUFuRDtBQUNBblIsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFja0MsSUFBZCxhQUF3QkEsSUFBSSxHQUFHbUosT0FBL0I7QUFDQXRSLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBYytCLEdBQWQsYUFBdUJELElBQUksQ0FBQ0MsR0FBTCxHQUFXdUosT0FBbEM7QUFDRCxPQU5NLE1BTUEsSUFBSXRMLEtBQUssQ0FBQ0ksS0FBTixLQUFnQixRQUFwQixFQUE4QjtBQUNuQ3JHLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY0ksS0FBZCxhQUF5Qm9MLFlBQVksQ0FBQ3BMLEtBQXRDO0FBQ0FyRyxRQUFBQSxPQUFPLENBQUNpRyxLQUFSLENBQWNvRSxNQUFkLGFBQTBCdEMsSUFBSSxDQUFDc0MsTUFBL0I7QUFDQXJLLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY2tDLElBQWQsYUFBd0JzSixZQUFZLENBQUN0SixJQUFiLEdBQW9CbUosT0FBNUM7QUFDQXRSLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBYytCLEdBQWQsYUFBdUJELElBQUksQ0FBQ0MsR0FBTCxHQUFXdUosT0FBbEM7QUFDRCxPQUxNLE1BS0EsSUFBSXRMLEtBQUssQ0FBQ0ksS0FBTixLQUFnQixNQUFwQixFQUE0QjtBQUNqQ3JHLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY0ksS0FBZCxhQUF5QlQsU0FBekI7QUFDQTVGLFFBQUFBLE9BQU8sQ0FBQ2lHLEtBQVIsQ0FBY29FLE1BQWQsYUFBMEJ0QyxJQUFJLENBQUNzQyxNQUEvQjs7QUFDQSxZQUFJbEMsS0FBSSxHQUFHM0ssSUFBSSxDQUFDa1UsS0FBTCxDQUFXM0osSUFBSSxDQUFDSSxJQUFMLEdBQVl2QyxTQUF2QixJQUFvQ0EsU0FBL0M7O0FBQ0E1RixRQUFBQSxPQUFPLENBQUNpRyxLQUFSLENBQWNrQyxJQUFkLGFBQXdCQSxLQUFJLEdBQUdtSixPQUEvQjtBQUNBdFIsUUFBQUEsT0FBTyxDQUFDaUcsS0FBUixDQUFjK0IsR0FBZCxhQUF1QkQsSUFBSSxDQUFDQyxHQUFMLEdBQVd1SixPQUFsQztBQUNEO0FBQ0Y7O0FBRUQsUUFBSUUsWUFBWSxHQUFHakMsSUFBSSxDQUFDaE4sS0FBTCxDQUFXNEUscUJBQVgsRUFBbkI7QUFFQSxRQUFJdUssZUFBSjs7QUFDQSxRQUFJO0FBQ0YsVUFBSUMsUUFBUSxHQUFHaFEsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixVQUF2QixDQUFmO0FBQ0E2TCxNQUFBQSxRQUFRLENBQUN6TCxTQUFULEdBQXFCcUosSUFBSSxDQUFDUyxVQUFMLENBQWdCalEsT0FBaEIsQ0FBd0I4RyxJQUF4QixFQUFyQjtBQUNBNkssTUFBQUEsZUFBZSxHQUFHQyxRQUFRLENBQUNDLE9BQVQsQ0FBaUJDLGlCQUFuQztBQUNELEtBSkQsQ0FJRSxPQUFPQyxLQUFQLEVBQWM7QUFDZHhOLE1BQUFBLFFBQVEsd0NBQ3lCaUwsSUFBSSxDQUFDUyxVQUFMLENBQWdCalEsT0FEekMsaUJBQ3NEK1IsS0FBSyxDQUFDdk4sT0FENUQsRUFBUjtBQUdBO0FBQ0Q7O0FBRUQsUUFBSXlCLEtBQUssQ0FBQ3NLLE1BQU4sS0FBaUIsT0FBckIsRUFBOEI7QUFDNUIsVUFBSTlGLGtDQUFrQyxHQUFHLElBQXpDO0FBQ0EsVUFBSUMsV0FBVyxHQUFHRix1QkFBdUIsQ0FDdkNnRixJQUFJLENBQUNoTixLQURrQyxFQUV2Q2lJLGtDQUZ1QyxDQUF6QztBQUtBQyxNQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ3hMLElBQVosQ0FBaUIsVUFBQzhTLEVBQUQsRUFBS0MsRUFBTCxFQUFZO0FBQ3pDLFlBQUlELEVBQUUsQ0FBQ2hLLEdBQUgsR0FBU2lLLEVBQUUsQ0FBQ2pLLEdBQWhCLEVBQXFCO0FBQ25CLGlCQUFPLENBQUMsQ0FBUjtBQUNELFNBRkQsTUFFTyxJQUFJZ0ssRUFBRSxDQUFDaEssR0FBSCxHQUFTaUssRUFBRSxDQUFDakssR0FBaEIsRUFBcUI7QUFDMUIsaUJBQU8sQ0FBUDtBQUNELFNBRk0sTUFFQTtBQUNMLGlCQUFPLENBQVA7QUFDRDtBQUNGLE9BUmEsQ0FBZDs7QUFQNEIsMkRBaUJMMEMsV0FqQks7QUFBQTs7QUFBQTtBQWlCNUIsK0RBQW9DO0FBQUEsY0FBM0J3SCxVQUEyQjtBQUNsQyxjQUFNQyxJQUFJLEdBQUdSLGVBQWUsQ0FBQ1MsU0FBaEIsQ0FBMEIsSUFBMUIsQ0FBYjtBQUNBRCxVQUFBQSxJQUFJLENBQUNsTSxLQUFMLENBQVdPLFdBQVgsQ0FBdUIsZ0JBQXZCLEVBQXlDLE1BQXpDO0FBQ0FnTCxVQUFBQSxlQUFlLENBQUNXLElBQUQsRUFBT0QsVUFBUCxFQUFtQlQsWUFBbkIsQ0FBZjtBQUNBUCxVQUFBQSxhQUFhLENBQUNtQixNQUFkLENBQXFCRixJQUFyQjtBQUNEO0FBdEIyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBdUI3QixLQXZCRCxNQXVCTyxJQUFJbE0sS0FBSyxDQUFDc0ssTUFBTixLQUFpQixRQUFyQixFQUErQjtBQUNwQyxVQUFNK0IsTUFBTSxHQUFHWCxlQUFlLENBQUNTLFNBQWhCLENBQTBCLElBQTFCLENBQWY7QUFDQUUsTUFBQUEsTUFBTSxDQUFDck0sS0FBUCxDQUFhTyxXQUFiLENBQXlCLGdCQUF6QixFQUEyQyxNQUEzQztBQUNBZ0wsTUFBQUEsZUFBZSxDQUFDYyxNQUFELEVBQVNiLFlBQVQsRUFBdUJBLFlBQXZCLENBQWY7QUFFQVAsTUFBQUEsYUFBYSxDQUFDbUIsTUFBZCxDQUFxQkMsTUFBckI7QUFDRDs7QUFFRHRCLElBQUFBLGNBQWMsQ0FBQ3FCLE1BQWYsQ0FBc0JuQixhQUF0QjtBQUNBMUIsSUFBQUEsSUFBSSxDQUFDYSxTQUFMLEdBQWlCYSxhQUFqQjtBQUNBMUIsSUFBQUEsSUFBSSxDQUFDQyxpQkFBTCxHQUF5QjdGLEtBQUssQ0FBQ2dELElBQU4sQ0FDdkJzRSxhQUFhLENBQUNxQixnQkFBZCxDQUErQixzQkFBL0IsQ0FEdUIsQ0FBekI7O0FBR0EsUUFBSS9DLElBQUksQ0FBQ0MsaUJBQUwsQ0FBdUJ4UyxNQUF2QixLQUFrQyxDQUF0QyxFQUF5QztBQUN2Q3VTLE1BQUFBLElBQUksQ0FBQ0MsaUJBQUwsR0FBeUI3RixLQUFLLENBQUNnRCxJQUFOLENBQVdzRSxhQUFhLENBQUNzQixRQUF6QixDQUF6QjtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7OztBQUNFLFdBQVN2QixnQkFBVCxHQUE0QjtBQUMxQixRQUFJLENBQUNaLFNBQUwsRUFBZ0I7QUFDZEEsTUFBQUEsU0FBUyxHQUFHek8sUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixLQUF2QixDQUFaO0FBQ0FzSyxNQUFBQSxTQUFTLENBQUNySyxZQUFWLENBQXVCLElBQXZCLEVBQTZCbUssT0FBN0I7QUFDQUUsTUFBQUEsU0FBUyxDQUFDckssWUFBVixDQUF1QixZQUF2QixFQUFxQzZJLFNBQXJDO0FBQ0F3QixNQUFBQSxTQUFTLENBQUNwSyxLQUFWLENBQWdCTyxXQUFoQixDQUE0QixnQkFBNUIsRUFBOEMsTUFBOUM7QUFDQTVFLE1BQUFBLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY3NOLE1BQWQsQ0FBcUJoQyxTQUFyQjtBQUNEOztBQUNELFdBQU9BLFNBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTs7O0FBQ0UsV0FBU1EsY0FBVCxHQUEwQjtBQUN4QixRQUFJUixTQUFKLEVBQWU7QUFDYkEsTUFBQUEsU0FBUyxDQUFDOUssTUFBVjtBQUNBOEssTUFBQUEsU0FBUyxHQUFHLElBQVo7QUFDRDtBQUNGOztBQUVELFNBQU87QUFBRUMsSUFBQUEsR0FBRyxFQUFIQSxHQUFGO0FBQU8vSyxJQUFBQSxNQUFNLEVBQU5BLE1BQVA7QUFBZW9MLElBQUFBLE1BQU0sRUFBTkEsTUFBZjtBQUF1QkMsSUFBQUEsS0FBSyxFQUFMQSxLQUF2QjtBQUE4QnRCLElBQUFBLEtBQUssRUFBTEEsS0FBOUI7QUFBcUN3QixJQUFBQSxhQUFhLEVBQWJBO0FBQXJDLEdBQVA7QUFDRDtBQUVEM00sTUFBTSxDQUFDQyxnQkFBUCxDQUNFLE1BREYsRUFFRSxZQUFZO0FBQ1Y7QUFDQSxNQUFNVyxJQUFJLEdBQUduRCxRQUFRLENBQUNtRCxJQUF0QjtBQUNBLE1BQUkwTixRQUFRLEdBQUc7QUFBRXBNLElBQUFBLEtBQUssRUFBRSxDQUFUO0FBQVlnRSxJQUFBQSxNQUFNLEVBQUU7QUFBcEIsR0FBZjtBQUNBLE1BQU0xRixRQUFRLEdBQUcsSUFBSUMsY0FBSixDQUFtQixZQUFNO0FBQ3hDLFFBQ0U2TixRQUFRLENBQUNwTSxLQUFULEtBQW1CdEIsSUFBSSxDQUFDMk4sV0FBeEIsSUFDQUQsUUFBUSxDQUFDcEksTUFBVCxLQUFvQnRGLElBQUksQ0FBQzROLFlBRjNCLEVBR0U7QUFDQTtBQUNEOztBQUNERixJQUFBQSxRQUFRLEdBQUc7QUFDVHBNLE1BQUFBLEtBQUssRUFBRXRCLElBQUksQ0FBQzJOLFdBREg7QUFFVHJJLE1BQUFBLE1BQU0sRUFBRXRGLElBQUksQ0FBQzROO0FBRkosS0FBWDtBQUtBekUsSUFBQUEsTUFBTSxDQUFDNkMsT0FBUCxDQUFlLFVBQVVqQyxLQUFWLEVBQWlCO0FBQzlCQSxNQUFBQSxLQUFLLENBQUNnQyxhQUFOO0FBQ0QsS0FGRDtBQUdELEdBZmdCLENBQWpCO0FBZ0JBbk0sRUFBQUEsUUFBUSxDQUFDRyxPQUFULENBQWlCQyxJQUFqQjtBQUNELENBdkJILEVBd0JFLEtBeEJGLEU7O0FDM1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBWixNQUFNLENBQUNDLGdCQUFQLENBQXdCLGtCQUF4QixFQUE0QyxZQUFZO0FBQ3REeEMsRUFBQUEsUUFBUSxDQUFDd0MsZ0JBQVQsQ0FBMEIsT0FBMUIsRUFBbUN3TyxPQUFuQyxFQUE0QyxLQUE1QztBQUNELENBRkQ7O0FBSUEsU0FBU0EsT0FBVCxDQUFpQnZPLEtBQWpCLEVBQXdCO0FBQ3RCLE1BQUksQ0FBQ0YsTUFBTSxDQUFDME8sWUFBUCxHQUFzQkMsV0FBM0IsRUFBd0M7QUFDdEM7QUFDQTtBQUNEOztBQUVELE1BQUkxSSxVQUFVLEdBQUdqRyxNQUFNLENBQUNvQyxnQkFBeEI7QUFDQSxNQUFJMkksVUFBVSxHQUFHO0FBQ2Y2RCxJQUFBQSxnQkFBZ0IsRUFBRTFPLEtBQUssQ0FBQzBPLGdCQURUO0FBRWZqRyxJQUFBQSxDQUFDLEVBQUV6SSxLQUFLLENBQUNzTCxPQUFOLEdBQWdCdkYsVUFGSjtBQUdmMkMsSUFBQUEsQ0FBQyxFQUFFMUksS0FBSyxDQUFDdUwsT0FBTixHQUFnQnhGLFVBSEo7QUFJZjRJLElBQUFBLGFBQWEsRUFBRTNPLEtBQUssQ0FBQ3dMLE1BQU4sQ0FBYW9ELFNBSmI7QUFLZkMsSUFBQUEsa0JBQWtCLEVBQUVDLHlCQUF5QixDQUFDOU8sS0FBSyxDQUFDd0wsTUFBUDtBQUw5QixHQUFqQjs7QUFRQSxNQUFJWiwwQkFBMEIsQ0FBQzVLLEtBQUQsRUFBUTZLLFVBQVIsQ0FBOUIsRUFBbUQ7QUFDakQ7QUFDRCxHQWpCcUIsQ0FtQnRCO0FBQ0E7OztBQUNBLE1BQUlrRSxvQkFBb0IsR0FBRzlPLE9BQU8sQ0FBQytPLEtBQVIsQ0FBY3RELElBQUksQ0FBQ0MsU0FBTCxDQUFlZCxVQUFmLENBQWQsQ0FBM0I7O0FBRUEsTUFBSWtFLG9CQUFKLEVBQTBCO0FBQ3hCL08sSUFBQUEsS0FBSyxDQUFDaVAsZUFBTjtBQUNBalAsSUFBQUEsS0FBSyxDQUFDa1AsY0FBTjtBQUNEO0FBQ0YsRUFFRDs7O0FBQ0EsU0FBU0oseUJBQVQsQ0FBbUNuVCxPQUFuQyxFQUE0QztBQUMxQyxNQUFJd1QsZUFBZSxHQUFHLENBQ3BCLEdBRG9CLEVBRXBCLE9BRm9CLEVBR3BCLFFBSG9CLEVBSXBCLFFBSm9CLEVBS3BCLFNBTG9CLEVBTXBCLE9BTm9CLEVBT3BCLE9BUG9CLEVBUXBCLFFBUm9CLEVBU3BCLFFBVG9CLEVBVXBCLFFBVm9CLEVBV3BCLFVBWG9CLEVBWXBCLE9BWm9CLENBQXRCOztBQWNBLE1BQUlBLGVBQWUsQ0FBQzNXLE9BQWhCLENBQXdCbUQsT0FBTyxDQUFDeVQsUUFBUixDQUFpQnhNLFdBQWpCLEVBQXhCLEtBQTJELENBQUMsQ0FBaEUsRUFBbUU7QUFDakUsV0FBT2pILE9BQU8sQ0FBQ2lULFNBQWY7QUFDRCxHQWpCeUMsQ0FtQjFDOzs7QUFDQSxNQUNFalQsT0FBTyxDQUFDMFQsWUFBUixDQUFxQixpQkFBckIsS0FDQTFULE9BQU8sQ0FBQzJULFlBQVIsQ0FBcUIsaUJBQXJCLEVBQXdDMU0sV0FBeEMsTUFBeUQsT0FGM0QsRUFHRTtBQUNBLFdBQU9qSCxPQUFPLENBQUNpVCxTQUFmO0FBQ0QsR0F6QnlDLENBMkIxQzs7O0FBQ0EsTUFBSWpULE9BQU8sQ0FBQ3VCLGFBQVosRUFBMkI7QUFDekIsV0FBTzRSLHlCQUF5QixDQUFDblQsT0FBTyxDQUFDdUIsYUFBVCxDQUFoQztBQUNEOztBQUVELFNBQU8sSUFBUDtBQUNELEM7Ozs7Ozs7Ozs7QUMzRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU1xUyx3QkFBd0IsR0FBRyxrQkFBakM7QUFDQSxJQUFNQyx1QkFBdUIsR0FBRyxzQkFBaEM7QUFDQSxJQUFNQyxrQkFBa0IsR0FBRyxpQkFBM0I7QUFDQSxJQUFNQyx5QkFBeUIsR0FBRyx1QkFBbEM7QUFDQSxJQUFNQyw0QkFBNEIsR0FBRyxtQkFBckM7QUFDQSxJQUFNQyxtQkFBbUIsR0FBRyx3QkFBNUI7QUFDQSxJQUFNQyxlQUFlLEdBQUcsaUJBQXhCO0FBQ0EsSUFBTUMsV0FBVyxHQUFHLGFBQXBCO0FBQ0EsSUFBTUMsYUFBYSxHQUFHLGVBQXRCO0FBQ0EsSUFBTUMsa0JBQWtCLEdBQUcsb0JBQTNCO0FBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsWUFBekI7QUFDQSxJQUFNQyxXQUFXLEdBQUcsYUFBcEI7QUFDQSxJQUFNQyxvQkFBb0IsR0FBRyxlQUE3QjtBQUNBLElBQU1DLDJCQUEyQixHQUFHLG9CQUFwQztBQUNBLElBQU1DLHVCQUF1QixHQUFHLHFCQUFoQztBQUNBLElBQU1DLDBCQUEwQixHQUFHLHNCQUFuQztBQUNBLElBQU1DLHNCQUFzQixHQUFHLDRCQUEvQjtBQUNBLElBQU1DLHVCQUF1QixHQUFHLDRCQUFoQztBQUNBLElBQU1DLHVCQUF1QixHQUFHLDRCQUFoQztBQUNBLElBQU1DLHlCQUF5QixHQUFHLDhCQUFsQztBQUNBLElBQU1DLDBCQUEwQixHQUFHLCtCQUFuQztBQUNBLElBQU1DLG9CQUFvQixHQUFHLHlCQUE3QjtBQUNBLElBQU1DLHFCQUFxQixHQUFHLDBCQUE5QjtBQUNBLElBQU1DLDZCQUE2QixHQUFHLGtDQUF0QztBQUNBLElBQU1DLDhCQUE4QixHQUFHLG1DQUF2QyxFQUNBOztBQUNBLElBQU1DLHVCQUF1QixHQUFHLENBQzlCdkIsa0JBRDhCLEVBRTlCWSx1QkFGOEIsRUFHOUJDLDBCQUg4QixFQUk5QkUsdUJBSjhCLEVBSzlCRSx5QkFMOEIsRUFNOUJFLG9CQU44QixFQU85QkUsNkJBUDhCLEVBUTlCLGVBUjhCLENBQWhDO0FBVUEsSUFBTUcsZUFBZSxHQUFHLGtCQUF4QixFQUVBOztBQUNBLElBQU1DLE1BQU0sR0FBRyxLQUFmO0FBQ0EsSUFBTUMsV0FBVyxHQUFHLEVBQXBCOztBQUVBLElBQUlDLG9CQUFKOztBQUNBLElBQUlDLG9CQUFKOztBQUNBLElBQUlDLGNBQWMsR0FBRyxDQUFDLENBQXRCO0FBQ0EsSUFBSUMsY0FBYyxHQUFHLENBQUMsQ0FBdEI7QUFDQSxJQUFJQyxxQkFBcUIsR0FBRyxLQUE1QjtBQUVBLElBQU1DLE9BQU8sR0FBRyxLQUFoQjtBQUNBLElBQU1DLGdDQUFnQyxHQUFHLEdBQXpDO0FBQ0EsSUFBTUMsNEJBQTRCLEdBQUcsSUFBckMsRUFFQTs7QUFDQSxJQUFNQyxhQUFhLEdBQUcsS0FBdEI7QUFDQSxJQUFNQyx3QkFBd0IsR0FBRztBQUMvQkMsRUFBQUEsSUFBSSxFQUFFLEdBRHlCO0FBRS9CQyxFQUFBQSxLQUFLLEVBQUUsRUFGd0I7QUFHL0JDLEVBQUFBLEdBQUcsRUFBRTtBQUgwQixDQUFqQztBQU1BLElBQU1DLGdCQUFnQixHQUFHLEVBQXpCOztBQUVBLFNBQVNDLDJCQUFULENBQXFDQyxJQUFyQyxFQUEyQ0MsaUJBQTNDLEVBQThEO0FBQzVELE1BQ0VBLGlCQUFpQixDQUFDOUMsWUFBbEIsQ0FBK0IsT0FBL0IsS0FBMkN5Qiw4QkFEN0MsRUFFRTtBQUNBO0FBQ0Q7O0FBQ0RxQixFQUFBQSxpQkFBaUIsQ0FBQ3hRLEtBQWxCLENBQXdCeVEsT0FBeEIsR0FBa0MsTUFBbEM7QUFDQUQsRUFBQUEsaUJBQWlCLENBQUN4USxLQUFsQixDQUF3Qk8sV0FBeEIsQ0FDRSxrQkFERixFQUVFLGFBRkYsRUFHRSxXQUhGO0FBS0Q7O0FBRUQsU0FBU21RLHFCQUFULENBQStCQyxHQUEvQixFQUFvQ0MsY0FBcEMsRUFBb0Q1TixTQUFwRCxFQUErRDtBQUM3RCxNQUFNNk4sTUFBTSxHQUFHLENBQUNiLGFBQUQsSUFBa0JILE9BQWpDOztBQUQ2RCxzREFFakNlLGNBRmlDO0FBQUE7O0FBQUE7QUFFN0Qsd0RBQTRDO0FBQUEsVUFBakNFLGFBQWlDO0FBQzFDLFVBQU1DLEtBQUssR0FBR0YsTUFBTSxJQUFJQyxhQUFhLENBQUNFLFlBQWQsS0FBK0JDLGlCQUF2RDtBQUNBLFVBQU1DLE9BQU8sR0FBR25CLDRCQUFoQjs7QUFDQSxVQUFJZ0IsS0FBSixFQUFXO0FBQ1RELFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0JPLFdBQXBCLENBQ0UsTUFERixnQkFFU3lDLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBRnpCLGVBRWlDcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBRmpELGVBRTJEbk4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmpCLElBRjNFLFFBR0UsV0FIRjtBQUtBWSxRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLGNBREYsWUFFSzJRLE9BRkwsR0FHRSxXQUhGO0FBS0FKLFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0JPLFdBQXBCLENBQ0UsUUFERixnQkFFU3lDLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBRnpCLGVBRWlDcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBRmpELGVBRTJEbk4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmpCLElBRjNFLFFBR0UsV0FIRjtBQUtBWSxRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLGdCQURGLFlBRUsyUSxPQUZMLEdBR0UsV0FIRjtBQUtELE9BckJELE1BcUJPO0FBQ0xKLFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0JPLFdBQXBCLENBQ0Usa0JBREYsaUJBRVV5QyxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUYxQixlQUVrQ3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZsRCxlQUU0RG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUY1RSxlQUVxRmdCLE9BRnJGLFFBR0UsV0FIRjtBQUtEO0FBQ0Y7QUFqQzREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQzlEOztBQUVELFNBQVNFLHVCQUFULENBQWlDVCxHQUFqQyxFQUFzQ0csYUFBdEMsRUFBcUQ7QUFDbkQsTUFBTUQsTUFBTSxHQUFHLENBQUNiLGFBQUQsSUFBa0JILE9BQWpDLENBRG1ELENBRW5EOztBQUNBLE1BQU1rQixLQUFLLEdBQUdGLE1BQU0sSUFBSUMsYUFBYSxDQUFDRSxZQUFkLEtBQStCQyxpQkFBdkQ7QUFDQSxNQUFNaFMsRUFBRSxHQUFHOFIsS0FBSyxHQUNaRCxhQUFhLENBQUNPLFVBQWQsSUFDQVAsYUFBYSxDQUFDTyxVQUFkLENBQXlCQSxVQUR6QixJQUVBUCxhQUFhLENBQUNPLFVBQWQsQ0FBeUJBLFVBQXpCLENBQW9DL1gsUUFBcEMsS0FBaURDLElBQUksQ0FBQ0MsWUFGdEQsSUFHQXNYLGFBQWEsQ0FBQ08sVUFBZCxDQUF5QkEsVUFBekIsQ0FBb0MzRCxZQUhwQyxHQUlFb0QsYUFBYSxDQUFDTyxVQUFkLENBQXlCQSxVQUF6QixDQUFvQzNELFlBQXBDLENBQWlELElBQWpELENBSkYsR0FLRTlTLFNBTlUsR0FPWmtXLGFBQWEsQ0FBQ08sVUFBZCxJQUNBUCxhQUFhLENBQUNPLFVBQWQsQ0FBeUIvWCxRQUF6QixLQUFzQ0MsSUFBSSxDQUFDQyxZQUQzQyxJQUVBc1gsYUFBYSxDQUFDTyxVQUFkLENBQXlCM0QsWUFGekIsR0FHQW9ELGFBQWEsQ0FBQ08sVUFBZCxDQUF5QjNELFlBQXpCLENBQXNDLElBQXRDLENBSEEsR0FJQTlTLFNBWEo7O0FBWUEsTUFBSXFFLEVBQUosRUFBUTtBQUNOLFFBQU0rRCxTQUFTLEdBQUd1TSxXQUFXLENBQUMrQixJQUFaLENBQWlCLFVBQUNDLENBQUQsRUFBTztBQUN4QyxhQUFPQSxDQUFDLENBQUN0UyxFQUFGLEtBQVNBLEVBQWhCO0FBQ0QsS0FGaUIsQ0FBbEI7O0FBR0EsUUFBSStELFNBQUosRUFBZTtBQUNiLFVBQU1rTyxPQUFPLEdBQUdwQixnQ0FBaEI7O0FBQ0EsVUFBSWlCLEtBQUosRUFBVztBQUNURCxRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLE1BREYsZ0JBRVN5QyxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUZ6QixlQUVpQ3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZqRCxlQUUyRG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUYzRSxRQUdFLFdBSEY7QUFLQVksUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQk8sV0FBcEIsQ0FDRSxjQURGLFlBRUsyUSxPQUZMLEdBR0UsV0FIRjtBQUtBSixRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLFFBREYsZ0JBRVN5QyxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUZ6QixlQUVpQ3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZqRCxlQUUyRG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUYzRSxRQUdFLFdBSEY7QUFLQVksUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQk8sV0FBcEIsQ0FDRSxnQkFERixZQUVLMlEsT0FGTCxHQUdFLFdBSEY7QUFLRCxPQXJCRCxNQXFCTztBQUNMSixRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CTyxXQUFwQixDQUNFLGtCQURGLGlCQUVVeUMsU0FBUyxDQUFDbU8sS0FBVixDQUFnQmYsR0FGMUIsZUFFa0NwTixTQUFTLENBQUNtTyxLQUFWLENBQWdCaEIsS0FGbEQsZUFFNERuTixTQUFTLENBQUNtTyxLQUFWLENBQWdCakIsSUFGNUUsZUFFcUZnQixPQUZyRixRQUdFLFdBSEY7QUFLRDtBQUNGO0FBQ0Y7QUFDRjs7QUFDRCxTQUFTTSxpQkFBVCxDQUEyQmIsR0FBM0IsRUFBZ0NjLEVBQWhDLEVBQW9DO0FBQ2xDLE1BQU05VixRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjtBQUNBLE1BQU0rVixhQUFhLEdBQUdDLG1CQUFtQixDQUFDaFcsUUFBRCxDQUF6QztBQUNBLE1BQU1rTCxDQUFDLEdBQUc0SyxFQUFFLENBQUNHLGNBQUgsQ0FBa0IsQ0FBbEIsRUFBcUJsSSxPQUEvQjtBQUNBLE1BQU01QyxDQUFDLEdBQUcySyxFQUFFLENBQUNHLGNBQUgsQ0FBa0IsQ0FBbEIsRUFBcUJqSSxPQUEvQjs7QUFDQSxNQUFJLENBQUM2RixvQkFBTCxFQUEyQjtBQUN6QjtBQUNEOztBQUNELE1BQU1xQyxTQUFTLEdBQUdDLFdBQVcsQ0FBQ25XLFFBQUQsQ0FBN0I7QUFDQSxNQUFNb1csUUFBUSxHQUFHcFcsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcUMscUJBQWQsRUFBakI7QUFDQSxNQUFJa0ssT0FBSjtBQUNBLE1BQUlDLE9BQUo7O0FBQ0EsTUFBSTBHLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLFVBQTFCLENBQUosRUFBMkM7QUFDekMyVCxJQUFBQSxPQUFPLEdBQUd3RyxTQUFTLEdBQUcsQ0FBQ0gsYUFBYSxDQUFDalEsVUFBbEIsR0FBK0JzUSxRQUFRLENBQUM3UCxJQUEzRDtBQUNBb0osSUFBQUEsT0FBTyxHQUFHdUcsU0FBUyxHQUFHLENBQUNILGFBQWEsQ0FBQ25RLFNBQWxCLEdBQThCd1EsUUFBUSxDQUFDaFEsR0FBMUQ7QUFDRCxHQUhELE1BR08sSUFBSWlRLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLG1CQUExQixDQUFKLEVBQW9EO0FBQ3pEMlQsSUFBQUEsT0FBTyxHQUFHd0csU0FBUyxHQUFHLENBQUgsR0FBTyxDQUFDSCxhQUFhLENBQUNqUSxVQUF6QztBQUNBNkosSUFBQUEsT0FBTyxHQUFHdUcsU0FBUyxHQUFHLENBQUgsR0FBT0UsUUFBUSxDQUFDaFEsR0FBbkM7QUFDRDs7QUFDRCxNQUFJbVEsY0FBSjtBQUNBLE1BQUlDLFlBQUo7QUFDQSxNQUFJQyxTQUFKLENBckJrQyxDQXNCbEM7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBSyxJQUFJalcsQ0FBQyxHQUFHb1QsV0FBVyxDQUFDdlksTUFBWixHQUFxQixDQUFsQyxFQUFxQ21GLENBQUMsSUFBSSxDQUExQyxFQUE2Q0EsQ0FBQyxFQUE5QyxFQUFrRDtBQUNoRCxRQUFNNkcsU0FBUyxHQUFHdU0sV0FBVyxDQUFDcFQsQ0FBRCxDQUE3QjtBQUNBLFFBQUlrVyxlQUFlLEdBQUcxVyxRQUFRLENBQUN3RCxjQUFULFdBQTJCNkQsU0FBUyxDQUFDL0QsRUFBckMsRUFBdEI7O0FBQ0EsUUFBSSxDQUFDb1QsZUFBTCxFQUFzQjtBQUNwQkEsTUFBQUEsZUFBZSxHQUFHN0Msb0JBQW9CLENBQUNyTSxhQUFyQixZQUF1Q0gsU0FBUyxDQUFDL0QsRUFBakQsRUFBbEI7QUFDRDs7QUFDRCxRQUFJLENBQUNvVCxlQUFMLEVBQXNCO0FBQ3BCO0FBQ0Q7O0FBQ0QsUUFBSUMsR0FBRyxHQUFHLEtBQVY7QUFDQSxRQUFNQyxrQkFBa0IsR0FBR0YsZUFBZSxDQUFDL0YsZ0JBQWhCLFlBQ3JCMEMsb0JBRHFCLEVBQTNCOztBQVZnRCx5REFhaEJ1RCxrQkFiZ0I7QUFBQTs7QUFBQTtBQWFoRCw2REFBb0Q7QUFBQSxZQUF6Q0MsaUJBQXlDO0FBQ2xELFlBQU1DLFFBQVEsR0FBR0QsaUJBQWpCO0FBQ0EsWUFBTXRRLElBQUksR0FBR3VRLFFBQVEsQ0FBQzNRLElBQVQsQ0FBY0ksSUFBZCxHQUFxQm1KLE9BQWxDO0FBQ0EsWUFBTXRKLEdBQUcsR0FBRzBRLFFBQVEsQ0FBQzNRLElBQVQsQ0FBY0MsR0FBZCxHQUFvQnVKLE9BQWhDO0FBQ0E4RyxRQUFBQSxTQUFTLEdBQUdLLFFBQVEsQ0FBQzNRLElBQXJCOztBQUNBLFlBQ0UrRSxDQUFDLElBQUkzRSxJQUFMLElBQ0EyRSxDQUFDLEdBQUczRSxJQUFJLEdBQUd1USxRQUFRLENBQUMzUSxJQUFULENBQWMxQixLQUR6QixJQUVBMEcsQ0FBQyxJQUFJL0UsR0FGTCxJQUdBK0UsQ0FBQyxHQUFHL0UsR0FBRyxHQUFHMFEsUUFBUSxDQUFDM1EsSUFBVCxDQUFjc0MsTUFKMUIsRUFLRTtBQUNBa08sVUFBQUEsR0FBRyxHQUFHLElBQU47QUFDQTtBQUNEO0FBQ0Y7QUEzQitDO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBNEJoRCxRQUFJQSxHQUFKLEVBQVM7QUFDUEosTUFBQUEsY0FBYyxHQUFHbFAsU0FBakI7QUFDQW1QLE1BQUFBLFlBQVksR0FBR0UsZUFBZjtBQUNBO0FBQ0Q7QUFDRjs7QUFDRCxNQUFJLENBQUNILGNBQUQsSUFBbUIsQ0FBQ0MsWUFBeEIsRUFBc0M7QUFDcEMsUUFBTU8sa0JBQWtCLEdBQUdsRCxvQkFBb0IsQ0FBQ2xELGdCQUFyQixZQUNyQjRDLDZCQURxQixFQUEzQjs7QUFEb0MseURBSUp3RCxrQkFKSTtBQUFBOztBQUFBO0FBSXBDLDZEQUFvRDtBQUFBLFlBQXpDbEMsaUJBQXlDO0FBQ2xERixRQUFBQSwyQkFBMkIsQ0FBQ0ssR0FBRCxFQUFNSCxpQkFBTixDQUEzQjtBQUNEO0FBTm1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBT3BDLFFBQU1tQyxpQkFBaUIsR0FBR2hQLEtBQUssQ0FBQ2dELElBQU4sQ0FDeEI2SSxvQkFBb0IsQ0FBQ2xELGdCQUFyQixZQUEwQzBDLG9CQUExQyxFQUR3QixDQUExQjs7QUFHQSwwQ0FBNEIyRCxpQkFBNUIsd0NBQStDO0FBQTFDLFVBQU03QixhQUFhLHlCQUFuQjtBQUNITSxNQUFBQSx1QkFBdUIsQ0FBQ1QsR0FBRCxFQUFNRyxhQUFOLENBQXZCO0FBQ0Q7O0FBQ0Q7QUFDRDs7QUFFRCxNQUFJcUIsWUFBWSxDQUFDekUsWUFBYixDQUEwQixZQUExQixDQUFKLEVBQTZDO0FBQzNDLFFBQUkrRCxFQUFFLENBQUNsVSxJQUFILEtBQVksV0FBaEIsRUFBNkI7QUFDM0IsVUFBTXFWLDBCQUEwQixHQUFHalAsS0FBSyxDQUFDZ0QsSUFBTixDQUNqQ3dMLFlBQVksQ0FBQzdGLGdCQUFiLFlBQWtDMEMsb0JBQWxDLEVBRGlDLENBQW5DOztBQUdBLFVBQU0yRCxtQkFBaUIsR0FBR25ELG9CQUFvQixDQUFDbEQsZ0JBQXJCLFlBQ3BCMEMsb0JBRG9CLEVBQTFCOztBQUoyQiwyREFPQzJELG1CQVBEO0FBQUE7O0FBQUE7QUFPM0IsK0RBQStDO0FBQUEsY0FBcEM3QixjQUFvQzs7QUFDN0MsY0FBSThCLDBCQUEwQixDQUFDaGMsT0FBM0IsQ0FBbUNrYSxjQUFuQyxJQUFvRCxDQUF4RCxFQUEyRDtBQUN6RE0sWUFBQUEsdUJBQXVCLENBQUNULEdBQUQsRUFBTUcsY0FBTixDQUF2QjtBQUNEO0FBQ0Y7QUFYMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFZM0JKLE1BQUFBLHFCQUFxQixDQUFDQyxHQUFELEVBQU1pQywwQkFBTixFQUFrQ1YsY0FBbEMsQ0FBckI7QUFDQSxVQUFNVyw2QkFBNkIsR0FBR1YsWUFBWSxDQUFDaFAsYUFBYixZQUNoQytMLDZCQURnQyxFQUF0Qzs7QUFHQSxVQUFNNEQscUJBQXFCLEdBQUd0RCxvQkFBb0IsQ0FBQ2xELGdCQUFyQixZQUN4QjRDLDZCQUR3QixFQUE5Qjs7QUFoQjJCLDJEQW1CSzRELHFCQW5CTDtBQUFBOztBQUFBO0FBbUIzQiwrREFBdUQ7QUFBQSxjQUE1Q3RDLGtCQUE0Qzs7QUFDckQsY0FDRSxDQUFDcUMsNkJBQUQsSUFDQXJDLGtCQUFpQixLQUFLcUMsNkJBRnhCLEVBR0U7QUFDQXZDLFlBQUFBLDJCQUEyQixDQUFDSyxHQUFELEVBQU1ILGtCQUFOLENBQTNCO0FBQ0Q7QUFDRjtBQTFCMEI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUEyQjNCLFVBQUlxQyw2QkFBSixFQUFtQztBQUNqQyxZQUFJN0MsYUFBSixFQUFtQjtBQUNqQitDLFVBQUFBLHlCQUF5QixDQUN2QnBDLEdBRHVCLEVBRXZCa0MsNkJBRnVCLEVBR3ZCWCxjQUh1QixDQUF6QjtBQUtEO0FBQ0Y7QUFDRixLQXBDRCxNQW9DTyxJQUFJVCxFQUFFLENBQUNsVSxJQUFILEtBQVksWUFBWixJQUE0QmtVLEVBQUUsQ0FBQ2xVLElBQUgsS0FBWSxVQUE1QyxFQUF3RDtBQUM3RCxVQUFNMkwsSUFBSSxHQUFHO0FBQ1g4SixRQUFBQSxXQUFXLEVBQUU5VSxNQUFNLENBQUMrVSxVQURUO0FBRVhDLFFBQUFBLFlBQVksRUFBRWhWLE1BQU0sQ0FBQ2lWLFdBRlY7QUFHWGpSLFFBQUFBLElBQUksRUFBRWtRLFNBQVMsQ0FBQ2xRLElBSEw7QUFJWDlCLFFBQUFBLEtBQUssRUFBRWdTLFNBQVMsQ0FBQ2hTLEtBSk47QUFLWDJCLFFBQUFBLEdBQUcsRUFBRXFRLFNBQVMsQ0FBQ3JRLEdBTEo7QUFNWHFDLFFBQUFBLE1BQU0sRUFBRWdPLFNBQVMsQ0FBQ2hPO0FBTlAsT0FBYjtBQVFBLFVBQU1nUCxPQUFPLEdBQUc7QUFDZHBRLFFBQUFBLFNBQVMsRUFBRWtQLGNBQWMsQ0FBQ2pULEVBRFo7QUFFZGlLLFFBQUFBLElBQUksRUFBRUE7QUFGUSxPQUFoQjs7QUFLQSxVQUNFLE9BQU9oTCxNQUFQLEtBQWtCLFdBQWxCLElBQ0EsaUJBQU9BLE1BQU0sQ0FBQ21WLE9BQWQsTUFBMEIsUUFEMUIsSUFFQW5WLE1BQU0sQ0FBQ21WLE9BQVAsQ0FBZTlWLElBQWYsS0FBd0IsVUFIMUIsRUFJRTtBQUNBK1YsUUFBQUEsVUFBVSxDQUFDQyxXQUFYLENBQXVCQyxVQUF2QixDQUFrQ0Msd0JBQWxDLEVBQTRETCxPQUE1RDtBQUNELE9BTkQsTUFNTyxJQUFJbFYsTUFBTSxDQUFDd1YsU0FBWCxFQUFzQjtBQUMzQkMsUUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZd08sY0FBYyxDQUFDalQsRUFBZixDQUFrQjJVLFFBQWxCLENBQTJCLGdCQUEzQixDQUFaOztBQUNBLFlBQUkxQixjQUFjLENBQUNqVCxFQUFmLENBQWtCM0ksTUFBbEIsQ0FBeUIsZ0JBQXpCLEtBQThDLENBQWxELEVBQXFEO0FBQ25ELGNBQUkwYixTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixVQUExQixDQUFKLEVBQTJDO0FBQ3pDMkcsWUFBQUEsT0FBTyxDQUFDd1YsZ0NBQVIsQ0FBeUMzQixjQUFjLENBQUNqVCxFQUF4RDtBQUNELFdBRkQsTUFFTyxJQUFJK1MsU0FBUyxDQUFDQyxTQUFWLENBQW9CdmEsS0FBcEIsQ0FBMEIsbUJBQTFCLENBQUosRUFBb0Q7QUFDekRvYyxZQUFBQSxNQUFNLENBQUNDLGVBQVAsQ0FBdUJGLGdDQUF2QixDQUF3REcsV0FBeEQsQ0FDRTlCLGNBQWMsQ0FBQ2pULEVBRGpCO0FBR0Q7QUFDRixTQVJELE1BUU8sSUFBSWlULGNBQWMsQ0FBQ2pULEVBQWYsQ0FBa0IzSSxNQUFsQixDQUF5QixlQUF6QixLQUE2QyxDQUFqRCxFQUFvRDtBQUN6RCxjQUFJMGIsU0FBUyxDQUFDQyxTQUFWLENBQW9CdmEsS0FBcEIsQ0FBMEIsVUFBMUIsQ0FBSixFQUEyQztBQUN6QzJHLFlBQUFBLE9BQU8sQ0FBQzRWLGtCQUFSLENBQTJCL0IsY0FBYyxDQUFDalQsRUFBMUM7QUFDRCxXQUZELE1BRU8sSUFBSStTLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLG1CQUExQixDQUFKLEVBQW9EO0FBQ3pEb2MsWUFBQUEsTUFBTSxDQUFDQyxlQUFQLENBQXVCRSxrQkFBdkIsQ0FBMENELFdBQTFDLENBQ0U5QixjQUFjLENBQUNqVCxFQURqQjtBQUdEO0FBQ0Y7QUFDRjs7QUFFRHdTLE1BQUFBLEVBQUUsQ0FBQ3BFLGVBQUg7QUFDQW9FLE1BQUFBLEVBQUUsQ0FBQ25FLGNBQUg7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBUzRHLGlCQUFULENBQTJCdkQsR0FBM0IsRUFBZ0NjLEVBQWhDLEVBQW9DO0FBQ2xDLE1BQU05VixRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjtBQUNBLE1BQU0rVixhQUFhLEdBQUdDLG1CQUFtQixDQUFDaFcsUUFBRCxDQUF6QztBQUNBLE1BQU1rTCxDQUFDLEdBQUc0SyxFQUFFLENBQUMvSCxPQUFiO0FBQ0EsTUFBTTVDLENBQUMsR0FBRzJLLEVBQUUsQ0FBQzlILE9BQWI7O0FBQ0EsTUFBSSxDQUFDNkYsb0JBQUwsRUFBMkI7QUFDekI7QUFDRDs7QUFFRCxNQUFNcUMsU0FBUyxHQUFHQyxXQUFXLENBQUNuVyxRQUFELENBQTdCO0FBQ0EsTUFBTW9XLFFBQVEsR0FBR3BXLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY3FDLHFCQUFkLEVBQWpCO0FBQ0EsTUFBSWtLLE9BQUo7QUFDQSxNQUFJQyxPQUFKOztBQUNBLE1BQUkwRyxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixVQUExQixDQUFKLEVBQTJDO0FBQ3pDMlQsSUFBQUEsT0FBTyxHQUFHd0csU0FBUyxHQUFHLENBQUNILGFBQWEsQ0FBQ2pRLFVBQWxCLEdBQStCc1EsUUFBUSxDQUFDN1AsSUFBM0Q7QUFDQW9KLElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFDSCxhQUFhLENBQUNuUSxTQUFsQixHQUE4QndRLFFBQVEsQ0FBQ2hRLEdBQTFEO0FBQ0QsR0FIRCxNQUdPLElBQUlpUSxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixtQkFBMUIsQ0FBSixFQUFvRDtBQUN6RDJULElBQUFBLE9BQU8sR0FBR3dHLFNBQVMsR0FBRyxDQUFILEdBQU8sQ0FBQ0gsYUFBYSxDQUFDalEsVUFBekM7QUFDQTZKLElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFILEdBQU9FLFFBQVEsQ0FBQ2hRLEdBQW5DO0FBQ0Q7O0FBQ0QsTUFBSW1RLGNBQUo7QUFDQSxNQUFJQyxZQUFKO0FBQ0EsTUFBSUMsU0FBSjs7QUFDQSxPQUFLLElBQUlqVyxDQUFDLEdBQUdvVCxXQUFXLENBQUN2WSxNQUFaLEdBQXFCLENBQWxDLEVBQXFDbUYsQ0FBQyxJQUFJLENBQTFDLEVBQTZDQSxDQUFDLEVBQTlDLEVBQWtEO0FBQ2hELFFBQU02RyxTQUFTLEdBQUd1TSxXQUFXLENBQUNwVCxDQUFELENBQTdCO0FBQ0EsUUFBSWtXLGVBQWUsR0FBRzFXLFFBQVEsQ0FBQ3dELGNBQVQsV0FBMkI2RCxTQUFTLENBQUMvRCxFQUFyQyxFQUF0Qjs7QUFDQSxRQUFJLENBQUNvVCxlQUFMLEVBQXNCO0FBQ3BCQSxNQUFBQSxlQUFlLEdBQUc3QyxvQkFBb0IsQ0FBQ3JNLGFBQXJCLFlBQXVDSCxTQUFTLENBQUMvRCxFQUFqRCxFQUFsQjtBQUNEOztBQUNELFFBQUksQ0FBQ29ULGVBQUwsRUFBc0I7QUFDcEI7QUFDRDs7QUFDRCxRQUFJQyxHQUFHLEdBQUcsS0FBVjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHRixlQUFlLENBQUMvRixnQkFBaEIsWUFDckIwQyxvQkFEcUIsRUFBM0I7O0FBVmdELHlEQWFoQnVELGtCQWJnQjtBQUFBOztBQUFBO0FBYWhELDZEQUFvRDtBQUFBLFlBQXpDQyxpQkFBeUM7QUFDbEQsWUFBTUMsUUFBUSxHQUFHRCxpQkFBakI7QUFDQSxZQUFNdFEsSUFBSSxHQUFHdVEsUUFBUSxDQUFDM1EsSUFBVCxDQUFjSSxJQUFkLEdBQXFCbUosT0FBbEM7QUFDQSxZQUFNdEosR0FBRyxHQUFHMFEsUUFBUSxDQUFDM1EsSUFBVCxDQUFjQyxHQUFkLEdBQW9CdUosT0FBaEM7QUFDQThHLFFBQUFBLFNBQVMsR0FBR0ssUUFBUSxDQUFDM1EsSUFBckI7O0FBQ0EsWUFDRStFLENBQUMsSUFBSTNFLElBQUwsSUFDQTJFLENBQUMsR0FBRzNFLElBQUksR0FBR3VRLFFBQVEsQ0FBQzNRLElBQVQsQ0FBYzFCLEtBRHpCLElBRUEwRyxDQUFDLElBQUkvRSxHQUZMLElBR0ErRSxDQUFDLEdBQUcvRSxHQUFHLEdBQUcwUSxRQUFRLENBQUMzUSxJQUFULENBQWNzQyxNQUoxQixFQUtFO0FBQ0FrTyxVQUFBQSxHQUFHLEdBQUcsSUFBTjtBQUNBO0FBQ0Q7QUFDRjtBQTNCK0M7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUE0QmhELFFBQUlBLEdBQUosRUFBUztBQUNQSixNQUFBQSxjQUFjLEdBQUdsUCxTQUFqQjtBQUNBbVAsTUFBQUEsWUFBWSxHQUFHRSxlQUFmO0FBQ0E7QUFDRDtBQUNGOztBQUVELE1BQUksQ0FBQ0gsY0FBRCxJQUFtQixDQUFDQyxZQUF4QixFQUFzQztBQUNwQyxRQUFNTyxrQkFBa0IsR0FBR2xELG9CQUFvQixDQUFDbEQsZ0JBQXJCLFlBQ3JCNEMsNkJBRHFCLEVBQTNCOztBQURvQyx5REFJSndELGtCQUpJO0FBQUE7O0FBQUE7QUFJcEMsNkRBQW9EO0FBQUEsWUFBekNsQyxpQkFBeUM7QUFDbERGLFFBQUFBLDJCQUEyQixDQUFDSyxHQUFELEVBQU1ILGlCQUFOLENBQTNCO0FBQ0Q7QUFObUM7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFPcEMsUUFBTW1DLGlCQUFpQixHQUFHaFAsS0FBSyxDQUFDZ0QsSUFBTixDQUN4QjZJLG9CQUFvQixDQUFDbEQsZ0JBQXJCLFlBQTBDMEMsb0JBQTFDLEVBRHdCLENBQTFCOztBQUdBLDRDQUE0QjJELGlCQUE1QiwyQ0FBK0M7QUFBMUMsVUFBTTdCLGFBQWEsMkJBQW5CO0FBQ0hNLE1BQUFBLHVCQUF1QixDQUFDVCxHQUFELEVBQU1HLGFBQU4sQ0FBdkI7QUFDRDs7QUFDRDtBQUNEOztBQUVELE1BQUlxQixZQUFZLENBQUN6RSxZQUFiLENBQTBCLFlBQTFCLENBQUosRUFBNkM7QUFDM0MsUUFBSStELEVBQUUsQ0FBQ2xVLElBQUgsS0FBWSxXQUFoQixFQUE2QjtBQUMzQixVQUFNcVYsMEJBQTBCLEdBQUdqUCxLQUFLLENBQUNnRCxJQUFOLENBQ2pDd0wsWUFBWSxDQUFDN0YsZ0JBQWIsWUFBa0MwQyxvQkFBbEMsRUFEaUMsQ0FBbkM7O0FBR0EsVUFBTTJELG1CQUFpQixHQUFHbkQsb0JBQW9CLENBQUNsRCxnQkFBckIsWUFDcEIwQyxvQkFEb0IsRUFBMUI7O0FBSjJCLDJEQU9DMkQsbUJBUEQ7QUFBQTs7QUFBQTtBQU8zQiwrREFBK0M7QUFBQSxjQUFwQzdCLGVBQW9DOztBQUM3QyxjQUFJOEIsMEJBQTBCLENBQUNoYyxPQUEzQixDQUFtQ2thLGVBQW5DLElBQW9ELENBQXhELEVBQTJEO0FBQ3pETSxZQUFBQSx1QkFBdUIsQ0FBQ1QsR0FBRCxFQUFNRyxlQUFOLENBQXZCO0FBQ0Q7QUFDRjtBQVgwQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVkzQkosTUFBQUEscUJBQXFCLENBQUNDLEdBQUQsRUFBTWlDLDBCQUFOLEVBQWtDVixjQUFsQyxDQUFyQjtBQUNBLFVBQU1XLDZCQUE2QixHQUFHVixZQUFZLENBQUNoUCxhQUFiLFlBQ2hDK0wsNkJBRGdDLEVBQXRDOztBQUdBLFVBQU00RCxxQkFBcUIsR0FBR3RELG9CQUFvQixDQUFDbEQsZ0JBQXJCLFlBQ3hCNEMsNkJBRHdCLEVBQTlCOztBQWhCMkIsMkRBbUJLNEQscUJBbkJMO0FBQUE7O0FBQUE7QUFtQjNCLCtEQUF1RDtBQUFBLGNBQTVDdEMsbUJBQTRDOztBQUNyRCxjQUNFLENBQUNxQyw2QkFBRCxJQUNBckMsbUJBQWlCLEtBQUtxQyw2QkFGeEIsRUFHRTtBQUNBdkMsWUFBQUEsMkJBQTJCLENBQUNLLEdBQUQsRUFBTUgsbUJBQU4sQ0FBM0I7QUFDRDtBQUNGO0FBMUIwQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQTJCM0IsVUFBSXFDLDZCQUFKLEVBQW1DO0FBQ2pDLFlBQUk3QyxhQUFKLEVBQW1CO0FBQ2pCK0MsVUFBQUEseUJBQXlCLENBQ3ZCcEMsR0FEdUIsRUFFdkJrQyw2QkFGdUIsRUFHdkJYLGNBSHVCLENBQXpCO0FBS0Q7QUFDRjtBQUNGLEtBcENELE1Bb0NPLElBQUlULEVBQUUsQ0FBQ2xVLElBQUgsS0FBWSxTQUFaLElBQXlCa1UsRUFBRSxDQUFDbFUsSUFBSCxLQUFZLFVBQXpDLEVBQXFEO0FBQzFELFVBQU00VyxlQUFlLEdBQUc7QUFDdEJuQixRQUFBQSxXQUFXLEVBQUU5VSxNQUFNLENBQUMrVSxVQURFO0FBRXRCQyxRQUFBQSxZQUFZLEVBQUVoVixNQUFNLENBQUMrRCxXQUZDO0FBR3RCQyxRQUFBQSxJQUFJLEVBQUVrUSxTQUFTLENBQUNsUSxJQUhNO0FBSXRCOUIsUUFBQUEsS0FBSyxFQUFFZ1MsU0FBUyxDQUFDaFMsS0FKSztBQUt0QjJCLFFBQUFBLEdBQUcsRUFBRXFRLFNBQVMsQ0FBQ3JRLEdBTE87QUFNdEJxQyxRQUFBQSxNQUFNLEVBQUVnTyxTQUFTLENBQUNoTztBQU5JLE9BQXhCO0FBU0EsVUFBTWdQLE9BQU8sR0FBRztBQUNkcFEsUUFBQUEsU0FBUyxFQUFFa1AsY0FERztBQUVkN1EsUUFBQUEsUUFBUSxFQUFFOFM7QUFGSSxPQUFoQjs7QUFLQSxVQUNFLE9BQU9qVyxNQUFQLEtBQWtCLFdBQWxCLElBQ0EsaUJBQU9BLE1BQU0sQ0FBQ21WLE9BQWQsTUFBMEIsUUFEMUIsSUFFQW5WLE1BQU0sQ0FBQ21WLE9BQVAsQ0FBZTlWLElBQWYsS0FBd0IsVUFIMUIsRUFJRTtBQUNBK1YsUUFBQUEsVUFBVSxDQUFDQyxXQUFYLENBQXVCQyxVQUF2QixDQUFrQ0Msd0JBQWxDLEVBQTRETCxPQUE1RDtBQUNELE9BTkQsTUFNTyxJQUFJbFYsTUFBTSxDQUFDd1YsU0FBWCxFQUFzQjtBQUMzQixZQUFJeEIsY0FBYyxDQUFDalQsRUFBZixDQUFrQjNJLE1BQWxCLENBQXlCLGdCQUF6QixLQUE4QyxDQUFsRCxFQUFxRDtBQUNuRCxjQUFJMGIsU0FBUyxDQUFDQyxTQUFWLENBQW9CdmEsS0FBcEIsQ0FBMEIsVUFBMUIsQ0FBSixFQUEyQztBQUN6QzJHLFlBQUFBLE9BQU8sQ0FBQ3dWLGdDQUFSLENBQXlDM0IsY0FBYyxDQUFDalQsRUFBeEQ7QUFDRCxXQUZELE1BRU8sSUFBSStTLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLG1CQUExQixDQUFKLEVBQW9EO0FBQ3pEb2MsWUFBQUEsTUFBTSxDQUFDQyxlQUFQLENBQXVCRixnQ0FBdkIsQ0FBd0RHLFdBQXhELENBQ0U5QixjQUFjLENBQUNqVCxFQURqQjtBQUdEO0FBQ0YsU0FSRCxNQVFPLElBQUlpVCxjQUFjLENBQUNqVCxFQUFmLENBQWtCM0ksTUFBbEIsQ0FBeUIsZUFBekIsS0FBNkMsQ0FBakQsRUFBb0Q7QUFDekQsY0FBSTBiLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLFVBQTFCLENBQUosRUFBMkM7QUFDekMyRyxZQUFBQSxPQUFPLENBQUM0VixrQkFBUixDQUEyQi9CLGNBQWMsQ0FBQ2pULEVBQTFDO0FBQ0QsV0FGRCxNQUVPLElBQUkrUyxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixtQkFBMUIsQ0FBSixFQUFvRDtBQUN6RG9jLFlBQUFBLE1BQU0sQ0FBQ0MsZUFBUCxDQUF1QkUsa0JBQXZCLENBQTBDRCxXQUExQyxDQUNFOUIsY0FBYyxDQUFDalQsRUFEakI7QUFHRDtBQUNGO0FBQ0Y7O0FBRUR3UyxNQUFBQSxFQUFFLENBQUNwRSxlQUFIO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQVNwSCw2QkFBVCxDQUE2QlIsS0FBN0IsRUFBb0NDLEtBQXBDLEVBQTJDZixTQUEzQyxFQUFzRDtBQUNwRCxTQUNFLENBQUNjLEtBQUssQ0FBQ3ZELElBQU4sR0FBYXdELEtBQUssQ0FBQ3JCLEtBQW5CLElBQ0VNLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIscUJBQVcsQ0FBQ0gsS0FBSyxDQUFDdkQsSUFBUCxFQUFhd0QsS0FBSyxDQUFDckIsS0FBbkIsRUFBMEJNLFNBQTFCLENBRGhDLE1BRUNlLEtBQUssQ0FBQ3hELElBQU4sR0FBYXVELEtBQUssQ0FBQ3BCLEtBQW5CLElBQ0VNLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIscUJBQVcsQ0FBQ0YsS0FBSyxDQUFDeEQsSUFBUCxFQUFhdUQsS0FBSyxDQUFDcEIsS0FBbkIsRUFBMEJNLFNBQTFCLENBSGhDLE1BSUNjLEtBQUssQ0FBQzFELEdBQU4sR0FBWTJELEtBQUssQ0FBQ3BCLE1BQWxCLElBQ0VLLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIscUJBQVcsQ0FBQ0gsS0FBSyxDQUFDMUQsR0FBUCxFQUFZMkQsS0FBSyxDQUFDcEIsTUFBbEIsRUFBMEJLLFNBQTFCLENBTGhDLE1BTUNlLEtBQUssQ0FBQzNELEdBQU4sR0FBWTBELEtBQUssQ0FBQ25CLE1BQWxCLElBQ0VLLFNBQVMsSUFBSSxDQUFiLElBQWtCaUIscUJBQVcsQ0FBQ0YsS0FBSyxDQUFDM0QsR0FBUCxFQUFZMEQsS0FBSyxDQUFDbkIsTUFBbEIsRUFBMEJLLFNBQTFCLENBUGhDLENBREY7QUFVRDs7QUFFRCxTQUFTUSxnQ0FBVCxDQUFnQ0ssS0FBaEMsRUFBdUM7QUFDckMsT0FBSyxJQUFJckosQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3FKLEtBQUssQ0FBQ3hPLE1BQTFCLEVBQWtDbUYsQ0FBQyxFQUFuQyxFQUF1QztBQUNyQyxTQUFLLElBQUlrSixDQUFDLEdBQUdsSixDQUFDLEdBQUcsQ0FBakIsRUFBb0JrSixDQUFDLEdBQUdHLEtBQUssQ0FBQ3hPLE1BQTlCLEVBQXNDcU8sQ0FBQyxFQUF2QyxFQUEyQztBQUN6QyxVQUFNSSxLQUFLLEdBQUdELEtBQUssQ0FBQ3JKLENBQUQsQ0FBbkI7QUFDQSxVQUFNdUosS0FBSyxHQUFHRixLQUFLLENBQUNILENBQUQsQ0FBbkI7O0FBQ0EsVUFBSUksS0FBSyxLQUFLQyxLQUFkLEVBQXFCO0FBQ25CLFlBQUk0SixNQUFKLEVBQVk7QUFDVnFFLFVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSw0Q0FBWjtBQUNEOztBQUNEO0FBQ0Q7O0FBQ0QsVUFBSXVDLDZCQUFtQixDQUFDUixLQUFELEVBQVFDLEtBQVIsRUFBZSxDQUFDLENBQWhCLENBQXZCLEVBQTJDO0FBQUE7QUFDekMsY0FBSXFCLEtBQUssR0FBRyxFQUFaO0FBQ0EsY0FBSUMsUUFBUSxTQUFaO0FBQ0EsY0FBSW9OLFVBQVUsU0FBZDtBQUNBLGNBQU1uTixjQUFjLEdBQUdDLHNCQUFZLENBQUN6QixLQUFELEVBQVFDLEtBQVIsQ0FBbkM7O0FBQ0EsY0FBSXVCLGNBQWMsQ0FBQ2pRLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDL0IrUCxZQUFBQSxLQUFLLEdBQUdFLGNBQVI7QUFDQUQsWUFBQUEsUUFBUSxHQUFHdkIsS0FBWDtBQUNBMk8sWUFBQUEsVUFBVSxHQUFHMU8sS0FBYjtBQUNELFdBSkQsTUFJTztBQUNMLGdCQUFNeUIsY0FBYyxHQUFHRCxzQkFBWSxDQUFDeEIsS0FBRCxFQUFRRCxLQUFSLENBQW5DOztBQUNBLGdCQUFJd0IsY0FBYyxDQUFDalEsTUFBZixHQUF3Qm1RLGNBQWMsQ0FBQ25RLE1BQTNDLEVBQW1EO0FBQ2pEK1AsY0FBQUEsS0FBSyxHQUFHRSxjQUFSO0FBQ0FELGNBQUFBLFFBQVEsR0FBR3ZCLEtBQVg7QUFDQTJPLGNBQUFBLFVBQVUsR0FBRzFPLEtBQWI7QUFDRCxhQUpELE1BSU87QUFDTHFCLGNBQUFBLEtBQUssR0FBR0ksY0FBUjtBQUNBSCxjQUFBQSxRQUFRLEdBQUd0QixLQUFYO0FBQ0EwTyxjQUFBQSxVQUFVLEdBQUczTyxLQUFiO0FBQ0Q7QUFDRjs7QUFDRCxjQUFJNkosTUFBSixFQUFZO0FBQ1YsZ0JBQU0rRSxPQUFPLEdBQUcsRUFBaEI7QUFDQUEsWUFBQUEsT0FBTyxDQUFDeGQsSUFBUixDQUFhdWQsVUFBYjtBQUNBelEsWUFBQUEsS0FBSyxDQUFDQyxTQUFOLENBQWdCL00sSUFBaEIsQ0FBcUJ1USxLQUFyQixDQUEyQmlOLE9BQTNCLEVBQW9DdE4sS0FBcEM7QUFDQXVOLFlBQUFBLGFBQWEsQ0FBQ0QsT0FBRCxDQUFiO0FBQ0Q7O0FBQ0QsY0FBSS9FLE1BQUosRUFBWTtBQUNWcUUsWUFBQUEsT0FBTyxDQUFDalEsR0FBUixtREFDNkNxRCxLQUFLLENBQUMvUCxNQURuRDtBQUdEOztBQUNELGNBQU1rTyxRQUFRLEdBQUdNLEtBQUssQ0FBQ1UsTUFBTixDQUFhLFVBQUNwRSxJQUFELEVBQVU7QUFDdEMsbUJBQU9BLElBQUksS0FBS2tGLFFBQWhCO0FBQ0QsV0FGZ0IsQ0FBakI7QUFHQXJELFVBQUFBLEtBQUssQ0FBQ0MsU0FBTixDQUFnQi9NLElBQWhCLENBQXFCdVEsS0FBckIsQ0FBMkJsQyxRQUEzQixFQUFxQzZCLEtBQXJDO0FBQ0E7QUFBQSxlQUFPNUIsZ0NBQXNCLENBQUNELFFBQUQ7QUFBN0I7QUFwQ3lDOztBQUFBO0FBcUMxQztBQUNGO0FBQ0Y7O0FBQ0QsU0FBT00sS0FBUDtBQUNEOztBQUVELFNBQVM4TyxhQUFULENBQXVCOU8sS0FBdkIsRUFBOEI7QUFDNUIsTUFBTStPLG9CQUFvQixHQUFHLEVBQTdCOztBQUQ0Qix3REFFUi9PLEtBRlE7QUFBQTs7QUFBQTtBQUU1Qiw4REFBMkI7QUFBQSxVQUFoQkMsS0FBZ0I7O0FBQUEsNERBQ0xELEtBREs7QUFBQTs7QUFBQTtBQUN6QixrRUFBMkI7QUFBQSxjQUFoQkUsS0FBZ0I7O0FBQ3pCLGNBQUlELEtBQUssS0FBS0MsS0FBZCxFQUFxQjtBQUNuQjtBQUNEOztBQUNELGNBQU04TyxJQUFJLEdBQUdELG9CQUFvQixDQUFDM2QsT0FBckIsQ0FBNkI2TyxLQUE3QixLQUF1QyxDQUFwRDtBQUNBLGNBQU1nUCxJQUFJLEdBQUdGLG9CQUFvQixDQUFDM2QsT0FBckIsQ0FBNkI4TyxLQUE3QixLQUF1QyxDQUFwRDs7QUFDQSxjQUFJLENBQUM4TyxJQUFELElBQVMsQ0FBQ0MsSUFBZCxFQUFvQjtBQUNsQixnQkFBSXhPLDZCQUFtQixDQUFDUixLQUFELEVBQVFDLEtBQVIsRUFBZSxDQUFDLENBQWhCLENBQXZCLEVBQTJDO0FBQ3pDLGtCQUFJLENBQUM4TyxJQUFMLEVBQVc7QUFDVEQsZ0JBQUFBLG9CQUFvQixDQUFDMWQsSUFBckIsQ0FBMEI0TyxLQUExQjtBQUNEOztBQUNELGtCQUFJLENBQUNnUCxJQUFMLEVBQVc7QUFDVEYsZ0JBQUFBLG9CQUFvQixDQUFDMWQsSUFBckIsQ0FBMEI2TyxLQUExQjtBQUNEOztBQUNEaU8sY0FBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLDBCQUFaO0FBQ0FpUSxjQUFBQSxPQUFPLENBQUNqUSxHQUFSLGtCQUNZK0IsS0FBSyxDQUFDMUQsR0FEbEIscUJBQ2dDMEQsS0FBSyxDQUFDbkIsTUFEdEMsbUJBQ3FEbUIsS0FBSyxDQUFDdkQsSUFEM0Qsb0JBQ3lFdUQsS0FBSyxDQUFDcEIsS0FEL0Usb0JBQzhGb0IsS0FBSyxDQUFDckYsS0FEcEcscUJBQ29IcUYsS0FBSyxDQUFDckIsTUFEMUg7QUFHQXVQLGNBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsa0JBQ1lnQyxLQUFLLENBQUMzRCxHQURsQixxQkFDZ0MyRCxLQUFLLENBQUNwQixNQUR0QyxtQkFDcURvQixLQUFLLENBQUN4RCxJQUQzRCxvQkFDeUV3RCxLQUFLLENBQUNyQixLQUQvRSxvQkFDOEZxQixLQUFLLENBQUN0RixLQURwRyxxQkFDb0hzRixLQUFLLENBQUN0QixNQUQxSDtBQUdBLGtCQUFNc1EsUUFBUSxHQUFHQyxlQUFlLENBQUNsUCxLQUFELEVBQVFDLEtBQVIsQ0FBaEM7QUFDQWlPLGNBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIscUJBQXlCZ1IsUUFBekI7QUFDQSxrQkFBTUUsUUFBUSxHQUFHQyxlQUFlLENBQUNwUCxLQUFELEVBQVFDLEtBQVIsQ0FBaEM7QUFDQWlPLGNBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIscUJBQXlCa1IsUUFBekI7QUFDRDtBQUNGO0FBQ0Y7QUE1QndCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2QjFCO0FBL0IyQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWdDNUIsTUFBSUwsb0JBQW9CLENBQUN2ZCxNQUF6QixFQUFpQztBQUMvQjJjLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsaUNBQXFDNlEsb0JBQW9CLENBQUN2ZCxNQUExRDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU2lPLDhCQUFULENBQThCTyxLQUE5QixFQUFxQ2IsU0FBckMsRUFBZ0Q7QUFDOUMsTUFBTTBCLFdBQVcsR0FBRyxJQUFJQyxHQUFKLENBQVFkLEtBQVIsQ0FBcEI7O0FBRDhDLHdEQUUzQkEsS0FGMkI7QUFBQTs7QUFBQTtBQUU5Qyw4REFBMEI7QUFBQSxVQUFmMUQsSUFBZTtBQUN4QixVQUFNd0QsU0FBUyxHQUFHeEQsSUFBSSxDQUFDMUIsS0FBTCxHQUFhLENBQWIsSUFBa0IwQixJQUFJLENBQUNzQyxNQUFMLEdBQWMsQ0FBbEQ7O0FBQ0EsVUFBSSxDQUFDa0IsU0FBTCxFQUFnQjtBQUNkLFlBQUlnSyxNQUFKLEVBQVk7QUFDVnFFLFVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSwwQkFBWjtBQUNEOztBQUNEMkMsUUFBQUEsV0FBVyxDQUFDRSxNQUFaLENBQW1CekUsSUFBbkI7QUFDQTtBQUNEOztBQVJ1Qiw0REFTYTBELEtBVGI7QUFBQTs7QUFBQTtBQVN4QixrRUFBNEM7QUFBQSxjQUFqQ2dCLHNCQUFpQzs7QUFDMUMsY0FBSTFFLElBQUksS0FBSzBFLHNCQUFiLEVBQXFDO0FBQ25DO0FBQ0Q7O0FBQ0QsY0FBSSxDQUFDSCxXQUFXLENBQUNJLEdBQVosQ0FBZ0JELHNCQUFoQixDQUFMLEVBQThDO0FBQzVDO0FBQ0Q7O0FBQ0QsY0FBSUUsc0JBQVksQ0FBQ0Ysc0JBQUQsRUFBeUIxRSxJQUF6QixFQUErQjZDLFNBQS9CLENBQWhCLEVBQTJEO0FBQ3pELGdCQUFJMkssTUFBSixFQUFZO0FBQ1ZxRSxjQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksK0JBQVo7QUFDRDs7QUFDRDJDLFlBQUFBLFdBQVcsQ0FBQ0UsTUFBWixDQUFtQnpFLElBQW5CO0FBQ0E7QUFDRDtBQUNGO0FBdkJ1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0J6QjtBQTFCNkM7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUEyQjlDLFNBQU82QixLQUFLLENBQUNnRCxJQUFOLENBQVdOLFdBQVgsQ0FBUDtBQUNEOztBQUVELFNBQVNULHFCQUFULENBQXFCMU0sQ0FBckIsRUFBd0JDLENBQXhCLEVBQTJCd0wsU0FBM0IsRUFBc0M7QUFDcEMsU0FBT3BOLElBQUksQ0FBQ2tCLEdBQUwsQ0FBU1MsQ0FBQyxHQUFHQyxDQUFiLEtBQW1Cd0wsU0FBMUI7QUFDRDs7QUFFRCxTQUFTMkMsdUJBQVQsQ0FBdUI3QixLQUF2QixFQUE4QkMsS0FBOUIsRUFBcUM7QUFDbkMsTUFBTWlDLE9BQU8sR0FBR3BRLElBQUksQ0FBQ1ksR0FBTCxDQUFTc04sS0FBSyxDQUFDdkQsSUFBZixFQUFxQndELEtBQUssQ0FBQ3hELElBQTNCLENBQWhCO0FBQ0EsTUFBTTBGLFFBQVEsR0FBR3JRLElBQUksQ0FBQ0MsR0FBTCxDQUFTaU8sS0FBSyxDQUFDcEIsS0FBZixFQUFzQnFCLEtBQUssQ0FBQ3JCLEtBQTVCLENBQWpCO0FBQ0EsTUFBTXdELE1BQU0sR0FBR3RRLElBQUksQ0FBQ1ksR0FBTCxDQUFTc04sS0FBSyxDQUFDMUQsR0FBZixFQUFvQjJELEtBQUssQ0FBQzNELEdBQTFCLENBQWY7QUFDQSxNQUFNK0YsU0FBUyxHQUFHdlEsSUFBSSxDQUFDQyxHQUFMLENBQVNpTyxLQUFLLENBQUNuQixNQUFmLEVBQXVCb0IsS0FBSyxDQUFDcEIsTUFBN0IsQ0FBbEI7QUFDQSxNQUFNeEMsSUFBSSxHQUFHO0FBQ1h3QyxJQUFBQSxNQUFNLEVBQUV3RCxTQURHO0FBRVgxRCxJQUFBQSxNQUFNLEVBQUU3TSxJQUFJLENBQUNZLEdBQUwsQ0FBUyxDQUFULEVBQVkyUCxTQUFTLEdBQUdELE1BQXhCLENBRkc7QUFHWDNGLElBQUFBLElBQUksRUFBRXlGLE9BSEs7QUFJWHRELElBQUFBLEtBQUssRUFBRXVELFFBSkk7QUFLWDdGLElBQUFBLEdBQUcsRUFBRThGLE1BTE07QUFNWHpILElBQUFBLEtBQUssRUFBRTdJLElBQUksQ0FBQ1ksR0FBTCxDQUFTLENBQVQsRUFBWXlQLFFBQVEsR0FBR0QsT0FBdkI7QUFOSSxHQUFiO0FBUUEsU0FBTzdGLElBQVA7QUFDRDs7QUFFRCxTQUFTb0Ysc0JBQVQsQ0FBc0J6QixLQUF0QixFQUE2QkMsS0FBN0IsRUFBb0M7QUFDbEMsTUFBTTJCLGVBQWUsR0FBR0MsdUJBQWEsQ0FBQzVCLEtBQUQsRUFBUUQsS0FBUixDQUFyQzs7QUFDQSxNQUFJNEIsZUFBZSxDQUFDakQsTUFBaEIsS0FBMkIsQ0FBM0IsSUFBZ0NpRCxlQUFlLENBQUNqSCxLQUFoQixLQUEwQixDQUE5RCxFQUFpRTtBQUMvRCxXQUFPLENBQUNxRixLQUFELENBQVA7QUFDRDs7QUFDRCxNQUFNRCxLQUFLLEdBQUcsRUFBZDtBQUNBO0FBQ0UsUUFBTStCLEtBQUssR0FBRztBQUNaakQsTUFBQUEsTUFBTSxFQUFFbUIsS0FBSyxDQUFDbkIsTUFERjtBQUVaRixNQUFBQSxNQUFNLEVBQUUsQ0FGSTtBQUdabEMsTUFBQUEsSUFBSSxFQUFFdUQsS0FBSyxDQUFDdkQsSUFIQTtBQUlabUMsTUFBQUEsS0FBSyxFQUFFZ0QsZUFBZSxDQUFDbkYsSUFKWDtBQUtaSCxNQUFBQSxHQUFHLEVBQUUwRCxLQUFLLENBQUMxRCxHQUxDO0FBTVozQixNQUFBQSxLQUFLLEVBQUU7QUFOSyxLQUFkO0FBUUFtSCxJQUFBQSxLQUFLLENBQUNuSCxLQUFOLEdBQWNtSCxLQUFLLENBQUNsRCxLQUFOLEdBQWNrRCxLQUFLLENBQUNyRixJQUFsQztBQUNBcUYsSUFBQUEsS0FBSyxDQUFDbkQsTUFBTixHQUFlbUQsS0FBSyxDQUFDakQsTUFBTixHQUFlaUQsS0FBSyxDQUFDeEYsR0FBcEM7O0FBQ0EsUUFBSXdGLEtBQUssQ0FBQ25ELE1BQU4sS0FBaUIsQ0FBakIsSUFBc0JtRCxLQUFLLENBQUNuSCxLQUFOLEtBQWdCLENBQTFDLEVBQTZDO0FBQzNDb0YsTUFBQUEsS0FBSyxDQUFDM08sSUFBTixDQUFXMFEsS0FBWDtBQUNEO0FBQ0Y7QUFDRDtBQUNFLFFBQU1DLEtBQUssR0FBRztBQUNabEQsTUFBQUEsTUFBTSxFQUFFK0MsZUFBZSxDQUFDdEYsR0FEWjtBQUVacUMsTUFBQUEsTUFBTSxFQUFFLENBRkk7QUFHWmxDLE1BQUFBLElBQUksRUFBRW1GLGVBQWUsQ0FBQ25GLElBSFY7QUFJWm1DLE1BQUFBLEtBQUssRUFBRWdELGVBQWUsQ0FBQ2hELEtBSlg7QUFLWnRDLE1BQUFBLEdBQUcsRUFBRTBELEtBQUssQ0FBQzFELEdBTEM7QUFNWjNCLE1BQUFBLEtBQUssRUFBRTtBQU5LLEtBQWQ7QUFRQW9ILElBQUFBLEtBQUssQ0FBQ3BILEtBQU4sR0FBY29ILEtBQUssQ0FBQ25ELEtBQU4sR0FBY21ELEtBQUssQ0FBQ3RGLElBQWxDO0FBQ0FzRixJQUFBQSxLQUFLLENBQUNwRCxNQUFOLEdBQWVvRCxLQUFLLENBQUNsRCxNQUFOLEdBQWVrRCxLQUFLLENBQUN6RixHQUFwQzs7QUFDQSxRQUFJeUYsS0FBSyxDQUFDcEQsTUFBTixLQUFpQixDQUFqQixJQUFzQm9ELEtBQUssQ0FBQ3BILEtBQU4sS0FBZ0IsQ0FBMUMsRUFBNkM7QUFDM0NvRixNQUFBQSxLQUFLLENBQUMzTyxJQUFOLENBQVcyUSxLQUFYO0FBQ0Q7QUFDRjtBQUNEO0FBQ0UsUUFBTUMsS0FBSyxHQUFHO0FBQ1puRCxNQUFBQSxNQUFNLEVBQUVtQixLQUFLLENBQUNuQixNQURGO0FBRVpGLE1BQUFBLE1BQU0sRUFBRSxDQUZJO0FBR1psQyxNQUFBQSxJQUFJLEVBQUVtRixlQUFlLENBQUNuRixJQUhWO0FBSVptQyxNQUFBQSxLQUFLLEVBQUVnRCxlQUFlLENBQUNoRCxLQUpYO0FBS1p0QyxNQUFBQSxHQUFHLEVBQUVzRixlQUFlLENBQUMvQyxNQUxUO0FBTVpsRSxNQUFBQSxLQUFLLEVBQUU7QUFOSyxLQUFkO0FBUUFxSCxJQUFBQSxLQUFLLENBQUNySCxLQUFOLEdBQWNxSCxLQUFLLENBQUNwRCxLQUFOLEdBQWNvRCxLQUFLLENBQUN2RixJQUFsQztBQUNBdUYsSUFBQUEsS0FBSyxDQUFDckQsTUFBTixHQUFlcUQsS0FBSyxDQUFDbkQsTUFBTixHQUFlbUQsS0FBSyxDQUFDMUYsR0FBcEM7O0FBQ0EsUUFBSTBGLEtBQUssQ0FBQ3JELE1BQU4sS0FBaUIsQ0FBakIsSUFBc0JxRCxLQUFLLENBQUNySCxLQUFOLEtBQWdCLENBQTFDLEVBQTZDO0FBQzNDb0YsTUFBQUEsS0FBSyxDQUFDM08sSUFBTixDQUFXNFEsS0FBWDtBQUNEO0FBQ0Y7QUFDRDtBQUNFLFFBQU1DLEtBQUssR0FBRztBQUNacEQsTUFBQUEsTUFBTSxFQUFFbUIsS0FBSyxDQUFDbkIsTUFERjtBQUVaRixNQUFBQSxNQUFNLEVBQUUsQ0FGSTtBQUdabEMsTUFBQUEsSUFBSSxFQUFFbUYsZUFBZSxDQUFDaEQsS0FIVjtBQUlaQSxNQUFBQSxLQUFLLEVBQUVvQixLQUFLLENBQUNwQixLQUpEO0FBS1p0QyxNQUFBQSxHQUFHLEVBQUUwRCxLQUFLLENBQUMxRCxHQUxDO0FBTVozQixNQUFBQSxLQUFLLEVBQUU7QUFOSyxLQUFkO0FBUUFzSCxJQUFBQSxLQUFLLENBQUN0SCxLQUFOLEdBQWNzSCxLQUFLLENBQUNyRCxLQUFOLEdBQWNxRCxLQUFLLENBQUN4RixJQUFsQztBQUNBd0YsSUFBQUEsS0FBSyxDQUFDdEQsTUFBTixHQUFlc0QsS0FBSyxDQUFDcEQsTUFBTixHQUFlb0QsS0FBSyxDQUFDM0YsR0FBcEM7O0FBQ0EsUUFBSTJGLEtBQUssQ0FBQ3RELE1BQU4sS0FBaUIsQ0FBakIsSUFBc0JzRCxLQUFLLENBQUN0SCxLQUFOLEtBQWdCLENBQTFDLEVBQTZDO0FBQzNDb0YsTUFBQUEsS0FBSyxDQUFDM08sSUFBTixDQUFXNlEsS0FBWDtBQUNEO0FBQ0Y7QUFDRCxTQUFPbEMsS0FBUDtBQUNEOztBQUVELFNBQVNvQiwyQkFBVCxDQUEyQjlFLElBQTNCLEVBQWlDK0UsQ0FBakMsRUFBb0NDLENBQXBDLEVBQXVDbkMsU0FBdkMsRUFBa0Q7QUFDaEQsU0FDRSxDQUFDN0MsSUFBSSxDQUFDSSxJQUFMLEdBQVkyRSxDQUFaLElBQWlCakIscUJBQVcsQ0FBQzlELElBQUksQ0FBQ0ksSUFBTixFQUFZMkUsQ0FBWixFQUFlbEMsU0FBZixDQUE3QixNQUNDN0MsSUFBSSxDQUFDdUMsS0FBTCxHQUFhd0MsQ0FBYixJQUFrQmpCLHFCQUFXLENBQUM5RCxJQUFJLENBQUN1QyxLQUFOLEVBQWF3QyxDQUFiLEVBQWdCbEMsU0FBaEIsQ0FEOUIsTUFFQzdDLElBQUksQ0FBQ0MsR0FBTCxHQUFXK0UsQ0FBWCxJQUFnQmxCLHFCQUFXLENBQUM5RCxJQUFJLENBQUNDLEdBQU4sRUFBVytFLENBQVgsRUFBY25DLFNBQWQsQ0FGNUIsTUFHQzdDLElBQUksQ0FBQ3dDLE1BQUwsR0FBY3dDLENBQWQsSUFBbUJsQixxQkFBVyxDQUFDOUQsSUFBSSxDQUFDd0MsTUFBTixFQUFjd0MsQ0FBZCxFQUFpQm5DLFNBQWpCLENBSC9CLENBREY7QUFNRDs7QUFFRCxTQUFTK0Isc0JBQVQsQ0FBc0JqQixLQUF0QixFQUE2QkMsS0FBN0IsRUFBb0NmLFNBQXBDLEVBQStDO0FBQzdDLFNBQ0VpQywyQkFBaUIsQ0FBQ25CLEtBQUQsRUFBUUMsS0FBSyxDQUFDeEQsSUFBZCxFQUFvQndELEtBQUssQ0FBQzNELEdBQTFCLEVBQStCNEMsU0FBL0IsQ0FBakIsSUFDQWlDLDJCQUFpQixDQUFDbkIsS0FBRCxFQUFRQyxLQUFLLENBQUNyQixLQUFkLEVBQXFCcUIsS0FBSyxDQUFDM0QsR0FBM0IsRUFBZ0M0QyxTQUFoQyxDQURqQixJQUVBaUMsMkJBQWlCLENBQUNuQixLQUFELEVBQVFDLEtBQUssQ0FBQ3hELElBQWQsRUFBb0J3RCxLQUFLLENBQUNwQixNQUExQixFQUFrQ0ssU0FBbEMsQ0FGakIsSUFHQWlDLDJCQUFpQixDQUFDbkIsS0FBRCxFQUFRQyxLQUFLLENBQUNyQixLQUFkLEVBQXFCcUIsS0FBSyxDQUFDcEIsTUFBM0IsRUFBbUNLLFNBQW5DLENBSm5CO0FBTUQ7O0FBRUQsU0FBU3lCLHlCQUFULENBQXlCWCxLQUF6QixFQUFnQ0MsS0FBaEMsRUFBdUM7QUFDckMsTUFBTXhELElBQUksR0FBRzNLLElBQUksQ0FBQ0MsR0FBTCxDQUFTaU8sS0FBSyxDQUFDdkQsSUFBZixFQUFxQndELEtBQUssQ0FBQ3hELElBQTNCLENBQWI7QUFDQSxNQUFNbUMsS0FBSyxHQUFHOU0sSUFBSSxDQUFDWSxHQUFMLENBQVNzTixLQUFLLENBQUNwQixLQUFmLEVBQXNCcUIsS0FBSyxDQUFDckIsS0FBNUIsQ0FBZDtBQUNBLE1BQU10QyxHQUFHLEdBQUd4SyxJQUFJLENBQUNDLEdBQUwsQ0FBU2lPLEtBQUssQ0FBQzFELEdBQWYsRUFBb0IyRCxLQUFLLENBQUMzRCxHQUExQixDQUFaO0FBQ0EsTUFBTXVDLE1BQU0sR0FBRy9NLElBQUksQ0FBQ1ksR0FBTCxDQUFTc04sS0FBSyxDQUFDbkIsTUFBZixFQUF1Qm9CLEtBQUssQ0FBQ3BCLE1BQTdCLENBQWY7QUFDQSxTQUFPO0FBQ0xBLElBQUFBLE1BQU0sRUFBTkEsTUFESztBQUVMRixJQUFBQSxNQUFNLEVBQUVFLE1BQU0sR0FBR3ZDLEdBRlo7QUFHTEcsSUFBQUEsSUFBSSxFQUFKQSxJQUhLO0FBSUxtQyxJQUFBQSxLQUFLLEVBQUxBLEtBSks7QUFLTHRDLElBQUFBLEdBQUcsRUFBSEEsR0FMSztBQU1MM0IsSUFBQUEsS0FBSyxFQUFFaUUsS0FBSyxHQUFHbkM7QUFOVixHQUFQO0FBUUQ7O0FBRUQsU0FBUzZDLDRCQUFULENBQ0VTLEtBREYsRUFFRWIsU0FGRixFQUdFSCxrQ0FIRixFQUlFO0FBQ0EsT0FBSyxJQUFJckksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3FKLEtBQUssQ0FBQ3hPLE1BQTFCLEVBQWtDbUYsQ0FBQyxFQUFuQyxFQUF1QztBQUFBLCtCQUM1QmtKLENBRDRCO0FBRW5DLFVBQU1JLEtBQUssR0FBR0QsS0FBSyxDQUFDckosQ0FBRCxDQUFuQjtBQUNBLFVBQU11SixLQUFLLEdBQUdGLEtBQUssQ0FBQ0gsQ0FBRCxDQUFuQjs7QUFDQSxVQUFJSSxLQUFLLEtBQUtDLEtBQWQsRUFBcUI7QUFDbkIsWUFBSTRKLE1BQUosRUFBWTtBQUNWcUUsVUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLHdDQUFaO0FBQ0Q7O0FBQ0Q7QUFDRDs7QUFDRCxVQUFNaUMscUJBQXFCLEdBQ3pCQyxxQkFBVyxDQUFDSCxLQUFLLENBQUMxRCxHQUFQLEVBQVkyRCxLQUFLLENBQUMzRCxHQUFsQixFQUF1QjRDLFNBQXZCLENBQVgsSUFDQWlCLHFCQUFXLENBQUNILEtBQUssQ0FBQ25CLE1BQVAsRUFBZW9CLEtBQUssQ0FBQ3BCLE1BQXJCLEVBQTZCSyxTQUE3QixDQUZiO0FBR0EsVUFBTWtCLHVCQUF1QixHQUMzQkQscUJBQVcsQ0FBQ0gsS0FBSyxDQUFDdkQsSUFBUCxFQUFhd0QsS0FBSyxDQUFDeEQsSUFBbkIsRUFBeUJ5QyxTQUF6QixDQUFYLElBQ0FpQixxQkFBVyxDQUFDSCxLQUFLLENBQUNwQixLQUFQLEVBQWNxQixLQUFLLENBQUNyQixLQUFwQixFQUEyQk0sU0FBM0IsQ0FGYjtBQUdBLFVBQU1tQixpQkFBaUIsR0FBRyxDQUFDdEIsa0NBQTNCO0FBQ0EsVUFBTXVCLE9BQU8sR0FDVkYsdUJBQXVCLElBQUlDLGlCQUE1QixJQUNDSCxxQkFBcUIsSUFBSSxDQUFDRSx1QkFGN0I7QUFHQSxVQUFNRyxRQUFRLEdBQUdELE9BQU8sSUFBSUUsNkJBQW1CLENBQUNSLEtBQUQsRUFBUUMsS0FBUixFQUFlZixTQUFmLENBQS9DOztBQUNBLFVBQUlxQixRQUFKLEVBQWM7QUFDWixZQUFJc0osTUFBSixFQUFZO0FBQ1ZxRSxVQUFBQSxPQUFPLENBQUNqUSxHQUFSLHdEQUNrRGlDLHFCQURsRCwwQkFDdUZFLHVCQUR2RixlQUNtSHJCLGtDQURuSDtBQUdEOztBQUNELFlBQU1VLFFBQVEsR0FBR00sS0FBSyxDQUFDVSxNQUFOLENBQWEsVUFBQ3BFLElBQUQsRUFBVTtBQUN0QyxpQkFBT0EsSUFBSSxLQUFLMkQsS0FBVCxJQUFrQjNELElBQUksS0FBSzRELEtBQWxDO0FBQ0QsU0FGZ0IsQ0FBakI7QUFHQSxZQUFNUyxxQkFBcUIsR0FBR0MseUJBQWUsQ0FBQ1gsS0FBRCxFQUFRQyxLQUFSLENBQTdDO0FBQ0FSLFFBQUFBLFFBQVEsQ0FBQ3JPLElBQVQsQ0FBY3NQLHFCQUFkO0FBQ0E7QUFBQSxhQUFPcEIsNEJBQWtCLENBQ3ZCRyxRQUR1QixFQUV2QlAsU0FGdUIsRUFHdkJILGtDQUh1QjtBQUF6QjtBQUtEO0FBckNrQzs7QUFDckMsU0FBSyxJQUFJYSxDQUFDLEdBQUdsSixDQUFDLEdBQUcsQ0FBakIsRUFBb0JrSixDQUFDLEdBQUdHLEtBQUssQ0FBQ3hPLE1BQTlCLEVBQXNDcU8sQ0FBQyxFQUF2QyxFQUEyQztBQUFBLHdCQUFsQ0EsQ0FBa0M7O0FBQUEsZ0NBT3ZDO0FBUHVDO0FBcUMxQztBQUNGOztBQUNELFNBQU9HLEtBQVA7QUFDRDs7QUFFRCxTQUFTakIsaUNBQVQsQ0FBaUNoSSxLQUFqQyxFQUF3Q2lJLGtDQUF4QyxFQUE0RTtBQUMxRSxNQUFNc1EsZ0JBQWdCLEdBQUd2WSxLQUFLLENBQUNtSSxjQUFOLEVBQXpCO0FBQ0EsU0FBT3FRLHdCQUF3QixDQUM3QkQsZ0JBRDZCLEVBRTdCdFEsa0NBRjZCLENBQS9CO0FBSUQ7O0FBRUQsU0FBU3VRLHdCQUFULENBQ0V0USxXQURGLEVBRUVELGtDQUZGLEVBR0U7QUFDQSxNQUFNRyxTQUFTLEdBQUcsQ0FBbEI7QUFDQSxNQUFNQyxhQUFhLEdBQUcsRUFBdEI7O0FBRkEsd0RBRzhCSCxXQUg5QjtBQUFBOztBQUFBO0FBR0EsOERBQTJDO0FBQUEsVUFBaENJLGVBQWdDO0FBQ3pDRCxNQUFBQSxhQUFhLENBQUMvTixJQUFkLENBQW1CO0FBQ2pCeU4sUUFBQUEsTUFBTSxFQUFFTyxlQUFlLENBQUNQLE1BRFA7QUFFakJGLFFBQUFBLE1BQU0sRUFBRVMsZUFBZSxDQUFDVCxNQUZQO0FBR2pCbEMsUUFBQUEsSUFBSSxFQUFFMkMsZUFBZSxDQUFDM0MsSUFITDtBQUlqQm1DLFFBQUFBLEtBQUssRUFBRVEsZUFBZSxDQUFDUixLQUpOO0FBS2pCdEMsUUFBQUEsR0FBRyxFQUFFOEMsZUFBZSxDQUFDOUMsR0FMSjtBQU1qQjNCLFFBQUFBLEtBQUssRUFBRXlFLGVBQWUsQ0FBQ3pFO0FBTk4sT0FBbkI7QUFRRDtBQVpEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBYUEsTUFBTTBFLFdBQVcsR0FBR0MsNEJBQWtCLENBQ3BDSCxhQURvQyxFQUVwQ0QsU0FGb0MsRUFHcENILGtDQUhvQyxDQUF0QztBQUtBLE1BQU1RLGdCQUFnQixHQUFHQyw4QkFBb0IsQ0FBQ0gsV0FBRCxFQUFjSCxTQUFkLENBQTdDO0FBQ0EsTUFBTU8sUUFBUSxHQUFHQyxnQ0FBc0IsQ0FBQ0gsZ0JBQUQsQ0FBdkM7QUFDQSxNQUFNSSxPQUFPLEdBQUcsSUFBSSxDQUFwQjs7QUFDQSxPQUFLLElBQUlDLENBQUMsR0FBR0gsUUFBUSxDQUFDbE8sTUFBVCxHQUFrQixDQUEvQixFQUFrQ3FPLENBQUMsSUFBSSxDQUF2QyxFQUEwQ0EsQ0FBQyxFQUEzQyxFQUErQztBQUM3QyxRQUFNdkQsSUFBSSxHQUFHb0QsUUFBUSxDQUFDRyxDQUFELENBQXJCO0FBQ0EsUUFBTUMsU0FBUyxHQUFHeEQsSUFBSSxDQUFDMUIsS0FBTCxHQUFhMEIsSUFBSSxDQUFDc0MsTUFBbEIsR0FBMkJnQixPQUE3Qzs7QUFDQSxRQUFJLENBQUNFLFNBQUwsRUFBZ0I7QUFDZCxVQUFJSixRQUFRLENBQUNsTyxNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQ3ZCLFlBQUlzWSxNQUFKLEVBQVk7QUFDVnFFLFVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSwyQkFBWjtBQUNEOztBQUNEd0IsUUFBQUEsUUFBUSxDQUFDSyxNQUFULENBQWdCRixDQUFoQixFQUFtQixDQUFuQjtBQUNELE9BTEQsTUFLTztBQUNMLFlBQUlpSyxNQUFKLEVBQVk7QUFDVnFFLFVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSxzREFBWjtBQUNEOztBQUNEO0FBQ0Q7QUFDRjtBQUNGOztBQUNELE1BQUk0TCxNQUFKLEVBQVk7QUFDVmdGLElBQUFBLGFBQWEsQ0FBQ3BQLFFBQUQsQ0FBYjtBQUNEOztBQUNELE1BQUlvSyxNQUFKLEVBQVk7QUFDVnFFLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsZ0NBQzBCa0IsYUFBYSxDQUFDNU4sTUFEeEMsa0JBQ3NEa08sUUFBUSxDQUFDbE8sTUFEL0Q7QUFHRDs7QUFDRCxTQUFPa08sUUFBUDtBQUNEOztBQUVELFNBQVM0TSxXQUFULENBQXFCblcsUUFBckIsRUFBK0I7QUFDN0IsU0FDRUEsUUFBUSxJQUNSQSxRQUFRLENBQUMrRSxlQURULElBRUEvRSxRQUFRLENBQUMrRSxlQUFULENBQXlCc1UsU0FBekIsQ0FBbUM1WixRQUFuQyxDQUE0Q2lVLGVBQTVDLENBSEY7QUFLRDs7QUFFRCxTQUFTc0MsbUJBQVQsQ0FBNkJoVyxRQUE3QixFQUF1QztBQUNyQyxNQUFJQSxRQUFRLENBQUM2RCxnQkFBYixFQUErQjtBQUM3QixXQUFPN0QsUUFBUSxDQUFDNkQsZ0JBQWhCO0FBQ0Q7O0FBQ0QsU0FBTzdELFFBQVEsQ0FBQ21ELElBQWhCO0FBQ0Q7O0FBRUQsU0FBU21XLGVBQVQsQ0FBeUJ0RSxHQUF6QixFQUE4QnVFLGNBQTlCLEVBQThDO0FBQzVDLE1BQU12WixRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjs7QUFFQSxNQUFJLENBQUM2VCxvQkFBTCxFQUEyQjtBQUN6QixRQUFJLENBQUNJLHFCQUFMLEVBQTRCO0FBQzFCQSxNQUFBQSxxQkFBcUIsR0FBRyxJQUF4QjtBQUNBalUsTUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjWCxnQkFBZCxDQUNFLFdBREYsRUFFRSxVQUFDc1QsRUFBRCxFQUFRO0FBQ04vQixRQUFBQSxjQUFjLEdBQUcrQixFQUFFLENBQUMvSCxPQUFwQjtBQUNBaUcsUUFBQUEsY0FBYyxHQUFHOEIsRUFBRSxDQUFDOUgsT0FBcEI7QUFDRCxPQUxILEVBTUUsS0FORjtBQVFBaE8sTUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjWCxnQkFBZCxDQUNFLFNBREYsRUFFRSxVQUFDc1QsRUFBRCxFQUFRO0FBQ04sWUFDRWxhLElBQUksQ0FBQ2tCLEdBQUwsQ0FBU2lYLGNBQWMsR0FBRytCLEVBQUUsQ0FBQy9ILE9BQTdCLElBQXdDLENBQXhDLElBQ0FuUyxJQUFJLENBQUNrQixHQUFMLENBQVNrWCxjQUFjLEdBQUc4QixFQUFFLENBQUM5SCxPQUE3QixJQUF3QyxDQUYxQyxFQUdFO0FBQ0F1SyxVQUFBQSxpQkFBaUIsQ0FBQ3ZELEdBQUQsRUFBTWMsRUFBTixDQUFqQjtBQUNEO0FBQ0YsT0FUSCxFQVVFLEtBVkY7QUFZQTlWLE1BQUFBLFFBQVEsQ0FBQ21ELElBQVQsQ0FBY1gsZ0JBQWQsQ0FDRSxXQURGLEVBRUUsVUFBQ3NULEVBQUQsRUFBUTtBQUNOeUMsUUFBQUEsaUJBQWlCLENBQUN2RCxHQUFELEVBQU1jLEVBQU4sQ0FBakI7QUFDRCxPQUpILEVBS0UsS0FMRjtBQVFBOVYsTUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjWCxnQkFBZCxDQUNFLFVBREYsRUFFRSxTQUFTZ1gsUUFBVCxDQUFrQjVSLENBQWxCLEVBQXFCO0FBQ25CaU8sUUFBQUEsaUJBQWlCLENBQUNiLEdBQUQsRUFBTXBOLENBQU4sQ0FBakI7QUFDRCxPQUpILEVBS0UsS0FMRjtBQU9EOztBQUNEaU0sSUFBQUEsb0JBQW9CLEdBQUc3VCxRQUFRLENBQUNtRSxhQUFULENBQXVCLEtBQXZCLENBQXZCOztBQUNBMFAsSUFBQUEsb0JBQW9CLENBQUN6UCxZQUFyQixDQUFrQyxJQUFsQyxFQUF3QzZPLHVCQUF4Qzs7QUFFQVksSUFBQUEsb0JBQW9CLENBQUN4UCxLQUFyQixDQUEyQk8sV0FBM0IsQ0FBdUMsZ0JBQXZDLEVBQXlELE1BQXpEOztBQUNBNUUsSUFBQUEsUUFBUSxDQUFDbUQsSUFBVCxDQUFjc04sTUFBZCxDQUFxQm9ELG9CQUFyQjtBQUNEOztBQUVELFNBQU9BLG9CQUFQO0FBQ0Q7O0FBRUQsU0FBUzRGLGlCQUFULEdBQTZCO0FBQzNCLE1BQUk1RixvQkFBSixFQUEwQjtBQUN4QkEsSUFBQUEsb0JBQW9CLENBQUNsUSxNQUFyQjs7QUFDQWtRLElBQUFBLG9CQUFvQixHQUFHLElBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTNkYsb0JBQVQsR0FBZ0M7QUFDOUJELEVBQUFBLGlCQUFpQjs7QUFDakI3RixFQUFBQSxXQUFXLENBQUNoSyxNQUFaLENBQW1CLENBQW5CLEVBQXNCZ0ssV0FBVyxDQUFDdlksTUFBbEM7QUFDRDs7QUFFTSxTQUFTc2UsZ0JBQVQsQ0FBMEJyVyxFQUExQixFQUE4QjtBQUNuQyxNQUFJOUMsQ0FBQyxHQUFHLENBQUMsQ0FBVDtBQUNBLE1BQUlvWixTQUFTLEdBQUdyWCxNQUFNLENBQUN2QyxRQUF2Qjs7QUFDQSxNQUFNcUgsU0FBUyxHQUFHdU0sV0FBVyxDQUFDK0IsSUFBWixDQUFpQixVQUFDQyxDQUFELEVBQUlsTSxDQUFKLEVBQVU7QUFDM0NsSixJQUFBQSxDQUFDLEdBQUdrSixDQUFKO0FBQ0EsV0FBT2tNLENBQUMsQ0FBQ3RTLEVBQUYsS0FBU0EsRUFBaEI7QUFDRCxHQUhpQixDQUFsQjs7QUFJQSxNQUFJK0QsU0FBUyxJQUFJN0csQ0FBQyxJQUFJLENBQWxCLElBQXVCQSxDQUFDLEdBQUdvVCxXQUFXLENBQUN2WSxNQUEzQyxFQUFtRDtBQUNqRHVZLElBQUFBLFdBQVcsQ0FBQ2hLLE1BQVosQ0FBbUJwSixDQUFuQixFQUFzQixDQUF0QjtBQUNEOztBQUNELE1BQU1xWixrQkFBa0IsR0FBR0QsU0FBUyxDQUFDcFcsY0FBVixDQUF5QkYsRUFBekIsQ0FBM0I7O0FBQ0EsTUFBSXVXLGtCQUFKLEVBQXdCO0FBQ3RCQSxJQUFBQSxrQkFBa0IsQ0FBQ2xXLE1BQW5CO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTbVcsYUFBVCxDQUF1QnBjLElBQXZCLEVBQTZCO0FBQzNCLFNBQU9BLElBQUksQ0FBQ0MsUUFBTCxLQUFrQkMsSUFBSSxDQUFDQyxZQUE5QjtBQUNEOztBQUVELFNBQVNrYyx3QkFBVCxDQUFrQzNiLE9BQWxDLEVBQTJDNGIsS0FBM0MsRUFBa0Q7QUFDaEQsTUFBSUMsS0FBSyxHQUFHLENBQUMsQ0FBYjtBQUNBLE1BQUlDLGFBQWEsR0FBRyxDQUFDLENBQXJCO0FBQ0EsTUFBSUMsa0JBQWtCLEdBQUcsS0FBekI7O0FBQ0EsT0FBSyxJQUFJM1osQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3BDLE9BQU8sQ0FBQ21DLFVBQVIsQ0FBbUJsRixNQUF2QyxFQUErQ21GLENBQUMsRUFBaEQsRUFBb0Q7QUFDbEQsUUFBTTRaLFNBQVMsR0FBR2hjLE9BQU8sQ0FBQ21DLFVBQVIsQ0FBbUJDLENBQW5CLENBQWxCO0FBQ0EsUUFBTTZaLE1BQU0sR0FBR1AsYUFBYSxDQUFDTSxTQUFELENBQTVCOztBQUNBLFFBQUlDLE1BQU0sSUFBSUYsa0JBQWQsRUFBa0M7QUFDaENELE1BQUFBLGFBQWEsSUFBSSxDQUFqQjtBQUNEOztBQUNELFFBQUlHLE1BQUosRUFBWTtBQUNWLFVBQUlELFNBQVMsS0FBS0osS0FBbEIsRUFBeUI7QUFDdkJDLFFBQUFBLEtBQUssR0FBR0MsYUFBUjtBQUNBO0FBQ0Q7QUFDRjs7QUFDREMsSUFBQUEsa0JBQWtCLEdBQUdDLFNBQVMsQ0FBQ3pjLFFBQVYsS0FBdUJDLElBQUksQ0FBQ0MsWUFBakQ7QUFDRDs7QUFDRCxTQUFPb2MsS0FBUDtBQUNEOztBQUVELFNBQVNLLHdCQUFULENBQWtDQyxLQUFsQyxFQUF5Q0MsS0FBekMsRUFBZ0Q7QUFDOUMsTUFBSUQsS0FBSyxDQUFDNWMsUUFBTixLQUFtQkMsSUFBSSxDQUFDQyxZQUF4QixJQUF3QzBjLEtBQUssS0FBS0MsS0FBdEQsRUFBNkQ7QUFDM0QsV0FBT0QsS0FBUDtBQUNEOztBQUNELE1BQUlBLEtBQUssQ0FBQzVjLFFBQU4sS0FBbUJDLElBQUksQ0FBQ0MsWUFBeEIsSUFBd0MwYyxLQUFLLENBQUM5YSxRQUFOLENBQWUrYSxLQUFmLENBQTVDLEVBQW1FO0FBQ2pFLFdBQU9ELEtBQVA7QUFDRDs7QUFDRCxNQUFJQyxLQUFLLENBQUM3YyxRQUFOLEtBQW1CQyxJQUFJLENBQUNDLFlBQXhCLElBQXdDMmMsS0FBSyxDQUFDL2EsUUFBTixDQUFlOGEsS0FBZixDQUE1QyxFQUFtRTtBQUNqRSxXQUFPQyxLQUFQO0FBQ0Q7O0FBQ0QsTUFBTUMseUJBQXlCLEdBQUcsRUFBbEM7QUFDQSxNQUFJamIsTUFBTSxHQUFHK2EsS0FBSyxDQUFDN0UsVUFBbkI7O0FBQ0EsU0FBT2xXLE1BQU0sSUFBSUEsTUFBTSxDQUFDN0IsUUFBUCxLQUFvQkMsSUFBSSxDQUFDQyxZQUExQyxFQUF3RDtBQUN0RDRjLElBQUFBLHlCQUF5QixDQUFDdmYsSUFBMUIsQ0FBK0JzRSxNQUEvQjtBQUNBQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ2tXLFVBQWhCO0FBQ0Q7O0FBQ0QsTUFBTWdGLHlCQUF5QixHQUFHLEVBQWxDO0FBQ0FsYixFQUFBQSxNQUFNLEdBQUdnYixLQUFLLENBQUM5RSxVQUFmOztBQUNBLFNBQU9sVyxNQUFNLElBQUlBLE1BQU0sQ0FBQzdCLFFBQVAsS0FBb0JDLElBQUksQ0FBQ0MsWUFBMUMsRUFBd0Q7QUFDdEQ2YyxJQUFBQSx5QkFBeUIsQ0FBQ3hmLElBQTFCLENBQStCc0UsTUFBL0I7QUFDQUEsSUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNrVyxVQUFoQjtBQUNEOztBQUNELE1BQUlpRixjQUFjLEdBQUdGLHlCQUF5QixDQUFDOUUsSUFBMUIsQ0FDbkIsVUFBQ2lGLG9CQUFELEVBQTBCO0FBQ3hCLFdBQU9GLHlCQUF5QixDQUFDemYsT0FBMUIsQ0FBa0MyZixvQkFBbEMsS0FBMkQsQ0FBbEU7QUFDRCxHQUhrQixDQUFyQjs7QUFLQSxNQUFJLENBQUNELGNBQUwsRUFBcUI7QUFDbkJBLElBQUFBLGNBQWMsR0FBR0QseUJBQXlCLENBQUMvRSxJQUExQixDQUErQixVQUFDa0Ysb0JBQUQsRUFBMEI7QUFDeEUsYUFBT0oseUJBQXlCLENBQUN4ZixPQUExQixDQUFrQzRmLG9CQUFsQyxLQUEyRCxDQUFsRTtBQUNELEtBRmdCLENBQWpCO0FBR0Q7O0FBQ0QsU0FBT0YsY0FBUDtBQUNEOztBQUVELFNBQVNHLHFCQUFULENBQStCcGQsSUFBL0IsRUFBcUM7QUFDbkMsTUFBSUEsSUFBSSxDQUFDQyxRQUFMLEtBQWtCQyxJQUFJLENBQUNDLFlBQTNCLEVBQXlDO0FBQ3ZDLFFBQU1rZCxhQUFhLEdBQ2hCcmQsSUFBSSxDQUFDc2QsU0FBTCxJQUFrQnRkLElBQUksQ0FBQ3NkLFNBQUwsQ0FBZTNWLFdBQWYsRUFBbkIsSUFDQTNILElBQUksQ0FBQ21VLFFBQUwsQ0FBY3hNLFdBQWQsRUFGRjtBQUdBLFdBQU8wVixhQUFQO0FBQ0QsR0FOa0MsQ0FPbkM7OztBQUNBLFNBQU9FLE9BQU8sQ0FBQ3ZkLElBQUQsRUFBTyxJQUFQLENBQWQ7QUFDRDs7QUFFTSxTQUFTd2QsdUJBQVQsR0FBbUM7QUFDeEMsTUFBTUMsU0FBUyxHQUFHNVksTUFBTSxDQUFDME8sWUFBUCxFQUFsQjs7QUFDQSxNQUFJLENBQUNrSyxTQUFMLEVBQWdCO0FBQ2QsV0FBT2xjLFNBQVA7QUFDRDs7QUFDRCxNQUFJa2MsU0FBUyxDQUFDakssV0FBZCxFQUEyQjtBQUN6QjhHLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSwwQkFBWjtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBQ0QsTUFBTW1jLE9BQU8sR0FBR0QsU0FBUyxDQUFDbFcsUUFBVixFQUFoQjtBQUNBLE1BQU1vVyxTQUFTLEdBQUdELE9BQU8sQ0FBQ2xXLElBQVIsR0FBZW9XLE9BQWYsQ0FBdUIsS0FBdkIsRUFBOEIsR0FBOUIsRUFBbUNBLE9BQW5DLENBQTJDLFFBQTNDLEVBQXFELEdBQXJELENBQWxCOztBQUNBLE1BQUlELFNBQVMsQ0FBQ2hnQixNQUFWLEtBQXFCLENBQXpCLEVBQTRCO0FBQzFCMmMsSUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLDJCQUFaO0FBQ0EsV0FBTzlJLFNBQVA7QUFDRDs7QUFDRCxNQUFJLENBQUNrYyxTQUFTLENBQUNJLFVBQVgsSUFBeUIsQ0FBQ0osU0FBUyxDQUFDSyxTQUF4QyxFQUFtRDtBQUNqRCxXQUFPdmMsU0FBUDtBQUNEOztBQUNELE1BQU0yQixLQUFLLEdBQ1R1YSxTQUFTLENBQUNNLFVBQVYsS0FBeUIsQ0FBekIsR0FDSU4sU0FBUyxDQUFDTyxVQUFWLENBQXFCLENBQXJCLENBREosR0FFSUMsa0JBQWtCLENBQ2hCUixTQUFTLENBQUNJLFVBRE0sRUFFaEJKLFNBQVMsQ0FBQ1MsWUFGTSxFQUdoQlQsU0FBUyxDQUFDSyxTQUhNLEVBSWhCTCxTQUFTLENBQUNVLFdBSk0sQ0FIeEI7O0FBU0EsTUFBSSxDQUFDamIsS0FBRCxJQUFVQSxLQUFLLENBQUNrYixTQUFwQixFQUErQjtBQUM3QjlELElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSw4REFBWjtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBQ0QsTUFBTThjLFNBQVMsR0FBR0MsWUFBWSxDQUFDcGIsS0FBRCxFQUFRa2EscUJBQVIsRUFBK0JtQixVQUEvQixDQUE5Qjs7QUFDQSxNQUFJLENBQUNGLFNBQUwsRUFBZ0I7QUFDZC9ELElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSxpQ0FBWjtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBRUQsTUFBSTBVLE1BQU0sSUFBSVUsYUFBZCxFQUE2QjtBQUMzQixRQUFNNkgsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQ25ILEdBQUcsQ0FBQ2hWLFFBQUwsRUFBZStiLFNBQWYsQ0FBdEM7O0FBQ0EsUUFBSUcsYUFBSixFQUFtQjtBQUNqQixVQUNFQSxhQUFhLENBQUNqYixXQUFkLEtBQThCTCxLQUFLLENBQUNLLFdBQXBDLElBQ0FpYixhQUFhLENBQUMvYSxTQUFkLEtBQTRCUCxLQUFLLENBQUNPLFNBRGxDLElBRUErYSxhQUFhLENBQUNsYixjQUFkLEtBQWlDSixLQUFLLENBQUNJLGNBRnZDLElBR0FrYixhQUFhLENBQUNoYixZQUFkLEtBQStCTixLQUFLLENBQUNNLFlBSnZDLEVBS0U7QUFDQThXLFFBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSw0Q0FBWjtBQUNELE9BUEQsTUFPTztBQUNMaVEsUUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLDJDQUFaO0FBQ0FxVSxRQUFBQSxTQUFTLENBQ1AsV0FETyxFQUVQakIsU0FBUyxDQUFDSSxVQUZILEVBR1BKLFNBQVMsQ0FBQ1MsWUFISCxFQUlQVCxTQUFTLENBQUNLLFNBSkgsRUFLUEwsU0FBUyxDQUFDVSxXQUxILEVBTVBRLGNBTk8sQ0FBVDtBQVFBRCxRQUFBQSxTQUFTLENBQ1AsOEJBRE8sRUFFUHhiLEtBQUssQ0FBQ0ksY0FGQyxFQUdQSixLQUFLLENBQUNLLFdBSEMsRUFJUEwsS0FBSyxDQUFDTSxZQUpDLEVBS1BOLEtBQUssQ0FBQ08sU0FMQyxFQU1Qa2IsY0FOTyxDQUFUO0FBUUFELFFBQUFBLFNBQVMsQ0FDUCxnQkFETyxFQUVQRixhQUFhLENBQUNsYixjQUZQLEVBR1BrYixhQUFhLENBQUNqYixXQUhQLEVBSVBpYixhQUFhLENBQUNoYixZQUpQLEVBS1BnYixhQUFhLENBQUMvYSxTQUxQLEVBTVBrYixjQU5PLENBQVQ7QUFRRDtBQUNGLEtBbkNELE1BbUNPO0FBQ0xyRSxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksb0NBQVo7QUFDRDtBQUNGLEdBeENELE1Bd0NPLENBQ047O0FBRUQsU0FBTztBQUNMVCxJQUFBQSxTQUFTLEVBQUVnVixrQkFBa0IsQ0FBQ1AsU0FBRCxDQUR4QjtBQUVMbmhCLElBQUFBLElBQUksRUFBRTtBQUNKeU0sTUFBQUEsU0FBUyxFQUFFK1Q7QUFEUDtBQUZELEdBQVA7QUFNRDs7QUFFRCxTQUFTbUIsZ0JBQVQsQ0FBMEI3YyxFQUExQixFQUE4QjtBQUM1QixNQUFJOGMsYUFBSjtBQUNBLE1BQU1sWixFQUFFLEdBQUc1RCxFQUFFLENBQUNxUyxZQUFILENBQWdCLElBQWhCLENBQVg7O0FBQ0EsTUFBSXpPLEVBQUUsSUFBSW1RLHVCQUF1QixDQUFDeFksT0FBeEIsQ0FBZ0NxSSxFQUFoQyxLQUF1QyxDQUFqRCxFQUFvRDtBQUNsRDBVLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSwwQkFBMEJ6RSxFQUF0QztBQUNBa1osSUFBQUEsYUFBYSxHQUFHbFosRUFBaEI7QUFDRDs7QUFDRCxNQUFJbVosZ0JBQUo7O0FBUDRCLHdEQVFUaEosdUJBUlM7QUFBQTs7QUFBQTtBQVE1Qiw4REFBNEM7QUFBQSxVQUFqQzdGLElBQWlDOztBQUMxQyxVQUFJbE8sRUFBRSxDQUFDMlosU0FBSCxDQUFhNVosUUFBYixDQUFzQm1PLElBQXRCLENBQUosRUFBaUM7QUFDL0JvSyxRQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksNkJBQTZCNkYsSUFBekM7QUFDQTZPLFFBQUFBLGdCQUFnQixHQUFHN08sSUFBbkI7QUFDQTtBQUNEO0FBQ0Y7QUFkMkI7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFlNUIsTUFBSTRPLGFBQWEsSUFBSUMsZ0JBQXJCLEVBQXVDO0FBQ3JDLFdBQU8sSUFBUDtBQUNEOztBQUVELFNBQU8sS0FBUDtBQUNEOztBQUVELFNBQVN4QixPQUFULENBQWlCdmQsSUFBakIsRUFBdUJnZixTQUF2QixFQUFrQztBQUNoQyxNQUFJaGYsSUFBSSxDQUFDQyxRQUFMLEtBQWtCQyxJQUFJLENBQUNDLFlBQTNCLEVBQXlDO0FBQ3ZDLFdBQU8sRUFBUDtBQUNEOztBQUVELE1BQU04ZSxLQUFLLEdBQUcsRUFBZDtBQUNBLE1BQUlDLFdBQVcsR0FBR2xmLElBQWxCOztBQUNBLFNBQU9rZixXQUFQLEVBQW9CO0FBQ2xCLFFBQU1DLElBQUksR0FBR0MsWUFBWSxDQUFDRixXQUFELEVBQWMsQ0FBQyxDQUFDRixTQUFoQixFQUEyQkUsV0FBVyxLQUFLbGYsSUFBM0MsQ0FBekI7O0FBQ0EsUUFBSSxDQUFDbWYsSUFBTCxFQUFXO0FBQ1QsWUFEUyxDQUNGO0FBQ1I7O0FBQ0RGLElBQUFBLEtBQUssQ0FBQ3poQixJQUFOLENBQVcyaEIsSUFBSSxDQUFDM1YsS0FBaEI7O0FBQ0EsUUFBSTJWLElBQUksQ0FBQ0gsU0FBVCxFQUFvQjtBQUNsQjtBQUNEOztBQUNERSxJQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ2xILFVBQTFCO0FBQ0Q7O0FBQ0RpSCxFQUFBQSxLQUFLLENBQUNoUCxPQUFOO0FBQ0EsU0FBT2dQLEtBQUssQ0FBQ3ZVLElBQU4sQ0FBVyxLQUFYLENBQVA7QUFDRCxFQUNEO0FBQ0E7OztBQUNBLFNBQVMwVSxZQUFULENBQXNCcGYsSUFBdEIsRUFBNEJnZixTQUE1QixFQUF1Q0ssWUFBdkMsRUFBcUQ7QUFDbkQsV0FBU0MseUJBQVQsQ0FBbUNDLEVBQW5DLEVBQXVDO0FBQ3JDLFFBQU1DLGNBQWMsR0FBR0QsRUFBRSxDQUFDbEwsWUFBSCxDQUFnQixPQUFoQixDQUF2Qjs7QUFDQSxRQUFJLENBQUNtTCxjQUFMLEVBQXFCO0FBQ25CLGFBQU8sRUFBUDtBQUNEOztBQUVELFdBQU9BLGNBQWMsQ0FDbEJDLEtBREksQ0FDRSxNQURGLEVBRUo1UyxNQUZJLENBRUc2UyxPQUZILEVBR0pqZ0IsR0FISSxDQUdBLFVBQUNrZ0IsRUFBRCxFQUFRO0FBQ1g7QUFDQSxhQUFPLE1BQU1BLEVBQWI7QUFDRCxLQU5JLENBQVA7QUFPRDs7QUFFRCxXQUFTQyxVQUFULENBQW9CQyxHQUFwQixFQUF5QjtBQUN2QixXQUFPLE1BQU1DLHdCQUF3QixDQUFDRCxHQUFELENBQXJDO0FBQ0Q7O0FBRUQsV0FBU0Msd0JBQVQsQ0FBa0NDLEtBQWxDLEVBQXlDO0FBQ3ZDLFFBQUlDLGVBQWUsQ0FBQ0QsS0FBRCxDQUFuQixFQUE0QjtBQUMxQixhQUFPQSxLQUFQO0FBQ0Q7O0FBRUQsUUFBTUUsaUJBQWlCLEdBQUcsc0JBQXNCQyxJQUF0QixDQUEyQkgsS0FBM0IsQ0FBMUI7QUFDQSxRQUFNSSxTQUFTLEdBQUdKLEtBQUssQ0FBQ3BpQixNQUFOLEdBQWUsQ0FBakM7QUFDQSxXQUFPb2lCLEtBQUssQ0FBQ25DLE9BQU4sQ0FBYyxJQUFkLEVBQW9CLFVBQVV3QyxDQUFWLEVBQWFDLEVBQWIsRUFBaUI7QUFDMUMsYUFBUUosaUJBQWlCLElBQUlJLEVBQUUsS0FBSyxDQUE3QixJQUFtQyxDQUFDQyxjQUFjLENBQUNGLENBQUQsQ0FBbEQsR0FDSEcsZUFBZSxDQUFDSCxDQUFELEVBQUlDLEVBQUUsS0FBS0YsU0FBWCxDQURaLEdBRUhDLENBRko7QUFHRCxLQUpNLENBQVA7QUFLRDs7QUFFRCxXQUFTRyxlQUFULENBQXlCSCxDQUF6QixFQUE0QkksTUFBNUIsRUFBb0M7QUFDbEMsV0FBTyxPQUFPQyxTQUFTLENBQUNMLENBQUQsQ0FBaEIsSUFBdUJJLE1BQU0sR0FBRyxFQUFILEdBQVEsR0FBckMsQ0FBUDtBQUNEOztBQUVELFdBQVNDLFNBQVQsQ0FBbUJMLENBQW5CLEVBQXNCO0FBQ3BCLFFBQUlNLE9BQU8sR0FBR04sQ0FBQyxDQUFDTyxVQUFGLENBQWEsQ0FBYixFQUFnQnBaLFFBQWhCLENBQXlCLEVBQXpCLENBQWQ7O0FBQ0EsUUFBSW1aLE9BQU8sQ0FBQy9pQixNQUFSLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCK2lCLE1BQUFBLE9BQU8sR0FBRyxNQUFNQSxPQUFoQjtBQUNEOztBQUNELFdBQU9BLE9BQVA7QUFDRDs7QUFFRCxXQUFTSixjQUFULENBQXdCRixDQUF4QixFQUEyQjtBQUN6QixRQUFJLGdCQUFnQkYsSUFBaEIsQ0FBcUJFLENBQXJCLENBQUosRUFBNkI7QUFDM0IsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBT0EsQ0FBQyxDQUFDTyxVQUFGLENBQWEsQ0FBYixLQUFtQixJQUExQjtBQUNEOztBQUVELFdBQVNYLGVBQVQsQ0FBeUJ4VyxLQUF6QixFQUFnQztBQUM5QixXQUFPLDhCQUE4QjBXLElBQTlCLENBQW1DMVcsS0FBbkMsQ0FBUDtBQUNEOztBQUVELE1BQUl4SixJQUFJLENBQUNDLFFBQUwsS0FBa0JDLElBQUksQ0FBQ0MsWUFBM0IsRUFBeUM7QUFDdkMsV0FBT29CLFNBQVA7QUFDRDs7QUFDRCxNQUFNOGIsYUFBYSxHQUNoQnJkLElBQUksQ0FBQ3NkLFNBQUwsSUFBa0J0ZCxJQUFJLENBQUNzZCxTQUFMLENBQWUzVixXQUFmLEVBQW5CLElBQ0EzSCxJQUFJLENBQUNtVSxRQUFMLENBQWN4TSxXQUFkLEVBRkY7QUFJQSxNQUFNakgsT0FBTyxHQUFHVixJQUFoQjtBQUVBLE1BQU00RixFQUFFLEdBQUdsRixPQUFPLENBQUMyVCxZQUFSLENBQXFCLElBQXJCLENBQVg7O0FBRUEsTUFBSTJLLFNBQUosRUFBZTtBQUNiLFFBQUlwWixFQUFKLEVBQVE7QUFDTixhQUFPO0FBQ0xvWixRQUFBQSxTQUFTLEVBQUUsSUFETjtBQUVMeFYsUUFBQUEsS0FBSyxFQUFFb1csVUFBVSxDQUFDaGEsRUFBRDtBQUZaLE9BQVA7QUFJRDs7QUFDRCxRQUNFeVgsYUFBYSxLQUFLLE1BQWxCLElBQ0FBLGFBQWEsS0FBSyxNQURsQixJQUVBQSxhQUFhLEtBQUssTUFIcEIsRUFJRTtBQUNBLGFBQU87QUFDTDJCLFFBQUFBLFNBQVMsRUFBRSxJQUROO0FBRUx4VixRQUFBQSxLQUFLLEVBQUU2VCxhQUZGLENBRWlCOztBQUZqQixPQUFQO0FBSUQ7QUFDRjs7QUFFRCxNQUFNbEosUUFBUSxHQUFHa0osYUFBakIsQ0F2Rm1ELENBdUZuQjs7QUFDaEMsTUFBSXpYLEVBQUosRUFBUTtBQUNOLFdBQU87QUFDTG9aLE1BQUFBLFNBQVMsRUFBRSxJQUROO0FBRUx4VixNQUFBQSxLQUFLLEVBQUUySyxRQUFRLEdBQUd5TCxVQUFVLENBQUNoYSxFQUFEO0FBRnZCLEtBQVA7QUFJRDs7QUFFRCxNQUFNOUQsTUFBTSxHQUFHOUIsSUFBSSxDQUFDZ1ksVUFBcEI7O0FBRUEsTUFBSSxDQUFDbFcsTUFBRCxJQUFXQSxNQUFNLENBQUM3QixRQUFQLEtBQW9CQyxJQUFJLENBQUMwZ0IsYUFBeEMsRUFBdUQ7QUFDckQsV0FBTztBQUNMNUIsTUFBQUEsU0FBUyxFQUFFLElBRE47QUFFTHhWLE1BQUFBLEtBQUssRUFBRTJLO0FBRkYsS0FBUDtBQUlEOztBQUVELE1BQU0wTSwyQkFBMkIsR0FBR3ZCLHlCQUF5QixDQUFDNWUsT0FBRCxDQUE3RDtBQUVBLE1BQU1vZ0IsMEJBQTBCLEdBQUcsRUFBbkMsQ0ExR21ELENBMEdaOztBQUN2Q0QsRUFBQUEsMkJBQTJCLENBQUNwUCxPQUE1QixDQUFvQyxVQUFDc1AsT0FBRCxFQUFhO0FBQy9DLFFBQUlELDBCQUEwQixDQUFDdmpCLE9BQTNCLENBQW1Dd2pCLE9BQW5DLElBQThDLENBQWxELEVBQXFEO0FBQ25ERCxNQUFBQSwwQkFBMEIsQ0FBQ3RqQixJQUEzQixDQUFnQ3VqQixPQUFoQztBQUNEO0FBQ0YsR0FKRDtBQU1BLE1BQUlDLGVBQWUsR0FBRyxLQUF0QjtBQUNBLE1BQUlDLGFBQWEsR0FBRyxLQUFwQjtBQUNBLE1BQUlDLFFBQVEsR0FBRyxDQUFDLENBQWhCO0FBQ0EsTUFBSUMsWUFBWSxHQUFHLENBQUMsQ0FBcEI7QUFDQSxNQUFNQyxRQUFRLEdBQUd0ZixNQUFNLENBQUNvUixRQUF4Qjs7QUFySG1ELCtCQXdIN0NwUSxDQXhINkM7QUE0SGpELFFBQU12QyxPQUFPLEdBQUc2Z0IsUUFBUSxDQUFDdGUsQ0FBRCxDQUF4Qjs7QUFDQSxRQUFJdkMsT0FBTyxDQUFDTixRQUFSLEtBQXFCQyxJQUFJLENBQUNDLFlBQTlCLEVBQTRDO0FBQzFDO0FBQ0Q7O0FBQ0RnaEIsSUFBQUEsWUFBWSxJQUFJLENBQWhCOztBQUNBLFFBQUk1Z0IsT0FBTyxLQUFLUCxJQUFoQixFQUFzQjtBQUNwQmtoQixNQUFBQSxRQUFRLEdBQUdDLFlBQVg7QUFDQTtBQUNEOztBQUNELFFBQUlGLGFBQUosRUFBbUI7QUFDakI7QUFDRCxLQXZJZ0QsQ0F5SWpEOzs7QUFDQSxRQUFNSSxXQUFXLEdBQ2Q5Z0IsT0FBTyxDQUFDK2MsU0FBUixJQUFxQi9jLE9BQU8sQ0FBQytjLFNBQVIsQ0FBa0IzVixXQUFsQixFQUF0QixJQUNBcEgsT0FBTyxDQUFDNFQsUUFBUixDQUFpQnhNLFdBQWpCLEVBRkY7O0FBR0EsUUFBSTBaLFdBQVcsS0FBS2xOLFFBQXBCLEVBQThCO0FBQzVCO0FBQ0Q7O0FBQ0Q2TSxJQUFBQSxlQUFlLEdBQUcsSUFBbEI7QUFFQSxRQUFNTSxhQUFhLEdBQUcsRUFBdEI7QUFDQVIsSUFBQUEsMEJBQTBCLENBQUNyUCxPQUEzQixDQUFtQyxVQUFDc1AsT0FBRCxFQUFhO0FBQzlDTyxNQUFBQSxhQUFhLENBQUM5akIsSUFBZCxDQUFtQnVqQixPQUFuQjtBQUNELEtBRkQ7QUFHQSxRQUFJUSxpQkFBaUIsR0FBR0QsYUFBYSxDQUFDM2pCLE1BQXRDOztBQUVBLFFBQUk0akIsaUJBQWlCLEtBQUssQ0FBMUIsRUFBNkI7QUFDM0JOLE1BQUFBLGFBQWEsR0FBRyxJQUFoQjtBQUNBO0FBQ0Q7O0FBQ0QsUUFBTU8sdUJBQXVCLEdBQUdsQyx5QkFBeUIsQ0FBQy9lLE9BQUQsQ0FBekQ7QUFDQSxRQUFNa2hCLHNCQUFzQixHQUFHLEVBQS9CLENBN0ppRCxDQTZKZDs7QUFDbkNELElBQUFBLHVCQUF1QixDQUFDL1AsT0FBeEIsQ0FBZ0MsVUFBQ3NQLE9BQUQsRUFBYTtBQUMzQyxVQUFJVSxzQkFBc0IsQ0FBQ2xrQixPQUF2QixDQUErQndqQixPQUEvQixJQUEwQyxDQUE5QyxFQUFpRDtBQUMvQ1UsUUFBQUEsc0JBQXNCLENBQUNqa0IsSUFBdkIsQ0FBNEJ1akIsT0FBNUI7QUFDRDtBQUNGLEtBSkQ7O0FBTUEsOENBQTJCVSxzQkFBM0IsNkNBQW1EO0FBQTlDLFVBQU1DLFlBQVksNkJBQWxCO0FBQ0gsVUFBTUMsR0FBRyxHQUFHTCxhQUFhLENBQUMvakIsT0FBZCxDQUFzQm1rQixZQUF0QixDQUFaOztBQUNBLFVBQUlDLEdBQUcsR0FBRyxDQUFWLEVBQWE7QUFDWDtBQUNEOztBQUVETCxNQUFBQSxhQUFhLENBQUNwVixNQUFkLENBQXFCeVYsR0FBckIsRUFBMEIsQ0FBMUIsRUFOaUQsQ0FNbkI7O0FBRTlCLFVBQUksQ0FBQyxHQUFFSixpQkFBUCxFQUEwQjtBQUN4Qk4sUUFBQUEsYUFBYSxHQUFHLElBQWhCO0FBQ0E7QUFDRDtBQUNGO0FBaExnRDs7QUF1SG5ELE9BQ0UsSUFBSW5lLENBQUMsR0FBRyxDQURWLEVBRUUsQ0FBQ29lLFFBQVEsS0FBSyxDQUFDLENBQWQsSUFBbUIsQ0FBQ0QsYUFBckIsS0FBdUNuZSxDQUFDLEdBQUdzZSxRQUFRLENBQUN6akIsTUFGdEQsRUFHRSxFQUFFbUYsQ0FISixFQUlFO0FBQUEsdUJBSElBLENBR0o7O0FBQUEsOEJBK0JFO0FBdUJIOztBQUVELE1BQUk4ZSxNQUFNLEdBQUd6TixRQUFiOztBQUNBLE1BQ0VrTCxZQUFZLElBQ1psTCxRQUFRLEtBQUssT0FEYixJQUVBelQsT0FBTyxDQUFDMlQsWUFBUixDQUFxQixNQUFyQixDQUZBLElBR0EsQ0FBQzNULE9BQU8sQ0FBQzJULFlBQVIsQ0FBcUIsSUFBckIsQ0FIRCxJQUlBLENBQUMzVCxPQUFPLENBQUMyVCxZQUFSLENBQXFCLE9BQXJCLENBTEgsRUFNRTtBQUNBdU4sSUFBQUEsTUFBTSxJQUFJLFlBQVlsaEIsT0FBTyxDQUFDMlQsWUFBUixDQUFxQixNQUFyQixDQUFaLEdBQTJDLElBQXJEO0FBQ0Q7O0FBQ0QsTUFBSTRNLGFBQUosRUFBbUI7QUFDakJXLElBQUFBLE1BQU0sSUFBSSxpQkFBaUJWLFFBQVEsR0FBRyxDQUE1QixJQUFpQyxHQUEzQztBQUNELEdBRkQsTUFFTyxJQUFJRixlQUFKLEVBQXFCO0FBQUEsMERBQ0NGLDBCQUREO0FBQUE7O0FBQUE7QUFDMUIsZ0VBQXVEO0FBQUEsWUFBNUNlLFlBQTRDO0FBQ3JERCxRQUFBQSxNQUFNLElBQUksTUFBTTlCLHdCQUF3QixDQUFDK0IsWUFBWSxDQUFDQyxNQUFiLENBQW9CLENBQXBCLENBQUQsQ0FBeEM7QUFDRDtBQUh5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSTNCOztBQUVELFNBQU87QUFDTDlDLElBQUFBLFNBQVMsRUFBRSxLQUROO0FBRUx4VixJQUFBQSxLQUFLLEVBQUVvWTtBQUZGLEdBQVA7QUFJRDs7QUFFRCxTQUFTckQsVUFBVCxDQUFvQnZlLElBQXBCLEVBQTBCO0FBQ3hCO0FBQ0EsTUFBSUEsSUFBSSxDQUFDQyxRQUFMLEtBQWtCQyxJQUFJLENBQUNDLFlBQTNCLEVBQXlDO0FBQ3ZDLFdBQU9vQixTQUFQO0FBQ0Q7O0FBRUQsTUFBSXdnQixHQUFHLEdBQUcsRUFBVjtBQUVBLE1BQUlDLGNBQWMsR0FBR2hpQixJQUFyQjs7QUFDQSxTQUNFZ2lCLGNBQWMsQ0FBQ2hLLFVBQWYsSUFDQWdLLGNBQWMsQ0FBQ2hLLFVBQWYsQ0FBMEIvWCxRQUExQixLQUF1Q0MsSUFBSSxDQUFDQyxZQUY5QyxFQUdFO0FBQ0EsUUFBTThoQixXQUFXLEdBQUdwRCxnQkFBZ0IsQ0FBQ21ELGNBQUQsQ0FBcEM7O0FBQ0EsUUFBSSxDQUFDQyxXQUFMLEVBQWtCO0FBQ2hCLFVBQU1DLDRCQUE0QixHQUFHRixjQUFjLENBQUNoSyxVQUFmLENBQTBCOUUsUUFBL0Q7QUFDQSxVQUFJaVAsbUJBQW1CLEdBQUcsQ0FBQyxDQUEzQjs7QUFDQSxXQUFLLElBQUlyZixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHb2YsNEJBQTRCLENBQUN2a0IsTUFBakQsRUFBeURtRixDQUFDLEVBQTFELEVBQThEO0FBQzVELFlBQUlrZixjQUFjLEtBQUtFLDRCQUE0QixDQUFDcGYsQ0FBRCxDQUFuRCxFQUF3RDtBQUN0RHFmLFVBQUFBLG1CQUFtQixHQUFHcmYsQ0FBdEI7QUFDQTtBQUNEO0FBQ0Y7O0FBQ0QsVUFBSXFmLG1CQUFtQixJQUFJLENBQTNCLEVBQThCO0FBQzVCLFlBQU1DLFFBQVEsR0FBRyxDQUFDRCxtQkFBbUIsR0FBRyxDQUF2QixJQUE0QixDQUE3QztBQUNBSixRQUFBQSxHQUFHLEdBQ0RLLFFBQVEsSUFDUEosY0FBYyxDQUFDcGMsRUFBZixHQUFvQixNQUFNb2MsY0FBYyxDQUFDcGMsRUFBckIsR0FBMEIsR0FBOUMsR0FBb0QsRUFEN0MsQ0FBUixJQUVDbWMsR0FBRyxDQUFDcGtCLE1BQUosR0FBYSxNQUFNb2tCLEdBQW5CLEdBQXlCLEVBRjFCLENBREY7QUFJRDtBQUNGOztBQUNEQyxJQUFBQSxjQUFjLEdBQUdBLGNBQWMsQ0FBQ2hLLFVBQWhDO0FBQ0Q7O0FBRUQsU0FBTyxNQUFNK0osR0FBYjtBQUNEOztBQUVELFNBQVNNLGdCQUFULENBQTBCelksU0FBMUIsRUFBcUNrTyxLQUFyQyxFQUE0Q3dLLGtCQUE1QyxFQUFnRXBlLElBQWhFLEVBQXNFO0FBQ3BFLE1BQU1tYSxTQUFTLEdBQUdrRSxrQkFBa0IsQ0FBQzNZLFNBQUQsQ0FBcEM7QUFDQSxNQUFNNFksU0FBUyxhQUFNbkUsU0FBUyxDQUFDMEQsR0FBaEIsU0FBc0IxRCxTQUFTLENBQUNvRSxnQ0FBaEMsU0FBbUVwRSxTQUFTLENBQUNxRSxnQ0FBN0UsU0FBZ0hyRSxTQUFTLENBQUM5YSxXQUExSCxTQUF3SThhLFNBQVMsQ0FBQ3NFLDhCQUFsSixTQUFtTHRFLFNBQVMsQ0FBQ3VFLDhCQUE3TCxTQUE4TnZFLFNBQVMsQ0FBQzVhLFNBQXhPLENBQWY7O0FBRUEsTUFBTW9mLElBQUksR0FBR0MsbUJBQU8sQ0FBQyxJQUFELENBQXBCOztBQUNBLE1BQU1DLFNBQVMsR0FBR0YsSUFBSSxDQUFDRyxNQUFMLEdBQWMzUixNQUFkLENBQXFCbVIsU0FBckIsRUFBZ0NTLE1BQWhDLENBQXVDLEtBQXZDLENBQWxCO0FBRUEsTUFBSXJkLEVBQUo7O0FBQ0EsTUFBSTFCLElBQUksSUFBSXFSLHVCQUFaLEVBQXFDO0FBQ25DM1AsSUFBQUEsRUFBRSxHQUFHLGtCQUFrQm1kLFNBQXZCO0FBQ0QsR0FGRCxNQUVPO0FBQ0xuZCxJQUFBQSxFQUFFLEdBQUcsbUJBQW1CbWQsU0FBeEI7QUFDRDs7QUFFRDlHLEVBQUFBLGdCQUFnQixDQUFDclcsRUFBRCxDQUFoQjtBQUVBLE1BQU0rRCxTQUFTLEdBQUc7QUFDaEJtTyxJQUFBQSxLQUFLLEVBQUVBLEtBQUssR0FBR0EsS0FBSCxHQUFXbEIsd0JBRFA7QUFFaEJoUixJQUFBQSxFQUFFLEVBQUZBLEVBRmdCO0FBR2hCMGMsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFIZ0I7QUFJaEJqRSxJQUFBQSxTQUFTLEVBQVRBO0FBSmdCLEdBQWxCOztBQU1BbkksRUFBQUEsV0FBVyxDQUFDMVksSUFBWixDQUFpQm1NLFNBQWpCOztBQUNBdVosRUFBQUEsa0JBQWtCLENBQ2hCcmUsTUFEZ0IsRUFFaEI4RSxTQUZnQixFQUdoQnpGLElBQUksSUFBSXNSLHVCQUFSLEdBQWtDLElBQWxDLEdBQXlDLEtBSHpCLENBQWxCO0FBTUEsU0FBTzdMLFNBQVA7QUFDRDs7QUFFTSxTQUFTd1osZUFBVCxDQUF5QkMsYUFBekIsRUFBd0N0TCxLQUF4QyxFQUErQ3dLLGtCQUEvQyxFQUFtRTtBQUN4RSxTQUFPRCxnQkFBZ0IsQ0FDckJlLGFBRHFCLEVBRXJCdEwsS0FGcUIsRUFHckJ3SyxrQkFIcUIsRUFJckIvTSx1QkFKcUIsQ0FBdkI7QUFNRDtBQUVNLFNBQVM4TixnQkFBVCxDQUEwQnpkLEVBQTFCLEVBQThCO0FBQ25DLE1BQUk5QyxDQUFDLEdBQUcsQ0FBQyxDQUFUOztBQUVBLE1BQU02RyxTQUFTLEdBQUd1TSxXQUFXLENBQUMrQixJQUFaLENBQWlCLFVBQUNDLENBQUQsRUFBSWxNLENBQUosRUFBVTtBQUMzQ2xKLElBQUFBLENBQUMsR0FBR2tKLENBQUo7QUFDQSxXQUFPa00sQ0FBQyxDQUFDdFMsRUFBRixLQUFTQSxFQUFoQjtBQUNELEdBSGlCLENBQWxCOztBQUlBLE1BQUk5QyxDQUFDLElBQUlvVCxXQUFXLENBQUN2WSxNQUFyQixFQUE2QjtBQUU3QixNQUFJaU0sU0FBUyxHQUFHO0FBQ2RBLElBQUFBLFNBQVMsRUFBRWdWLGtCQUFrQixDQUFDalYsU0FBUyxDQUFDMFUsU0FBWDtBQURmLEdBQWhCO0FBSUEsU0FBT2dFLGdCQUFnQixDQUNyQnpZLFNBRHFCLEVBRXJCRCxTQUFTLENBQUNtTyxLQUZXLEVBR3JCLElBSHFCLEVBSXJCdEMsdUJBSnFCLENBQXZCO0FBTUQ7O0FBRUQsU0FBUzBOLGtCQUFULENBQTRCNUwsR0FBNUIsRUFBaUMzTixTQUFqQyxFQUE0Q2tTLGNBQTVDLEVBQTREO0FBQzFELE1BQU12WixRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjtBQUVBLE1BQU1naEIsS0FBSyxHQUNULEtBQ0NoTSxHQUFHLENBQUNpTSxRQUFKLElBQWdCak0sR0FBRyxDQUFDaU0sUUFBSixDQUFhQyxhQUE3QixHQUNHbE0sR0FBRyxDQUFDaU0sUUFBSixDQUFhRSxnQkFEaEIsR0FFRyxDQUhKLENBREY7QUFNQSxNQUFNcEwsYUFBYSxHQUFHQyxtQkFBbUIsQ0FBQ2hXLFFBQUQsQ0FBekM7QUFFQSxNQUFNWSxLQUFLLEdBQUd1YixnQkFBZ0IsQ0FBQ25jLFFBQUQsRUFBV3FILFNBQVMsQ0FBQzBVLFNBQXJCLENBQTlCOztBQUNBLE1BQUksQ0FBQ25iLEtBQUwsRUFBWTtBQUNWLFdBQU8zQixTQUFQO0FBQ0Q7O0FBRUQsTUFBTWlYLFNBQVMsR0FBR0MsV0FBVyxDQUFDblcsUUFBRCxDQUE3QjtBQUNBLE1BQU1vaEIsbUJBQW1CLEdBQUc5SCxlQUFlLENBQUN0RSxHQUFELEVBQU11RSxjQUFOLENBQTNDO0FBQ0EsTUFBTTdDLGVBQWUsR0FBRzFXLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBeEI7QUFFQXVTLEVBQUFBLGVBQWUsQ0FBQ3RTLFlBQWhCLENBQTZCLElBQTdCLEVBQW1DaUQsU0FBUyxDQUFDL0QsRUFBN0M7QUFDQW9ULEVBQUFBLGVBQWUsQ0FBQ3RTLFlBQWhCLENBQTZCLE9BQTdCLEVBQXNDK08seUJBQXRDO0FBRUFuVCxFQUFBQSxRQUFRLENBQUNtRCxJQUFULENBQWNrQixLQUFkLENBQW9CcUIsUUFBcEIsR0FBK0IsVUFBL0I7QUFDQWdSLEVBQUFBLGVBQWUsQ0FBQ3JTLEtBQWhCLENBQXNCTyxXQUF0QixDQUFrQyxnQkFBbEMsRUFBb0QsTUFBcEQ7O0FBQ0EsTUFBSXlDLFNBQVMsQ0FBQzJZLGtCQUFkLEVBQWtDO0FBQ2hDdEosSUFBQUEsZUFBZSxDQUFDdFMsWUFBaEIsQ0FBNkIsWUFBN0IsRUFBMkMsR0FBM0M7QUFDRDs7QUFFRCxNQUFNZ1MsUUFBUSxHQUFHcFcsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcUMscUJBQWQsRUFBakI7QUFDQSxNQUFNMFAsTUFBTSxHQUFHLENBQUNiLGFBQUQsSUFBa0JILE9BQWpDLENBOUIwRCxDQStCMUQ7O0FBQ0EsTUFBTW1OLGFBQWEsR0FBRyxLQUF0QjtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLEtBQTFCO0FBQ0EsTUFBTXpZLGtDQUFrQyxHQUFHd1ksYUFBYSxJQUFJQyxpQkFBNUQsQ0FsQzBELENBbUMxRDs7QUFDQSxNQUFNeFksV0FBVyxHQUFHRixpQ0FBdUIsQ0FDekNoSSxLQUR5QyxFQUV6Q2lJLGtDQUZ5QyxDQUEzQztBQUlBLE1BQUkwWSx1QkFBSjtBQUNBLE1BQU1DLGFBQWEsR0FBRyxDQUF0QjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLENBQTNCO0FBQ0EsTUFBTUMsMEJBQTBCLEdBQUcsQ0FBbkM7QUFDQSxNQUFNbk0sT0FBTyxHQUFHcEIsZ0NBQWhCO0FBQ0EsTUFBSXdOLEtBQUssR0FBRyxFQUFaO0FBQ0EsTUFBTUMsaUNBQWlDLEdBQ3JDQyxxQ0FBcUMsQ0FBQzdNLEdBQUQsRUFBTTNOLFNBQVMsQ0FBQy9ELEVBQWhCLENBRHZDO0FBR0EsTUFBSW9NLE9BQUo7QUFDQSxNQUFJQyxPQUFKO0FBQ0EsTUFBSW1TLGdCQUFKOztBQUVBLE1BQUl6TCxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixVQUExQixDQUFKLEVBQTJDO0FBQ3pDMlQsSUFBQUEsT0FBTyxHQUFHd0csU0FBUyxHQUFHLENBQUNILGFBQWEsQ0FBQ2pRLFVBQWxCLEdBQStCc1EsUUFBUSxDQUFDN1AsSUFBM0Q7QUFDQW9KLElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFDSCxhQUFhLENBQUNuUSxTQUFsQixHQUE4QndRLFFBQVEsQ0FBQ2hRLEdBQTFEO0FBQ0EwYixJQUFBQSxnQkFBZ0IsR0FDZGpkLFFBQVEsQ0FDTixDQUFDK2MsaUNBQWlDLENBQUNsWixLQUFsQyxHQUEwQ2dILE9BQTNDLElBQXNEbk4sTUFBTSxDQUFDaU4sVUFEdkQsQ0FBUixHQUVJLENBSE47QUFJRCxHQVBELE1BT08sSUFBSTZHLFNBQVMsQ0FBQ0MsU0FBVixDQUFvQnZhLEtBQXBCLENBQTBCLG1CQUExQixDQUFKLEVBQW9EO0FBQ3pEMlQsSUFBQUEsT0FBTyxHQUFHd0csU0FBUyxHQUFHLENBQUgsR0FBTyxDQUFDSCxhQUFhLENBQUNqUSxVQUF6QztBQUNBNkosSUFBQUEsT0FBTyxHQUFHdUcsU0FBUyxHQUFHLENBQUgsR0FBT0UsUUFBUSxDQUFDaFEsR0FBbkM7QUFDQTBiLElBQUFBLGdCQUFnQixHQUFHamQsUUFBUSxDQUN6QitjLGlDQUFpQyxDQUFDbFosS0FBbEMsR0FBMENuRyxNQUFNLENBQUNpTixVQUFqRCxHQUE4RCxDQURyQyxDQUEzQjtBQUdEOztBQWxFeUQsd0RBb0VqQzFHLFdBcEVpQztBQUFBOztBQUFBO0FBb0UxRCw4REFBc0M7QUFBQSxVQUEzQndILFVBQTJCOztBQUNwQyxVQUFJNEUsTUFBSixFQUFZO0FBQ1YsWUFBTTZNLGVBQWUsR0FBRyxDQUF4Qjs7QUFDQSxZQUFJLENBQUNSLHVCQUFMLEVBQThCO0FBQzVCQSxVQUFBQSx1QkFBdUIsR0FBR3ZoQixRQUFRLENBQUNnaUIsc0JBQVQsRUFBMUI7QUFDRDs7QUFDRCxZQUFNQyxvQkFBb0IsR0FBR2ppQixRQUFRLENBQUNraUIsZUFBVCxDQUMzQjVNLGlCQUQyQixFQUUzQixNQUYyQixDQUE3QjtBQUtBMk0sUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUFrQyxPQUFsQyxFQUEyQ2lQLG9CQUEzQztBQUNBNE8sUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUNFLE9BREYsc0JBRWVpRCxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUYvQixlQUV1Q3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZ2RCxlQUVpRW5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUZqRix5Q0FFb0hnQixPQUZwSDtBQUlBME0sUUFBQUEsb0JBQW9CLENBQUNqQixLQUFyQixHQUE2QkEsS0FBN0I7QUFFQTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVNLFlBQUl6SCxjQUFKLEVBQW9CO0FBQ2xCMEksVUFBQUEsb0JBQW9CLENBQUM5YixJQUFyQixHQUE0QjtBQUMxQnNDLFlBQUFBLE1BQU0sRUFBRWlNLGdCQURrQjtBQUNBO0FBQzFCbk8sWUFBQUEsSUFBSSxFQUFFaEUsTUFBTSxDQUFDaU4sVUFBUCxHQUFvQnNTLGdCQUFwQixHQUF1Q3BOLGdCQUZuQjtBQUcxQnRPLFlBQUFBLEdBQUcsRUFBRXdiLGlDQUFpQyxDQUFDeGIsR0FBbEMsR0FBd0N1SixPQUhuQjtBQUkxQmxMLFlBQUFBLEtBQUssRUFBRWlRO0FBSm1CLFdBQTVCO0FBTUQsU0FQRCxNQU9PO0FBQ0x1TixVQUFBQSxvQkFBb0IsQ0FBQzliLElBQXJCLEdBQTRCO0FBQzFCc0MsWUFBQUEsTUFBTSxFQUFFNkgsVUFBVSxDQUFDN0gsTUFETztBQUUxQmxDLFlBQUFBLElBQUksRUFBRStKLFVBQVUsQ0FBQy9KLElBQVgsR0FBa0JtSixPQUZFO0FBRzFCdEosWUFBQUEsR0FBRyxFQUFFa0ssVUFBVSxDQUFDbEssR0FBWCxHQUFpQnVKLE9BSEk7QUFJMUJsTCxZQUFBQSxLQUFLLEVBQUU2TCxVQUFVLENBQUM3TDtBQUpRLFdBQTVCO0FBTUQ7O0FBRUR3ZCxRQUFBQSxvQkFBb0IsQ0FBQzdkLFlBQXJCLENBQWtDLElBQWxDLFlBQTJDb2QsYUFBYSxHQUFHUixLQUEzRDtBQUNBaUIsUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUFrQyxJQUFsQyxZQUEyQ29kLGFBQWEsR0FBR1IsS0FBM0Q7QUFDQWlCLFFBQUFBLG9CQUFvQixDQUFDN2QsWUFBckIsQ0FDRSxHQURGLFlBRUssQ0FBQzZkLG9CQUFvQixDQUFDOWIsSUFBckIsQ0FBMEJJLElBQTFCLEdBQWlDd2IsZUFBbEMsSUFBcURmLEtBRjFEO0FBSUFpQixRQUFBQSxvQkFBb0IsQ0FBQzdkLFlBQXJCLENBQ0UsR0FERixZQUVLLENBQUM2ZCxvQkFBb0IsQ0FBQzliLElBQXJCLENBQTBCQyxHQUExQixHQUFnQzJiLGVBQWpDLElBQW9EZixLQUZ6RDtBQUlBaUIsUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUNFLFFBREYsWUFFSyxDQUFDNmQsb0JBQW9CLENBQUM5YixJQUFyQixDQUEwQnNDLE1BQTFCLEdBQW1Dc1osZUFBZSxHQUFHLENBQXRELElBQTJEZixLQUZoRTtBQUlBaUIsUUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUNFLE9BREYsWUFFSyxDQUFDNmQsb0JBQW9CLENBQUM5YixJQUFyQixDQUEwQjFCLEtBQTFCLEdBQWtDc2QsZUFBZSxHQUFHLENBQXJELElBQTBEZixLQUYvRDtBQUlBTyxRQUFBQSx1QkFBdUIsQ0FBQy9jLFdBQXhCLENBQW9DeWQsb0JBQXBDOztBQUNBLFlBQUlaLGFBQUosRUFBbUI7QUFDakIsY0FBTWMsb0JBQW9CLEdBQUduaUIsUUFBUSxDQUFDa2lCLGVBQVQsQ0FDM0I1TSxpQkFEMkIsRUFFM0IsTUFGMkIsQ0FBN0I7QUFJQTJNLFVBQUFBLG9CQUFvQixDQUFDN2QsWUFBckIsQ0FBa0MsT0FBbEMsRUFBMkNpUCxvQkFBM0M7QUFDQThPLFVBQUFBLG9CQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxPQURGLGlEQUdJcWQsa0JBQWtCLEdBQUdULEtBSHpCLDJCQUltQjNaLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBSm5DLGVBSTJDcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBSjNELGVBS0luTixTQUFTLENBQUNtTyxLQUFWLENBQWdCakIsSUFMcEIsMkNBTW1DZ0IsT0FObkM7QUFRQTRNLFVBQUFBLG9CQUFvQixDQUFDbkIsS0FBckIsR0FBNkJBLEtBQTdCO0FBQ0E7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDUSxjQUFJekgsY0FBSixFQUFvQjtBQUNsQjRJLFlBQUFBLG9CQUFvQixDQUFDaGMsSUFBckIsR0FBNEI7QUFDMUJzQyxjQUFBQSxNQUFNLEVBQUVpTSxnQkFEa0I7QUFDQTtBQUMxQm5PLGNBQUFBLElBQUksRUFBRWhFLE1BQU0sQ0FBQ2lOLFVBQVAsR0FBb0JzUyxnQkFBcEIsR0FBdUNwTixnQkFGbkI7QUFHMUJ0TyxjQUFBQSxHQUFHLEVBQUV3YixpQ0FBaUMsQ0FBQ3hiLEdBQWxDLEdBQXdDdUosT0FIbkI7QUFJMUJsTCxjQUFBQSxLQUFLLEVBQUVpUTtBQUptQixhQUE1QjtBQU1ELFdBUEQsTUFPTztBQUNMeU4sWUFBQUEsb0JBQW9CLENBQUNoYyxJQUFyQixHQUE0QjtBQUMxQnNDLGNBQUFBLE1BQU0sRUFBRTZILFVBQVUsQ0FBQzdILE1BRE87QUFFMUJsQyxjQUFBQSxJQUFJLEVBQUUrSixVQUFVLENBQUMvSixJQUFYLEdBQWtCbUosT0FGRTtBQUcxQnRKLGNBQUFBLEdBQUcsRUFBRWtLLFVBQVUsQ0FBQ2xLLEdBQVgsR0FBaUJ1SixPQUhJO0FBSTFCbEwsY0FBQUEsS0FBSyxFQUFFNkwsVUFBVSxDQUFDN0w7QUFKUSxhQUE1QjtBQU1EOztBQUVELGNBQU0yZCxVQUFVLEdBQ2RELG9CQUFvQixDQUFDaGMsSUFBckIsQ0FBMEIxQixLQUExQixHQUFrQytjLGFBQWxDLEdBQWtEQSxhQUFsRCxHQUFrRSxDQURwRTtBQUVBVyxVQUFBQSxvQkFBb0IsQ0FBQy9kLFlBQXJCLENBQ0UsSUFERixZQUVLLENBQUMrZCxvQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCSSxJQUExQixHQUFpQzZiLFVBQWxDLElBQWdEcEIsS0FGckQ7QUFJQW1CLFVBQUFBLG9CQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxJQURGLFlBR0ksQ0FBQytkLG9CQUFvQixDQUFDaGMsSUFBckIsQ0FBMEJJLElBQTFCLEdBQ0M0YixvQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCMUIsS0FEM0IsR0FFQzJkLFVBRkYsSUFHQXBCLEtBTko7QUFTQSxjQUFNN1YsQ0FBQyxHQUNMLENBQUNnWCxvQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCQyxHQUExQixHQUNDK2Isb0JBQW9CLENBQUNoYyxJQUFyQixDQUEwQnNDLE1BRDNCLEdBRUNnWixrQkFBa0IsR0FBRyxDQUZ2QixJQUdBVCxLQUpGO0FBS0FtQixVQUFBQSxvQkFBb0IsQ0FBQy9kLFlBQXJCLENBQWtDLElBQWxDLFlBQTJDK0csQ0FBM0M7QUFDQWdYLFVBQUFBLG9CQUFvQixDQUFDL2QsWUFBckIsQ0FBa0MsSUFBbEMsWUFBMkMrRyxDQUEzQztBQUNBZ1gsVUFBQUEsb0JBQW9CLENBQUMvZCxZQUFyQixDQUNFLFFBREYsWUFFSytkLG9CQUFvQixDQUFDaGMsSUFBckIsQ0FBMEJzQyxNQUExQixHQUFtQ3VZLEtBRnhDO0FBSUFtQixVQUFBQSxvQkFBb0IsQ0FBQy9kLFlBQXJCLENBQ0UsT0FERixZQUVLK2Qsb0JBQW9CLENBQUNoYyxJQUFyQixDQUEwQjFCLEtBQTFCLEdBQWtDdWMsS0FGdkM7QUFJQU8sVUFBQUEsdUJBQXVCLENBQUMvYyxXQUF4QixDQUFvQzJkLG9CQUFwQztBQUNEOztBQUNELFlBQUliLGlCQUFKLEVBQXVCO0FBQ3JCLGNBQU1hLHFCQUFvQixHQUFHbmlCLFFBQVEsQ0FBQ2tpQixlQUFULENBQzNCNU0saUJBRDJCLEVBRTNCLE1BRjJCLENBQTdCOztBQUtBMk0sVUFBQUEsb0JBQW9CLENBQUM3ZCxZQUFyQixDQUFrQyxPQUFsQyxFQUEyQ2lQLG9CQUEzQzs7QUFDQThPLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxPQURGLGdEQUdJc2QsMEJBQTBCLEdBQUdWLEtBSGpDLDJCQUltQjNaLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBSm5DLGVBSTJDcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBSjNELGVBS0luTixTQUFTLENBQUNtTyxLQUFWLENBQWdCakIsSUFMcEIsMkNBTW1DZ0IsT0FObkM7O0FBUUE0TSxVQUFBQSxxQkFBb0IsQ0FBQ25CLEtBQXJCLEdBQTZCQSxLQUE3QjtBQUVBO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRVEsY0FBSXpILGNBQUosRUFBb0I7QUFDbEI0SSxZQUFBQSxxQkFBb0IsQ0FBQ2hjLElBQXJCLEdBQTRCO0FBQzFCc0MsY0FBQUEsTUFBTSxFQUFFaU0sZ0JBRGtCO0FBQ0E7QUFDMUJuTyxjQUFBQSxJQUFJLEVBQUVoRSxNQUFNLENBQUNpTixVQUFQLEdBQW9Cc1MsZ0JBQXBCLEdBQXVDcE4sZ0JBRm5CO0FBRzFCdE8sY0FBQUEsR0FBRyxFQUFFd2IsaUNBQWlDLENBQUN4YixHQUFsQyxHQUF3Q3VKLE9BSG5CO0FBSTFCbEwsY0FBQUEsS0FBSyxFQUFFaVE7QUFKbUIsYUFBNUI7QUFNRCxXQVBELE1BT087QUFDTHlOLFlBQUFBLHFCQUFvQixDQUFDaGMsSUFBckIsR0FBNEI7QUFDMUJzQyxjQUFBQSxNQUFNLEVBQUU2SCxVQUFVLENBQUM3SCxNQURPO0FBRTFCbEMsY0FBQUEsSUFBSSxFQUFFK0osVUFBVSxDQUFDL0osSUFBWCxHQUFrQm1KLE9BRkU7QUFHMUJ0SixjQUFBQSxHQUFHLEVBQUVrSyxVQUFVLENBQUNsSyxHQUFYLEdBQWlCdUosT0FISTtBQUkxQmxMLGNBQUFBLEtBQUssRUFBRTZMLFVBQVUsQ0FBQzdMO0FBSlEsYUFBNUI7QUFNRDs7QUFFRDBkLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxJQURGLFlBRUsrZCxxQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCSSxJQUExQixHQUFpQ3lhLEtBRnRDOztBQUlBbUIsVUFBQUEscUJBQW9CLENBQUMvZCxZQUFyQixDQUNFLElBREYsWUFHSSxDQUFDK2QscUJBQW9CLENBQUNoYyxJQUFyQixDQUEwQkksSUFBMUIsR0FBaUM0YixxQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCMUIsS0FBNUQsSUFDQXVjLEtBSko7O0FBT0EsY0FBTW9CLFdBQVUsR0FBR0QscUJBQW9CLENBQUNoYyxJQUFyQixDQUEwQnNDLE1BQTFCLEdBQW1DLENBQXREOztBQUNBLGNBQU0wQyxFQUFDLEdBQUcsQ0FBQ2dYLHFCQUFvQixDQUFDaGMsSUFBckIsQ0FBMEJDLEdBQTFCLEdBQWdDZ2MsV0FBakMsSUFBK0NwQixLQUF6RDs7QUFDQW1CLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FBa0MsSUFBbEMsWUFBMkMrRyxFQUEzQzs7QUFDQWdYLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FBa0MsSUFBbEMsWUFBMkMrRyxFQUEzQzs7QUFDQWdYLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxRQURGLFlBRUsrZCxxQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCc0MsTUFBMUIsR0FBbUN1WSxLQUZ4Qzs7QUFJQW1CLFVBQUFBLHFCQUFvQixDQUFDL2QsWUFBckIsQ0FDRSxPQURGLFlBRUsrZCxxQkFBb0IsQ0FBQ2hjLElBQXJCLENBQTBCMUIsS0FBMUIsR0FBa0N1YyxLQUZ2Qzs7QUFJQU8sVUFBQUEsdUJBQXVCLENBQUMvYyxXQUF4QixDQUFvQzJkLHFCQUFwQztBQUNEO0FBQ0YsT0F2TUQsTUF1TU87QUFDTCxZQUFNaE4sYUFBYSxHQUFHblYsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixLQUF2QixDQUF0QjtBQUVBZ1IsUUFBQUEsYUFBYSxDQUFDL1EsWUFBZCxDQUEyQixPQUEzQixFQUFvQ2lQLG9CQUFwQzs7QUFFQSxZQUFJZ0IsYUFBSixFQUFtQjtBQUNqQixjQUFNZ08sR0FBRyxHQUFHem1CLElBQUksQ0FBQ3NJLEtBQUwsQ0FBVyxXQUFXdEksSUFBSSxDQUFDMG1CLE1BQUwsRUFBdEIsQ0FBWjtBQUNBLGNBQU1DLENBQUMsR0FBR0YsR0FBRyxJQUFJLEVBQWpCO0FBQ0EsY0FBTUcsQ0FBQyxHQUFJSCxHQUFHLElBQUksQ0FBUixHQUFhLEdBQXZCO0FBQ0EsY0FBTTdrQixDQUFDLEdBQUc2a0IsR0FBRyxHQUFHLEdBQWhCO0FBQ0FWLFVBQUFBLEtBQUssZ0NBQXlCWSxDQUF6QixlQUErQkMsQ0FBL0IsZUFBcUNobEIsQ0FBckMsdUVBQUw7QUFDRCxTQU5ELE1BTU87QUFDTCxjQUFJNmpCLGFBQUosRUFBbUI7QUFDakJNLFlBQUFBLEtBQUssNkJBQXNCRixrQkFBa0IsR0FBR1QsS0FBM0MsMkJBQ0gzWixTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQURiLGVBRUFwTixTQUFTLENBQUNtTyxLQUFWLENBQWdCaEIsS0FGaEIsZUFHSG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUhiLGVBSUFnQixPQUpBLGlCQUFMO0FBS0Q7QUFDRjs7QUFDREosUUFBQUEsYUFBYSxDQUFDL1EsWUFBZCxDQUNFLE9BREYsMkJBRW9Cb2QsYUFGcEIsbURBRTBFbmEsU0FBUyxDQUFDbU8sS0FBVixDQUFnQmYsR0FGMUYsZUFFa0dwTixTQUFTLENBQUNtTyxLQUFWLENBQWdCaEIsS0FGbEgsZUFFNEhuTixTQUFTLENBQUNtTyxLQUFWLENBQWdCakIsSUFGNUksZUFFcUpnQixPQUZySiwyQkFFNktvTSxLQUY3SztBQUlBeE0sUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQk8sV0FBcEIsQ0FBZ0MsZ0JBQWhDLEVBQWtELE1BQWxEO0FBQ0F1USxRQUFBQSxhQUFhLENBQUM5USxLQUFkLENBQW9CcUIsUUFBcEIsR0FBK0J3USxTQUFTLEdBQUcsT0FBSCxHQUFhLFVBQXJEO0FBQ0FmLFFBQUFBLGFBQWEsQ0FBQzZMLEtBQWQsR0FBc0JBLEtBQXRCO0FBQ0E7QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDTSxZQUFJekgsY0FBSixFQUFvQjtBQUNsQnBFLFVBQUFBLGFBQWEsQ0FBQ2hQLElBQWQsR0FBcUI7QUFDbkJzQyxZQUFBQSxNQUFNLEVBQUVpTSxnQkFEVztBQUNPO0FBQzFCbk8sWUFBQUEsSUFBSSxFQUFFaEUsTUFBTSxDQUFDaU4sVUFBUCxHQUFvQnNTLGdCQUFwQixHQUF1Q3BOLGdCQUYxQjtBQUduQnRPLFlBQUFBLEdBQUcsRUFBRXdiLGlDQUFpQyxDQUFDeGIsR0FBbEMsR0FBd0N1SixPQUgxQjtBQUluQmxMLFlBQUFBLEtBQUssRUFBRWlRO0FBSlksV0FBckI7QUFNRCxTQVBELE1BT087QUFDTFMsVUFBQUEsYUFBYSxDQUFDaFAsSUFBZCxHQUFxQjtBQUNuQnNDLFlBQUFBLE1BQU0sRUFBRTZILFVBQVUsQ0FBQzdILE1BREE7QUFFbkJsQyxZQUFBQSxJQUFJLEVBQUUrSixVQUFVLENBQUMvSixJQUFYLEdBQWtCbUosT0FGTDtBQUduQnRKLFlBQUFBLEdBQUcsRUFBRWtLLFVBQVUsQ0FBQ2xLLEdBQVgsR0FBaUJ1SixPQUhIO0FBSW5CbEwsWUFBQUEsS0FBSyxFQUFFNkwsVUFBVSxDQUFDN0w7QUFKQyxXQUFyQjtBQU1EOztBQUVEMFEsUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQkksS0FBcEIsYUFBK0IwUSxhQUFhLENBQUNoUCxJQUFkLENBQW1CMUIsS0FBbkIsR0FBMkJ1YyxLQUExRDtBQUNBN0wsUUFBQUEsYUFBYSxDQUFDOVEsS0FBZCxDQUFvQm9FLE1BQXBCLGFBQWdDME0sYUFBYSxDQUFDaFAsSUFBZCxDQUFtQnNDLE1BQW5CLEdBQTRCdVksS0FBNUQ7QUFDQTdMLFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0JrQyxJQUFwQixhQUE4QjRPLGFBQWEsQ0FBQ2hQLElBQWQsQ0FBbUJJLElBQW5CLEdBQTBCeWEsS0FBeEQ7QUFDQTdMLFFBQUFBLGFBQWEsQ0FBQzlRLEtBQWQsQ0FBb0IrQixHQUFwQixhQUE2QitPLGFBQWEsQ0FBQ2hQLElBQWQsQ0FBbUJDLEdBQW5CLEdBQXlCNGEsS0FBdEQ7QUFDQXRLLFFBQUFBLGVBQWUsQ0FBQ2pHLE1BQWhCLENBQXVCMEUsYUFBdkI7O0FBQ0EsWUFBSSxDQUFDZCxhQUFELElBQWtCaU4saUJBQXRCLEVBQXlDO0FBQ3ZDO0FBQ0EsY0FBTW1CLGlCQUFpQixHQUFHemlCLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBMUI7QUFDQXNlLFVBQUFBLGlCQUFpQixDQUFDcmUsWUFBbEIsQ0FBK0IsT0FBL0IsRUFBd0NpUCxvQkFBeEM7QUFFQW9QLFVBQUFBLGlCQUFpQixDQUFDcmUsWUFBbEIsQ0FDRSxPQURGLG1DQUU0QmlELFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JmLEdBRjVDLGVBRW9EcE4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmhCLEtBRnBFLGVBRThFbk4sU0FBUyxDQUFDbU8sS0FBVixDQUFnQmpCLElBRjlGLGVBRXVHZ0IsT0FGdkc7QUFJQWtOLFVBQUFBLGlCQUFpQixDQUFDcGUsS0FBbEIsQ0FBd0JPLFdBQXhCLENBQW9DLGdCQUFwQyxFQUFzRCxNQUF0RDtBQUNBNmQsVUFBQUEsaUJBQWlCLENBQUNwZSxLQUFsQixDQUF3QnFCLFFBQXhCLEdBQW1Dd1EsU0FBUyxHQUFHLE9BQUgsR0FBYSxVQUF6RDtBQUNBdU0sVUFBQUEsaUJBQWlCLENBQUN6QixLQUFsQixHQUEwQkEsS0FBMUI7QUFDQTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVRLGNBQUl6SCxjQUFKLEVBQW9CO0FBQ2xCa0osWUFBQUEsaUJBQWlCLENBQUN0YyxJQUFsQixHQUF5QjtBQUN2QnNDLGNBQUFBLE1BQU0sRUFBRWlNLGdCQURlO0FBQ0c7QUFDMUJuTyxjQUFBQSxJQUFJLEVBQUVoRSxNQUFNLENBQUNpTixVQUFQLEdBQW9Cc1MsZ0JBQXBCLEdBQXVDcE4sZ0JBRnRCO0FBR3ZCdE8sY0FBQUEsR0FBRyxFQUFFd2IsaUNBQWlDLENBQUN4YixHQUFsQyxHQUF3Q3VKLE9BSHRCO0FBSXZCbEwsY0FBQUEsS0FBSyxFQUFFaVE7QUFKZ0IsYUFBekI7QUFNRCxXQVBELE1BT087QUFDTCtOLFlBQUFBLGlCQUFpQixDQUFDdGMsSUFBbEIsR0FBeUI7QUFDdkJzQyxjQUFBQSxNQUFNLEVBQUU2SCxVQUFVLENBQUM3SCxNQURJO0FBRXZCbEMsY0FBQUEsSUFBSSxFQUFFK0osVUFBVSxDQUFDL0osSUFBWCxHQUFrQm1KLE9BRkQ7QUFHdkJ0SixjQUFBQSxHQUFHLEVBQUVrSyxVQUFVLENBQUNsSyxHQUFYLEdBQWlCdUosT0FIQztBQUl2QmxMLGNBQUFBLEtBQUssRUFBRTZMLFVBQVUsQ0FBQzdMO0FBSkssYUFBekI7QUFNRDs7QUFFRGdlLFVBQUFBLGlCQUFpQixDQUFDcGUsS0FBbEIsQ0FBd0JJLEtBQXhCLGFBQ0VnZSxpQkFBaUIsQ0FBQ3RjLElBQWxCLENBQXVCMUIsS0FBdkIsR0FBK0J1YyxLQURqQztBQUdBeUIsVUFBQUEsaUJBQWlCLENBQUNwZSxLQUFsQixDQUF3Qm9FLE1BQXhCLGFBQ0VpWiwwQkFBMEIsR0FBR1YsS0FEL0I7QUFHQXlCLFVBQUFBLGlCQUFpQixDQUFDcGUsS0FBbEIsQ0FBd0JrQyxJQUF4QixhQUNFa2MsaUJBQWlCLENBQUN0YyxJQUFsQixDQUF1QkksSUFBdkIsR0FBOEJ5YSxLQURoQztBQUdBeUIsVUFBQUEsaUJBQWlCLENBQUNwZSxLQUFsQixDQUF3QitCLEdBQXhCLGFBQ0UsQ0FBQ3FjLGlCQUFpQixDQUFDdGMsSUFBbEIsQ0FBdUJDLEdBQXZCLEdBQ0NxYyxpQkFBaUIsQ0FBQ3RjLElBQWxCLENBQXVCc0MsTUFBdkIsR0FBZ0MsQ0FEakMsR0FFQ2laLDBCQUEwQixHQUFHLENBRi9CLElBR0FWLEtBSkY7QUFNQXRLLFVBQUFBLGVBQWUsQ0FBQ2pHLE1BQWhCLENBQXVCZ1MsaUJBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxVQUFJbEosY0FBSixFQUFvQjtBQUNsQjtBQUNEO0FBQ0Y7QUEvWHlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBaVkxRCxNQUFJckUsTUFBTSxJQUFJcU0sdUJBQWQsRUFBdUM7QUFDckMsUUFBTW1CLGdCQUFnQixHQUFHMWlCLFFBQVEsQ0FBQ2tpQixlQUFULENBQXlCNU0saUJBQXpCLEVBQTRDLEtBQTVDLENBQXpCO0FBQ0FvTixJQUFBQSxnQkFBZ0IsQ0FBQ3RlLFlBQWpCLENBQThCLGdCQUE5QixFQUFnRCxNQUFoRDtBQUNBc2UsSUFBQUEsZ0JBQWdCLENBQUNyZSxLQUFqQixDQUF1QnFCLFFBQXZCLEdBQWtDd1EsU0FBUyxHQUFHLE9BQUgsR0FBYSxVQUF4RDtBQUNBd00sSUFBQUEsZ0JBQWdCLENBQUNyZSxLQUFqQixDQUF1QnNlLFFBQXZCLEdBQWtDLFNBQWxDO0FBQ0FELElBQUFBLGdCQUFnQixDQUFDcmUsS0FBakIsQ0FBdUJrQyxJQUF2QixHQUE4QixHQUE5QjtBQUNBbWMsSUFBQUEsZ0JBQWdCLENBQUNyZSxLQUFqQixDQUF1QitCLEdBQXZCLEdBQTZCLEdBQTdCO0FBQ0FzYyxJQUFBQSxnQkFBZ0IsQ0FBQ2pTLE1BQWpCLENBQXdCOFEsdUJBQXhCO0FBQ0E3SyxJQUFBQSxlQUFlLENBQUNqRyxNQUFoQixDQUF1QmlTLGdCQUF2QjtBQUNEOztBQUVELE1BQU03TixpQkFBaUIsR0FBRzdVLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBMUI7O0FBRUEsTUFBSW9WLGNBQUosRUFBb0I7QUFDbEIxRSxJQUFBQSxpQkFBaUIsQ0FBQ3pRLFlBQWxCLENBQStCLE9BQS9CLEVBQXdDb1AsOEJBQXhDO0FBQ0FxQixJQUFBQSxpQkFBaUIsQ0FBQ3pRLFlBQWxCLENBQ0UsT0FERiwyQkFFb0JvZCxhQUZwQixtREFFMEVuYSxTQUFTLENBQUNtTyxLQUFWLENBQWdCZixHQUYxRixlQUVrR3BOLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JoQixLQUZsSCxlQUU0SG5OLFNBQVMsQ0FBQ21PLEtBQVYsQ0FBZ0JqQixJQUY1SSxlQUVxSmdCLE9BRnJKLDJCQUU2S29NLEtBRjdLO0FBSUQsR0FORCxNQU1PO0FBQ0w5TSxJQUFBQSxpQkFBaUIsQ0FBQ3pRLFlBQWxCLENBQStCLE9BQS9CLEVBQXdDbVAsNkJBQXhDO0FBQ0Q7O0FBRURzQixFQUFBQSxpQkFBaUIsQ0FBQ3hRLEtBQWxCLENBQXdCTyxXQUF4QixDQUFvQyxnQkFBcEMsRUFBc0QsTUFBdEQ7QUFDQWlRLEVBQUFBLGlCQUFpQixDQUFDeFEsS0FBbEIsQ0FBd0JxQixRQUF4QixHQUFtQ3dRLFNBQVMsR0FBRyxPQUFILEdBQWEsVUFBekQ7QUFDQXJCLEVBQUFBLGlCQUFpQixDQUFDbU0sS0FBbEIsR0FBMEJBLEtBQTFCOztBQUVBLE1BQUkzTSxhQUFKLEVBQW1CO0FBQ2pCUSxJQUFBQSxpQkFBaUIsQ0FBQ3pRLFlBQWxCLENBQ0UsT0FERjtBQUlEOztBQUVELE1BQUltVixjQUFKLEVBQW9CO0FBQ2xCMUUsSUFBQUEsaUJBQWlCLENBQUMxTyxJQUFsQixHQUF5QjtBQUN2QnNDLE1BQUFBLE1BQU0sRUFBRWlNLGdCQURlO0FBQ0c7QUFDMUJuTyxNQUFBQSxJQUFJLEVBQUVoRSxNQUFNLENBQUNpTixVQUFQLEdBQW9Cc1MsZ0JBQXBCLEdBQXVDcE4sZ0JBRnRCO0FBR3ZCdE8sTUFBQUEsR0FBRyxFQUFFd2IsaUNBQWlDLENBQUN4YixHQUFsQyxHQUF3Q3VKLE9BSHRCO0FBSXZCbEwsTUFBQUEsS0FBSyxFQUFFaVE7QUFKZ0IsS0FBekI7QUFNRCxHQVBELE1BT087QUFDTCxRQUFNa08sdUJBQXVCLEdBQUdoaUIsS0FBSyxDQUFDNEUscUJBQU4sRUFBaEM7QUFDQXFQLElBQUFBLGlCQUFpQixDQUFDMU8sSUFBbEIsR0FBeUI7QUFDdkJzQyxNQUFBQSxNQUFNLEVBQUVtYSx1QkFBdUIsQ0FBQ25hLE1BRFQ7QUFFdkJsQyxNQUFBQSxJQUFJLEVBQUVxYyx1QkFBdUIsQ0FBQ3JjLElBQXhCLEdBQStCbUosT0FGZDtBQUd2QnRKLE1BQUFBLEdBQUcsRUFBRXdjLHVCQUF1QixDQUFDeGMsR0FBeEIsR0FBOEJ1SixPQUhaO0FBSXZCbEwsTUFBQUEsS0FBSyxFQUFFbWUsdUJBQXVCLENBQUNuZTtBQUpSLEtBQXpCO0FBTUQ7O0FBRURvUSxFQUFBQSxpQkFBaUIsQ0FBQ3hRLEtBQWxCLENBQXdCSSxLQUF4QixhQUFtQ29RLGlCQUFpQixDQUFDMU8sSUFBbEIsQ0FBdUIxQixLQUF2QixHQUErQnVjLEtBQWxFO0FBQ0FuTSxFQUFBQSxpQkFBaUIsQ0FBQ3hRLEtBQWxCLENBQXdCb0UsTUFBeEIsYUFBb0NvTSxpQkFBaUIsQ0FBQzFPLElBQWxCLENBQXVCc0MsTUFBdkIsR0FBZ0N1WSxLQUFwRTtBQUNBbk0sRUFBQUEsaUJBQWlCLENBQUN4USxLQUFsQixDQUF3QmtDLElBQXhCLGFBQWtDc08saUJBQWlCLENBQUMxTyxJQUFsQixDQUF1QkksSUFBdkIsR0FBOEJ5YSxLQUFoRTtBQUNBbk0sRUFBQUEsaUJBQWlCLENBQUN4USxLQUFsQixDQUF3QitCLEdBQXhCLGFBQWlDeU8saUJBQWlCLENBQUMxTyxJQUFsQixDQUF1QkMsR0FBdkIsR0FBNkI0YSxLQUE5RDtBQUVBdEssRUFBQUEsZUFBZSxDQUFDakcsTUFBaEIsQ0FBdUJvRSxpQkFBdkI7QUFDQXVNLEVBQUFBLG1CQUFtQixDQUFDM1EsTUFBcEIsQ0FBMkJpRyxlQUEzQjtBQUVBLFNBQU9BLGVBQVA7QUFDRDs7QUFFRCxTQUFTaUYsa0JBQVQsQ0FBNEJrSCxTQUE1QixFQUF1QzVoQixXQUF2QyxFQUFvRDZoQixPQUFwRCxFQUE2RDNoQixTQUE3RCxFQUF3RTtBQUN0RSxNQUFNUCxLQUFLLEdBQUcsSUFBSUMsS0FBSixFQUFkO0FBQ0FELEVBQUFBLEtBQUssQ0FBQ0UsUUFBTixDQUFlK2hCLFNBQWYsRUFBMEI1aEIsV0FBMUI7QUFDQUwsRUFBQUEsS0FBSyxDQUFDRyxNQUFOLENBQWEraEIsT0FBYixFQUFzQjNoQixTQUF0Qjs7QUFDQSxNQUFJLENBQUNQLEtBQUssQ0FBQ2tiLFNBQVgsRUFBc0I7QUFDcEIsV0FBT2xiLEtBQVA7QUFDRDs7QUFDRG9YLEVBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSxxREFBWjtBQUNBLE1BQU1nYixZQUFZLEdBQUcsSUFBSWxpQixLQUFKLEVBQXJCO0FBQ0FraUIsRUFBQUEsWUFBWSxDQUFDamlCLFFBQWIsQ0FBc0JnaUIsT0FBdEIsRUFBK0IzaEIsU0FBL0I7QUFDQTRoQixFQUFBQSxZQUFZLENBQUNoaUIsTUFBYixDQUFvQjhoQixTQUFwQixFQUErQjVoQixXQUEvQjs7QUFDQSxNQUFJLENBQUM4aEIsWUFBWSxDQUFDakgsU0FBbEIsRUFBNkI7QUFDM0I5RCxJQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksMENBQVo7QUFDQSxXQUFPbkgsS0FBUDtBQUNEOztBQUNEb1gsRUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLHVEQUFaO0FBQ0EsU0FBTzlJLFNBQVA7QUFDRDs7QUFFRCxTQUFTK2MsWUFBVCxDQUFzQnBiLEtBQXRCLEVBQTZCeWIsY0FBN0IsRUFBNkMyRyxpQkFBN0MsRUFBZ0U7QUFDOUQsTUFBTUMsY0FBYyxHQUFHcmlCLEtBQUssQ0FBQ0ksY0FBTixDQUFxQnJELFFBQXJCLEtBQWtDQyxJQUFJLENBQUNDLFlBQTlEO0FBQ0EsTUFBTXFsQixxQkFBcUIsR0FBR0QsY0FBYyxHQUN4Q3JpQixLQUFLLENBQUNJLGNBRGtDLEdBRXhDSixLQUFLLENBQUNJLGNBQU4sQ0FBcUIwVSxVQUFyQixJQUNBOVUsS0FBSyxDQUFDSSxjQUFOLENBQXFCMFUsVUFBckIsQ0FBZ0MvWCxRQUFoQyxLQUE2Q0MsSUFBSSxDQUFDQyxZQURsRCxHQUVBK0MsS0FBSyxDQUFDSSxjQUFOLENBQXFCMFUsVUFGckIsR0FHQXpXLFNBTEo7O0FBTUEsTUFBSSxDQUFDaWtCLHFCQUFMLEVBQTRCO0FBQzFCLFdBQU9qa0IsU0FBUDtBQUNEOztBQUNELE1BQU1taEIsZ0NBQWdDLEdBQUc2QyxjQUFjLEdBQ25ELENBQUMsQ0FEa0QsR0FFbkRqYixLQUFLLENBQUNnRCxJQUFOLENBQVdrWSxxQkFBcUIsQ0FBQzNpQixVQUFqQyxFQUE2Q3RGLE9BQTdDLENBQ0UyRixLQUFLLENBQUNJLGNBRFIsQ0FGSjs7QUFLQSxNQUFJb2YsZ0NBQWdDLEdBQUcsQ0FBQyxDQUF4QyxFQUEyQztBQUN6QyxXQUFPbmhCLFNBQVA7QUFDRDs7QUFDRCxNQUFNa2hCLGdDQUFnQyxHQUFHOUQsY0FBYyxDQUNyRDZHLHFCQURxRCxDQUF2RDtBQUdBLE1BQU1DLFlBQVksR0FBR3ZpQixLQUFLLENBQUNNLFlBQU4sQ0FBbUJ2RCxRQUFuQixLQUFnQ0MsSUFBSSxDQUFDQyxZQUExRDtBQUNBLE1BQU11bEIsbUJBQW1CLEdBQUdELFlBQVksR0FDcEN2aUIsS0FBSyxDQUFDTSxZQUQ4QixHQUVwQ04sS0FBSyxDQUFDTSxZQUFOLENBQW1Cd1UsVUFBbkIsSUFDQTlVLEtBQUssQ0FBQ00sWUFBTixDQUFtQndVLFVBQW5CLENBQThCL1gsUUFBOUIsS0FBMkNDLElBQUksQ0FBQ0MsWUFEaEQsR0FFQStDLEtBQUssQ0FBQ00sWUFBTixDQUFtQndVLFVBRm5CLEdBR0F6VyxTQUxKOztBQU1BLE1BQUksQ0FBQ21rQixtQkFBTCxFQUEwQjtBQUN4QixXQUFPbmtCLFNBQVA7QUFDRDs7QUFDRCxNQUFNcWhCLDhCQUE4QixHQUFHNkMsWUFBWSxHQUMvQyxDQUFDLENBRDhDLEdBRS9DbmIsS0FBSyxDQUFDZ0QsSUFBTixDQUFXb1ksbUJBQW1CLENBQUM3aUIsVUFBL0IsRUFBMkN0RixPQUEzQyxDQUFtRDJGLEtBQUssQ0FBQ00sWUFBekQsQ0FGSjs7QUFHQSxNQUFJb2YsOEJBQThCLEdBQUcsQ0FBQyxDQUF0QyxFQUF5QztBQUN2QyxXQUFPcmhCLFNBQVA7QUFDRDs7QUFDRCxNQUFNb2hCLDhCQUE4QixHQUFHaEUsY0FBYyxDQUFDK0csbUJBQUQsQ0FBckQ7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRy9JLHdCQUF3QixDQUNwRDFaLEtBQUssQ0FBQ0ksY0FEOEMsRUFFcERKLEtBQUssQ0FBQ00sWUFGOEMsQ0FBdEQ7O0FBSUEsTUFBSSxDQUFDbWlCLHFCQUFMLEVBQTRCO0FBQzFCckwsSUFBQUEsT0FBTyxDQUFDalEsR0FBUixDQUFZLGdDQUFaO0FBQ0EsV0FBTzlJLFNBQVA7QUFDRDs7QUFDRCxNQUFJMkIsS0FBSyxDQUFDMGlCLHVCQUFWLEVBQW1DO0FBQ2pDLFFBQU1DLDBCQUEwQixHQUM5QjNpQixLQUFLLENBQUMwaUIsdUJBQU4sQ0FBOEIzbEIsUUFBOUIsS0FBMkNDLElBQUksQ0FBQ0MsWUFBaEQsR0FDSStDLEtBQUssQ0FBQzBpQix1QkFEVixHQUVJMWlCLEtBQUssQ0FBQzBpQix1QkFBTixDQUE4QjVOLFVBSHBDOztBQUlBLFFBQ0U2TiwwQkFBMEIsSUFDMUJBLDBCQUEwQixDQUFDNWxCLFFBQTNCLEtBQXdDQyxJQUFJLENBQUNDLFlBRi9DLEVBR0U7QUFDQSxVQUFJd2xCLHFCQUFxQixLQUFLRSwwQkFBOUIsRUFBMEQ7QUFDeER2TCxRQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksMENBQVo7QUFDQWlRLFFBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWXNVLGNBQWMsQ0FBQ2dILHFCQUFELENBQTFCO0FBQ0FyTCxRQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVlzVSxjQUFjLENBQUNrSCwwQkFBRCxDQUExQjtBQUNEO0FBQ0Y7QUFDRjs7QUFDRCxNQUFNQyxjQUFjLEdBQUdSLGlCQUFpQixDQUFDSyxxQkFBRCxDQUF4QztBQUNBLE1BQU1JLGVBQWUsR0FBR1QsaUJBQWlCLENBQUNFLHFCQUFELENBQXpDO0FBQ0EsTUFBTVEsYUFBYSxHQUFHVixpQkFBaUIsQ0FBQ0ksbUJBQUQsQ0FBdkM7QUFDQSxNQUFJM0QsR0FBSjs7QUFDQSxNQUFJK0QsY0FBYyxJQUFJQyxlQUFsQixJQUFxQ0MsYUFBekMsRUFBd0Q7QUFDdEQsUUFBSUMscUJBQXFCLEdBQUdGLGVBQTVCOztBQUNBLFFBQUksQ0FBQ1IsY0FBTCxFQUFxQjtBQUNuQixVQUFNVyxzQ0FBc0MsR0FBRzdKLHdCQUF3QixDQUNyRW1KLHFCQURxRSxFQUVyRXRpQixLQUFLLENBQUNJLGNBRitELENBQXZFO0FBSUEyaUIsTUFBQUEscUJBQXFCLEdBQ25CRixlQUFlLEdBQ2YsR0FEQSxHQUVBRyxzQ0FGQSxHQUdBLEdBSEEsR0FJQWhqQixLQUFLLENBQUNLLFdBTFI7QUFNRCxLQVhELE1BV087QUFDTCxVQUNFTCxLQUFLLENBQUNLLFdBQU4sSUFBcUIsQ0FBckIsSUFDQUwsS0FBSyxDQUFDSyxXQUFOLEdBQW9CaWlCLHFCQUFxQixDQUFDM2lCLFVBQXRCLENBQWlDbEYsTUFGdkQsRUFHRTtBQUNBLFlBQU0rZSxTQUFTLEdBQUc4SSxxQkFBcUIsQ0FBQzNpQixVQUF0QixDQUFpQ0ssS0FBSyxDQUFDSyxXQUF2QyxDQUFsQjs7QUFDQSxZQUFJbVosU0FBUyxDQUFDemMsUUFBVixLQUF1QkMsSUFBSSxDQUFDQyxZQUFoQyxFQUE4QztBQUM1QzhsQixVQUFBQSxxQkFBcUIsR0FDbkJGLGVBQWUsR0FBRyxHQUFsQixHQUF3QixDQUFDN2lCLEtBQUssQ0FBQ0ssV0FBTixHQUFvQixDQUFyQixJQUEwQixDQURwRDtBQUVELFNBSEQsTUFHTztBQUNMLGNBQU00aUIsZ0JBQWdCLEdBQUc5Six3QkFBd0IsQ0FDL0NtSixxQkFEK0MsRUFFL0M5SSxTQUYrQyxDQUFqRDtBQUlBdUosVUFBQUEscUJBQXFCLEdBQUdGLGVBQWUsR0FBRyxHQUFsQixHQUF3QkksZ0JBQWhEO0FBQ0Q7QUFDRixPQWZELE1BZU87QUFDTCxZQUFNQyxxQkFBcUIsR0FDekJaLHFCQUFxQixDQUFDYSxpQkFBdEIsR0FBMEMsQ0FENUM7QUFFQSxZQUFNQyxhQUFhLEdBQ2pCZCxxQkFBcUIsQ0FBQzNpQixVQUF0QixDQUNFMmlCLHFCQUFxQixDQUFDM2lCLFVBQXRCLENBQWlDbEYsTUFBakMsR0FBMEMsQ0FENUMsQ0FERjs7QUFJQSxZQUFJMm9CLGFBQWEsQ0FBQ3JtQixRQUFkLEtBQTJCQyxJQUFJLENBQUNDLFlBQXBDLEVBQWtEO0FBQ2hEOGxCLFVBQUFBLHFCQUFxQixHQUNuQkYsZUFBZSxHQUFHLEdBQWxCLElBQXlCSyxxQkFBcUIsR0FBRyxDQUFqRCxDQURGO0FBRUQsU0FIRCxNQUdPO0FBQ0xILFVBQUFBLHFCQUFxQixHQUNuQkYsZUFBZSxHQUFHLEdBQWxCLElBQXlCSyxxQkFBcUIsR0FBRyxDQUFqRCxDQURGO0FBRUQ7QUFDRjtBQUNGOztBQUNELFFBQUlHLG1CQUFtQixHQUFHUCxhQUExQjs7QUFDQSxRQUFJLENBQUNQLFlBQUwsRUFBbUI7QUFDakIsVUFBTWUsb0NBQW9DLEdBQUduSyx3QkFBd0IsQ0FDbkVxSixtQkFEbUUsRUFFbkV4aUIsS0FBSyxDQUFDTSxZQUY2RCxDQUFyRTtBQUlBK2lCLE1BQUFBLG1CQUFtQixHQUNqQlAsYUFBYSxHQUNiLEdBREEsR0FFQVEsb0NBRkEsR0FHQSxHQUhBLEdBSUF0akIsS0FBSyxDQUFDTyxTQUxSO0FBTUQsS0FYRCxNQVdPO0FBQ0wsVUFDRVAsS0FBSyxDQUFDTyxTQUFOLElBQW1CLENBQW5CLElBQ0FQLEtBQUssQ0FBQ08sU0FBTixHQUFrQmlpQixtQkFBbUIsQ0FBQzdpQixVQUFwQixDQUErQmxGLE1BRm5ELEVBR0U7QUFDQSxZQUFNK2UsVUFBUyxHQUFHZ0osbUJBQW1CLENBQUM3aUIsVUFBcEIsQ0FBK0JLLEtBQUssQ0FBQ08sU0FBckMsQ0FBbEI7O0FBQ0EsWUFBSWlaLFVBQVMsQ0FBQ3pjLFFBQVYsS0FBdUJDLElBQUksQ0FBQ0MsWUFBaEMsRUFBOEM7QUFDNUNvbUIsVUFBQUEsbUJBQW1CLEdBQUdQLGFBQWEsR0FBRyxHQUFoQixHQUFzQixDQUFDOWlCLEtBQUssQ0FBQ08sU0FBTixHQUFrQixDQUFuQixJQUF3QixDQUFwRTtBQUNELFNBRkQsTUFFTztBQUNMLGNBQU0waUIsaUJBQWdCLEdBQUc5Six3QkFBd0IsQ0FDL0NxSixtQkFEK0MsRUFFL0NoSixVQUYrQyxDQUFqRDs7QUFJQTZKLFVBQUFBLG1CQUFtQixHQUFHUCxhQUFhLEdBQUcsR0FBaEIsR0FBc0JHLGlCQUE1QztBQUNEO0FBQ0YsT0FkRCxNQWNPO0FBQ0wsWUFBTUMsc0JBQXFCLEdBQUdWLG1CQUFtQixDQUFDVyxpQkFBcEIsR0FBd0MsQ0FBdEU7O0FBQ0EsWUFBTUMsY0FBYSxHQUNqQlosbUJBQW1CLENBQUM3aUIsVUFBcEIsQ0FDRTZpQixtQkFBbUIsQ0FBQzdpQixVQUFwQixDQUErQmxGLE1BQS9CLEdBQXdDLENBRDFDLENBREY7O0FBSUEsWUFBSTJvQixjQUFhLENBQUNybUIsUUFBZCxLQUEyQkMsSUFBSSxDQUFDQyxZQUFwQyxFQUFrRDtBQUNoRG9tQixVQUFBQSxtQkFBbUIsR0FDakJQLGFBQWEsR0FBRyxHQUFoQixJQUF1Qkksc0JBQXFCLEdBQUcsQ0FBL0MsQ0FERjtBQUVELFNBSEQsTUFHTztBQUNMRyxVQUFBQSxtQkFBbUIsR0FDakJQLGFBQWEsR0FBRyxHQUFoQixJQUF1Qkksc0JBQXFCLEdBQUcsQ0FBL0MsQ0FERjtBQUVEO0FBQ0Y7QUFDRjs7QUFDRHJFLElBQUFBLEdBQUcsR0FDRCtELGNBQWMsR0FDZCxHQURBLEdBRUFHLHFCQUFxQixDQUFDckksT0FBdEIsQ0FBOEJrSSxjQUE5QixFQUE4QyxFQUE5QyxDQUZBLEdBR0EsR0FIQSxHQUlBUyxtQkFBbUIsQ0FBQzNJLE9BQXBCLENBQTRCa0ksY0FBNUIsRUFBNEMsRUFBNUMsQ0FMRjtBQU1EOztBQUNELFNBQU87QUFDTC9ELElBQUFBLEdBQUcsRUFBSEEsR0FESztBQUVMYSxJQUFBQSw4QkFBOEIsRUFBOUJBLDhCQUZLO0FBR0xELElBQUFBLDhCQUE4QixFQUE5QkEsOEJBSEs7QUFJTGxmLElBQUFBLFNBQVMsRUFBRVAsS0FBSyxDQUFDTyxTQUpaO0FBS0xpZixJQUFBQSxnQ0FBZ0MsRUFBaENBLGdDQUxLO0FBTUxELElBQUFBLGdDQUFnQyxFQUFoQ0EsZ0NBTks7QUFPTGxmLElBQUFBLFdBQVcsRUFBRUwsS0FBSyxDQUFDSztBQVBkLEdBQVA7QUFTRDs7QUFFRCxTQUFTa2IsZ0JBQVQsQ0FBMEJuYyxRQUExQixFQUFvQytiLFNBQXBDLEVBQStDO0FBQzdDLE1BQU1vSSxZQUFZLEdBQUdua0IsUUFBUSxDQUFDd0gsYUFBVCxDQUNuQnVVLFNBQVMsQ0FBQ29FLGdDQURTLENBQXJCOztBQUdBLE1BQUksQ0FBQ2dFLFlBQUwsRUFBbUI7QUFDakJuTSxJQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQVksc0RBQVo7QUFDQSxXQUFPOUksU0FBUDtBQUNEOztBQUNELE1BQUkrQixjQUFjLEdBQUdtakIsWUFBckI7O0FBQ0EsTUFBSXBJLFNBQVMsQ0FBQ3FFLGdDQUFWLElBQThDLENBQWxELEVBQXFEO0FBQ25ELFFBQ0VyRSxTQUFTLENBQUNxRSxnQ0FBVixJQUNBK0QsWUFBWSxDQUFDNWpCLFVBQWIsQ0FBd0JsRixNQUYxQixFQUdFO0FBQ0EyYyxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQ0UscUdBREY7QUFHQSxhQUFPOUksU0FBUDtBQUNEOztBQUNEK0IsSUFBQUEsY0FBYyxHQUNabWpCLFlBQVksQ0FBQzVqQixVQUFiLENBQXdCd2IsU0FBUyxDQUFDcUUsZ0NBQWxDLENBREY7O0FBRUEsUUFBSXBmLGNBQWMsQ0FBQ3JELFFBQWYsS0FBNEJDLElBQUksQ0FBQ0UsU0FBckMsRUFBZ0Q7QUFDOUNrYSxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQ0UsbUVBREY7QUFHQSxhQUFPOUksU0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsTUFBTW1sQixVQUFVLEdBQUdwa0IsUUFBUSxDQUFDd0gsYUFBVCxDQUNqQnVVLFNBQVMsQ0FBQ3NFLDhCQURPLENBQW5COztBQUdBLE1BQUksQ0FBQytELFVBQUwsRUFBaUI7QUFDZnBNLElBQUFBLE9BQU8sQ0FBQ2pRLEdBQVIsQ0FBWSxvREFBWjtBQUNBLFdBQU85SSxTQUFQO0FBQ0Q7O0FBQ0QsTUFBSWlDLFlBQVksR0FBR2tqQixVQUFuQjs7QUFDQSxNQUFJckksU0FBUyxDQUFDdUUsOEJBQVYsSUFBNEMsQ0FBaEQsRUFBbUQ7QUFDakQsUUFDRXZFLFNBQVMsQ0FBQ3VFLDhCQUFWLElBQTRDOEQsVUFBVSxDQUFDN2pCLFVBQVgsQ0FBc0JsRixNQURwRSxFQUVFO0FBQ0EyYyxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQ0UsaUdBREY7QUFHQSxhQUFPOUksU0FBUDtBQUNEOztBQUNEaUMsSUFBQUEsWUFBWSxHQUNWa2pCLFVBQVUsQ0FBQzdqQixVQUFYLENBQXNCd2IsU0FBUyxDQUFDdUUsOEJBQWhDLENBREY7O0FBRUEsUUFBSXBmLFlBQVksQ0FBQ3ZELFFBQWIsS0FBMEJDLElBQUksQ0FBQ0UsU0FBbkMsRUFBOEM7QUFDNUNrYSxNQUFBQSxPQUFPLENBQUNqUSxHQUFSLENBQ0UsaUVBREY7QUFHQSxhQUFPOUksU0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBTzBjLGtCQUFrQixDQUN2QjNhLGNBRHVCLEVBRXZCK2EsU0FBUyxDQUFDOWEsV0FGYSxFQUd2QkMsWUFIdUIsRUFJdkI2YSxTQUFTLENBQUM1YSxTQUphLENBQXpCO0FBTUQ7O0FBRUQsU0FBUzBnQixxQ0FBVCxDQUErQzdNLEdBQS9DLEVBQW9EMVIsRUFBcEQsRUFBd0Q7QUFDdEQsTUFBSXdGLFdBQVcsR0FBR3ViLHVCQUF1QixDQUFDL2dCLEVBQUQsQ0FBekM7QUFDQSxNQUFJLENBQUN3RixXQUFMLEVBQWtCO0FBRWxCLE1BQUl3YixhQUFhLEdBQUd4YixXQUFXLENBQUMsQ0FBRCxDQUEvQjtBQUNBLE1BQUl5YixTQUFTLEdBQUdELGFBQWEsQ0FBQzdiLE1BQTlCOztBQUxzRCx3REFNN0JLLFdBTjZCO0FBQUE7O0FBQUE7QUFNdEQsOERBQXNDO0FBQUEsVUFBM0J3SCxVQUEyQjtBQUNwQyxVQUFJQSxVQUFVLENBQUNsSyxHQUFYLEdBQWlCa2UsYUFBYSxDQUFDbGUsR0FBbkMsRUFBd0NrZSxhQUFhLEdBQUdoVSxVQUFoQjtBQUN4QyxVQUFJQSxVQUFVLENBQUM3SCxNQUFYLEdBQW9COGIsU0FBeEIsRUFBbUNBLFNBQVMsR0FBR2pVLFVBQVUsQ0FBQzdILE1BQXZCO0FBQ3BDO0FBVHFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBV3RELE1BQU16SSxRQUFRLEdBQUdnVixHQUFHLENBQUNoVixRQUFyQjtBQUVBLE1BQU0rVixhQUFhLEdBQUdDLG1CQUFtQixDQUFDaFcsUUFBRCxDQUF6QztBQUNBLE1BQU1rVyxTQUFTLEdBQUdDLFdBQVcsQ0FBQ25XLFFBQUQsQ0FBN0I7QUFDQSxNQUFNb1csUUFBUSxHQUFHcFcsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcUMscUJBQWQsRUFBakI7QUFDQSxNQUFJbUssT0FBSjs7QUFDQSxNQUFJMEcsU0FBUyxDQUFDQyxTQUFWLENBQW9CdmEsS0FBcEIsQ0FBMEIsVUFBMUIsQ0FBSixFQUEyQztBQUN6QzRULElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFDSCxhQUFhLENBQUNuUSxTQUFsQixHQUE4QndRLFFBQVEsQ0FBQ2hRLEdBQTFEO0FBQ0QsR0FGRCxNQUVPLElBQUlpUSxTQUFTLENBQUNDLFNBQVYsQ0FBb0J2YSxLQUFwQixDQUEwQixtQkFBMUIsQ0FBSixFQUFvRDtBQUN6RDRULElBQUFBLE9BQU8sR0FBR3VHLFNBQVMsR0FBRyxDQUFILEdBQU9FLFFBQVEsQ0FBQ2hRLEdBQW5DO0FBQ0Q7O0FBQ0QsTUFBSW9lLE1BQU0sR0FBR0YsYUFBYSxDQUFDbGUsR0FBM0I7O0FBRUEsTUFBSXlOLG9CQUFKLEVBQTBCO0FBQ3hCLE9BQUc7QUFDRCxVQUFJNFEsYUFBYSxHQUFHemtCLFFBQVEsQ0FBQzBrQixzQkFBVCxDQUNsQmxSLDhCQURrQixDQUFwQjtBQUdBLFVBQUl5RyxLQUFLLEdBQUcsS0FBWixDQUpDLENBS0Q7O0FBQ0EsV0FDRSxJQUFJelosQ0FBQyxHQUFHLENBQVIsRUFBV21rQixHQUFHLEdBQUdGLGFBQWEsQ0FBQ3BwQixNQUFkLEdBQXVCLENBRDFDLEVBRUVtRixDQUFDLEdBQUdta0IsR0FGTixFQUdFbmtCLENBQUMsR0FBSUEsQ0FBQyxHQUFHLENBQUwsR0FBVSxDQUhoQixFQUlFO0FBQ0EsWUFBSW9rQixZQUFZLEdBQUdILGFBQWEsQ0FBQ2prQixDQUFELENBQWhDOztBQUNBLFlBQUk1RSxJQUFJLENBQUNrQixHQUFMLENBQVM4bkIsWUFBWSxDQUFDemUsSUFBYixDQUFrQkMsR0FBbEIsSUFBeUJvZSxNQUFNLEdBQUc3VSxPQUFsQyxDQUFULElBQXVELENBQTNELEVBQThEO0FBQzVENlUsVUFBQUEsTUFBTSxJQUFJSSxZQUFZLENBQUN6ZSxJQUFiLENBQWtCc0MsTUFBNUI7QUFDQXdSLFVBQUFBLEtBQUssR0FBRyxJQUFSO0FBQ0E7QUFDRDtBQUNGO0FBQ0YsS0FsQkQsUUFrQlNBLEtBbEJUO0FBbUJEOztBQUVEcUssRUFBQUEsYUFBYSxDQUFDbGUsR0FBZCxHQUFvQm9lLE1BQXBCO0FBQ0FGLEVBQUFBLGFBQWEsQ0FBQzdiLE1BQWQsR0FBdUI4YixTQUF2QjtBQUVBLFNBQU9ELGFBQVA7QUFDRDs7QUFFRCxTQUFTTyxlQUFULENBQXlCdmhCLEVBQXpCLEVBQTZCO0FBQzNCLE1BQUk5QyxDQUFDLEdBQUcsQ0FBQyxDQUFUOztBQUNBLE1BQU02RyxTQUFTLEdBQUd1TSxXQUFXLENBQUMrQixJQUFaLENBQWlCLFVBQUNDLENBQUQsRUFBSWxNLENBQUosRUFBVTtBQUMzQ2xKLElBQUFBLENBQUMsR0FBR2tKLENBQUo7QUFDQSxXQUFPa00sQ0FBQyxDQUFDdFMsRUFBRixLQUFTQSxFQUFoQjtBQUNELEdBSGlCLENBQWxCOztBQUlBLFNBQU8rRCxTQUFQO0FBQ0Q7O0FBRUQsU0FBU2dkLHVCQUFULENBQWlDL2dCLEVBQWpDLEVBQXFDO0FBQ25DLE1BQU0rRCxTQUFTLEdBQUd3ZCxlQUFlLENBQUN2aEIsRUFBRCxDQUFqQztBQUNBLE1BQUksQ0FBQytELFNBQUwsRUFBZ0I7QUFFaEIsTUFBTXJILFFBQVEsR0FBR3VDLE1BQU0sQ0FBQ3ZDLFFBQXhCO0FBQ0EsTUFBTStWLGFBQWEsR0FBR0MsbUJBQW1CLENBQUNoVyxRQUFELENBQXpDO0FBQ0EsTUFBTVksS0FBSyxHQUFHdWIsZ0JBQWdCLENBQUNuYyxRQUFELEVBQVdxSCxTQUFTLENBQUMwVSxTQUFyQixDQUE5Qjs7QUFDQSxNQUFJLENBQUNuYixLQUFMLEVBQVk7QUFDVixXQUFPM0IsU0FBUDtBQUNEOztBQUVELE1BQU1vaUIsYUFBYSxHQUFHLEtBQXRCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsS0FBMUI7QUFDQSxNQUFNelksa0NBQWtDLEdBQUd3WSxhQUFhLElBQUlDLGlCQUE1RCxDQWJtQyxDQWNuQzs7QUFDQSxNQUFNeFksV0FBVyxHQUFHRixpQ0FBdUIsQ0FDekNoSSxLQUR5QyxFQUV6Q2lJLGtDQUZ5QyxDQUEzQztBQUtBLFNBQU9DLFdBQVA7QUFDRDs7QUFFRCxTQUFTd1Qsa0JBQVQsQ0FBNEJQLFNBQTVCLEVBQXVDO0FBQ3JDLFNBQU87QUFDTHhVLElBQUFBLFdBQVcsRUFBRXdVLFNBQVMsQ0FBQ29FLGdDQURsQjtBQUVMMkUsSUFBQUEsVUFBVSxFQUFFL0ksU0FBUyxDQUFDMEQsR0FGakI7QUFHTHNGLElBQUFBLFFBQVEsRUFBRTtBQUNSNXBCLE1BQUFBLEtBQUssRUFBRTtBQUNMb00sUUFBQUEsV0FBVyxFQUFFd1UsU0FBUyxDQUFDb0UsZ0NBRGxCO0FBRUxqRyxRQUFBQSxhQUFhLEVBQUU2QixTQUFTLENBQUNxRSxnQ0FGcEI7QUFHTHZqQixRQUFBQSxNQUFNLEVBQUVrZixTQUFTLENBQUM5YTtBQUhiLE9BREM7QUFNUjdGLE1BQUFBLEdBQUcsRUFBRTtBQUNIbU0sUUFBQUEsV0FBVyxFQUFFd1UsU0FBUyxDQUFDc0UsOEJBRHBCO0FBRUhuRyxRQUFBQSxhQUFhLEVBQUU2QixTQUFTLENBQUN1RSw4QkFGdEI7QUFHSHpqQixRQUFBQSxNQUFNLEVBQUVrZixTQUFTLENBQUM1YTtBQUhmO0FBTkc7QUFITCxHQUFQO0FBZ0JEOztBQUVELFNBQVM4ZSxrQkFBVCxDQUE0QitFLFFBQTVCLEVBQXNDO0FBQ3BDLE1BQU0xZCxTQUFTLEdBQUcwZCxRQUFRLENBQUMxZCxTQUEzQjtBQUNBLE1BQU15ZCxRQUFRLEdBQUd6ZCxTQUFTLENBQUN5ZCxRQUEzQjtBQUNBLE1BQU01cEIsS0FBSyxHQUFHNHBCLFFBQVEsQ0FBQzVwQixLQUF2QjtBQUNBLE1BQU1DLEdBQUcsR0FBRzJwQixRQUFRLENBQUMzcEIsR0FBckI7QUFFQSxTQUFPO0FBQ0xxa0IsSUFBQUEsR0FBRyxFQUFFdUYsUUFBUSxDQUFDRixVQURUO0FBRUx4RSxJQUFBQSw4QkFBOEIsRUFBRWxsQixHQUFHLENBQUM4ZSxhQUYvQjtBQUdMbUcsSUFBQUEsOEJBQThCLEVBQUVqbEIsR0FBRyxDQUFDbU0sV0FIL0I7QUFJTHBHLElBQUFBLFNBQVMsRUFBRS9GLEdBQUcsQ0FBQ3lCLE1BSlY7QUFLTHVqQixJQUFBQSxnQ0FBZ0MsRUFBRWpsQixLQUFLLENBQUMrZSxhQUxuQztBQU1MaUcsSUFBQUEsZ0NBQWdDLEVBQUVobEIsS0FBSyxDQUFDb00sV0FObkM7QUFPTHRHLElBQUFBLFdBQVcsRUFBRTlGLEtBQUssQ0FBQzBCO0FBUGQsR0FBUDtBQVNEOztBQUVNLFNBQVNvb0IsMkJBQVQsQ0FBcUMzaEIsRUFBckMsRUFBeUM7QUFDOUMsTUFBTStELFNBQVMsR0FBR3dkLGVBQWUsQ0FBQ3ZoQixFQUFELENBQWpDO0FBQ0EsTUFBSSxDQUFDK0QsU0FBTCxFQUFnQjtBQUVoQixNQUFNckgsUUFBUSxHQUFHdUMsTUFBTSxDQUFDdkMsUUFBeEI7QUFDQSxNQUFNK1YsYUFBYSxHQUFHQyxtQkFBbUIsQ0FBQ2hXLFFBQUQsQ0FBekM7QUFDQSxNQUFNWSxLQUFLLEdBQUd1YixnQkFBZ0IsQ0FBQ25jLFFBQUQsRUFBV3FILFNBQVMsQ0FBQzBVLFNBQXJCLENBQTlCOztBQUNBLE1BQUksQ0FBQ25iLEtBQUwsRUFBWTtBQUNWLFdBQU8zQixTQUFQO0FBQ0Q7O0FBRUQsTUFBTW9pQixhQUFhLEdBQUcsS0FBdEI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxLQUExQjtBQUNBLE1BQU16WSxrQ0FBa0MsR0FBR3dZLGFBQWEsSUFBSUMsaUJBQTVELENBYjhDLENBYzlDOztBQUNBLE1BQU14WSxXQUFXLEdBQUdGLGlDQUF1QixDQUN6Q2hJLEtBRHlDLEVBRXpDaUksa0NBRnlDLENBQTNDO0FBSUEsTUFBSTBFLElBQUksR0FBRztBQUNUOEosSUFBQUEsV0FBVyxFQUFFOVUsTUFBTSxDQUFDK1UsVUFEWDtBQUVUQyxJQUFBQSxZQUFZLEVBQUVoVixNQUFNLENBQUNpVixXQUZaO0FBR1RqUixJQUFBQSxJQUFJLEVBQUV1QyxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWV2QyxJQUhaO0FBSVQ5QixJQUFBQSxLQUFLLEVBQUVxRSxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWVyRSxLQUpiO0FBS1QyQixJQUFBQSxHQUFHLEVBQUUwQyxXQUFXLENBQUMsQ0FBRCxDQUFYLENBQWUxQyxHQUxYO0FBTVRxQyxJQUFBQSxNQUFNLEVBQUVLLFdBQVcsQ0FBQyxDQUFELENBQVgsQ0FBZUw7QUFOZCxHQUFYO0FBU0EsU0FBTzhFLElBQVA7QUFDRDtBQUVNLFNBQVMyWCxnQkFBVCxHQUE0QjtBQUNqQyxNQUFJO0FBQ0YsUUFBSUMsR0FBRyxHQUFHNWlCLE1BQU0sQ0FBQzBPLFlBQVAsRUFBVjs7QUFDQSxRQUFJLENBQUNrVSxHQUFMLEVBQVU7QUFDUjtBQUNEOztBQUNELFFBQUl2a0IsS0FBSyxHQUFHdWtCLEdBQUcsQ0FBQ3pKLFVBQUosQ0FBZSxDQUFmLENBQVo7QUFFQSxRQUFNcEwsVUFBVSxHQUFHMVAsS0FBSyxDQUFDNEUscUJBQU4sRUFBbkI7QUFFQSxRQUFJNGYsWUFBWSxHQUFHO0FBQ2pCL04sTUFBQUEsV0FBVyxFQUFFOVUsTUFBTSxDQUFDK1UsVUFESDtBQUVqQkMsTUFBQUEsWUFBWSxFQUFFaFYsTUFBTSxDQUFDaVYsV0FGSjtBQUdqQmpSLE1BQUFBLElBQUksRUFBRStKLFVBQVUsQ0FBQy9KLElBSEE7QUFJakI5QixNQUFBQSxLQUFLLEVBQUU2TCxVQUFVLENBQUM3TCxLQUpEO0FBS2pCMkIsTUFBQUEsR0FBRyxFQUFFa0ssVUFBVSxDQUFDbEssR0FMQztBQU1qQnFDLE1BQUFBLE1BQU0sRUFBRTZILFVBQVUsQ0FBQzdIO0FBTkYsS0FBbkI7QUFRQSxXQUFPMmMsWUFBUDtBQUNELEdBbEJELENBa0JFLE9BQU94ZCxDQUFQLEVBQVU7QUFDVixXQUFPLElBQVA7QUFDRDtBQUNGO0FBRU0sU0FBU3lkLGFBQVQsQ0FBdUJDLElBQXZCLEVBQTZCO0FBQ2xDLE1BQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1R0bEIsSUFBQUEsUUFBUSxDQUFDK0UsZUFBVCxDQUF5QnNVLFNBQXpCLENBQW1DM0ssR0FBbkMsQ0FBdUNnRixlQUF2QztBQUNELEdBRkQsTUFFTztBQUNMMVQsSUFBQUEsUUFBUSxDQUFDK0UsZUFBVCxDQUF5QnNVLFNBQXpCLENBQW1DMVYsTUFBbkMsQ0FBMEMrUCxlQUExQztBQUNEO0FBQ0Y7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7QUN6ekVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRU8sU0FBUzZSLHVCQUFULEdBQW1DO0FBQ3hDLE1BQU1ubkIsT0FBTyxHQUFHb25CLDRCQUE0QixFQUE1Qzs7QUFDQSxNQUFJLENBQUNwbkIsT0FBTCxFQUFjO0FBQ1osV0FBT2EsU0FBUDtBQUNEOztBQUVELFNBQU87QUFDTHdtQixJQUFBQSxJQUFJLEVBQUUsR0FERDtBQUVMN2pCLElBQUFBLElBQUksRUFBRSx1QkFGRDtBQUdMMEYsSUFBQUEsU0FBUyxFQUFFO0FBQ1RDLE1BQUFBLFdBQVcsRUFBRThVLHdCQUFjLENBQUNqZSxPQUFEO0FBRGxCLEtBSE47QUFNTHhELElBQUFBLElBQUksRUFBRTtBQUNKeU0sTUFBQUEsU0FBUyxFQUFFakosT0FBTyxDQUFDTDtBQURmO0FBTkQsR0FBUDtBQVVEOztBQUVELFNBQVN5bkIsNEJBQVQsR0FBd0M7QUFDdEMsU0FBT0UsV0FBVyxDQUNoQjFsQixRQUFRLENBQUNtRCxJQURPLEVBRWhCLFVBQUMvRSxPQUFEO0FBQUEsV0FBYW1FLE1BQU0sQ0FBQ3VDLGdCQUFQLENBQXdCMUcsT0FBeEIsRUFBaUN1bkIsT0FBakMsSUFBNEMsT0FBekQ7QUFBQSxHQUZnQixDQUFsQjtBQUlEOztBQUVELFNBQVNELFdBQVQsQ0FBcUJFLFdBQXJCLEVBQWtDQyxZQUFsQyxFQUFnRDtBQUM5QyxNQUFJclAsWUFBWSxHQUFHdlgsU0FBbkI7O0FBQ0EsT0FBSyxJQUFJdUIsQ0FBQyxHQUFHb2xCLFdBQVcsQ0FBQ2hWLFFBQVosQ0FBcUJ2VixNQUFyQixHQUE4QixDQUEzQyxFQUE4Q21GLENBQUMsSUFBSSxDQUFuRCxFQUFzREEsQ0FBQyxFQUF2RCxFQUEyRDtBQUN6RCxRQUFNd1osS0FBSyxHQUFHNEwsV0FBVyxDQUFDaFYsUUFBWixDQUFxQnBRLENBQXJCLENBQWQ7QUFDQSxRQUFNcEMsT0FBTyxHQUFHc25CLFdBQVcsQ0FBQzFMLEtBQUQsRUFBUTZMLFlBQVIsQ0FBM0I7O0FBQ0EsUUFBSXpuQixPQUFKLEVBQWE7QUFDWCxhQUFPQSxPQUFQO0FBQ0Q7QUFDRjs7QUFFRCxNQUFJMG5CLGdCQUFnQixDQUFDRixXQUFELEVBQWMzbUIsU0FBZCxFQUF5QjRtQixZQUF6QixDQUFwQixFQUE0RDtBQUMxRCxXQUFPRCxXQUFQO0FBQ0Q7QUFDRixFQUVEOzs7QUFDQSxTQUFTRSxnQkFBVCxDQUEwQjFuQixPQUExQixFQUFtQzJuQjtBQUFRO0FBQTNDLEVBQTJERixZQUEzRCxFQUF5RTtBQUN2RSxNQUNFRyxPQUFPLENBQUM5RSxhQUFSLElBQ0E5aUIsT0FBTyxLQUFLNEIsUUFBUSxDQUFDbUQsSUFEckIsSUFFQS9FLE9BQU8sS0FBSzRCLFFBQVEsQ0FBQytFLGVBSHZCLEVBSUU7QUFDQSxXQUFPLElBQVA7QUFDRDs7QUFDRCxNQUNFLENBQUMvRSxRQUFELElBQ0EsQ0FBQ0EsUUFBUSxDQUFDK0UsZUFEVixJQUVBLENBQUMvRSxRQUFRLENBQUNtRCxJQUZWLElBR0MwaUIsWUFBWSxJQUFJQSxZQUFZLENBQUN6bkIsT0FBRCxDQUovQixFQUtFO0FBQ0EsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsTUFBTTZuQixPQUFPLEdBQUduaEIsZ0JBQWdCLENBQUMxRyxPQUFELENBQWhDOztBQUNBLE1BQUk2bkIsT0FBSixFQUFhO0FBQ1gsUUFBTU4sT0FBTyxHQUFHTSxPQUFPLENBQUNqaEIsZ0JBQVIsQ0FBeUIsU0FBekIsQ0FBaEI7O0FBQ0EsUUFBSTJnQixPQUFPLEtBQUssTUFBaEIsRUFBd0I7QUFDdEIsYUFBTyxLQUFQO0FBQ0QsS0FKVSxDQUtYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsUUFBTXBRLE9BQU8sR0FBRzBRLE9BQU8sQ0FBQ2poQixnQkFBUixDQUF5QixTQUF6QixDQUFoQjs7QUFDQSxRQUFJdVEsT0FBTyxLQUFLLEdBQWhCLEVBQXFCO0FBQ25CLGFBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBRUQsTUFBTXBQLElBQUksR0FBRzRmLE9BQU8sSUFBSTNuQixPQUFPLENBQUNvSCxxQkFBUixFQUF4QjtBQUVBLE1BQU11USxhQUFhLEdBQUcvVixRQUFRLENBQUM2RCxnQkFBL0I7O0FBQ0EsTUFBSUosbUJBQW1CLEVBQXZCLEVBQTJCO0FBQ3pCLFdBQU8wQyxJQUFJLENBQUNDLEdBQUwsSUFBWSxDQUFaLElBQWlCRCxJQUFJLENBQUNDLEdBQUwsSUFBWXBHLFFBQVEsQ0FBQytFLGVBQVQsQ0FBeUJnTSxZQUE3RDtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU81SyxJQUFJLENBQUNJLElBQUwsR0FBWXZDLFNBQW5CO0FBQ0Q7QUFDRixDOzs7OztBQzdGRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtDQUdBOztBQUNBO0FBQ0FraUIsd0NBQUE7QUFFQSxJQUFNNWQsZUFBSyxHQUFHLElBQWQ7QUFFTyxTQUFTOGQsbUJBQVQsR0FBK0I7QUFDcEMsTUFBTXhyQixJQUFJLEdBQUd5ckIsdUJBQXVCLEVBQXBDOztBQUNBLE1BQUksQ0FBQ3pyQixJQUFMLEVBQVc7QUFDVCxXQUFPLElBQVA7QUFDRDs7QUFDRCxNQUFNdUwsSUFBSSxHQUFHK2UsMEJBQWdCLEVBQTdCO0FBQ0EsU0FBTztBQUFFdHFCLElBQUFBLElBQUksRUFBSkEsSUFBRjtBQUFRdUwsSUFBQUEsSUFBSSxFQUFKQTtBQUFSLEdBQVA7QUFDRDs7QUFFRCxTQUFTK2UsMEJBQVQsR0FBNEI7QUFDMUIsTUFBSTtBQUNGLFFBQUlDLEdBQUcsR0FBRzVpQixNQUFNLENBQUMwTyxZQUFQLEVBQVY7O0FBQ0EsUUFBSSxDQUFDa1UsR0FBTCxFQUFVO0FBQ1I7QUFDRDs7QUFDRCxRQUFJdmtCLEtBQUssR0FBR3VrQixHQUFHLENBQUN6SixVQUFKLENBQWUsQ0FBZixDQUFaO0FBRUEsV0FBT25ULFlBQVksQ0FBQzNILEtBQUssQ0FBQzRFLHFCQUFOLEVBQUQsQ0FBbkI7QUFDRCxHQVJELENBUUUsT0FBT29DLENBQVAsRUFBVTtBQUNWakYsSUFBQUEsUUFBUSxDQUFDaUYsQ0FBRCxDQUFSO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTeWUsdUJBQVQsR0FBbUM7QUFDakMsTUFBTWxMLFNBQVMsR0FBRzVZLE1BQU0sQ0FBQzBPLFlBQVAsRUFBbEI7O0FBQ0EsTUFBSSxDQUFDa0ssU0FBTCxFQUFnQjtBQUNkLFdBQU9sYyxTQUFQO0FBQ0Q7O0FBQ0QsTUFBSWtjLFNBQVMsQ0FBQ2pLLFdBQWQsRUFBMkI7QUFDekIsV0FBT2pTLFNBQVA7QUFDRDs7QUFDRCxNQUFNb0ksU0FBUyxHQUFHOFQsU0FBUyxDQUFDbFcsUUFBVixFQUFsQjtBQUNBLE1BQU1xaEIsY0FBYyxHQUFHamYsU0FBUyxDQUM3Qm5DLElBRG9CLEdBRXBCb1csT0FGb0IsQ0FFWixLQUZZLEVBRUwsR0FGSyxFQUdwQkEsT0FIb0IsQ0FHWixRQUhZLEVBR0YsR0FIRSxDQUF2Qjs7QUFJQSxNQUFJZ0wsY0FBYyxDQUFDanJCLE1BQWYsS0FBMEIsQ0FBOUIsRUFBaUM7QUFDL0IsV0FBTzRELFNBQVA7QUFDRDs7QUFDRCxNQUFJLENBQUNrYyxTQUFTLENBQUNJLFVBQVgsSUFBeUIsQ0FBQ0osU0FBUyxDQUFDSyxTQUF4QyxFQUFtRDtBQUNqRCxXQUFPdmMsU0FBUDtBQUNEOztBQUNELE1BQU0yQixLQUFLLEdBQ1R1YSxTQUFTLENBQUNNLFVBQVYsS0FBeUIsQ0FBekIsR0FDSU4sU0FBUyxDQUFDTyxVQUFWLENBQXFCLENBQXJCLENBREosR0FFSUMsNEJBQWtCLENBQ2hCUixTQUFTLENBQUNJLFVBRE0sRUFFaEJKLFNBQVMsQ0FBQ1MsWUFGTSxFQUdoQlQsU0FBUyxDQUFDSyxTQUhNLEVBSWhCTCxTQUFTLENBQUNVLFdBSk0sQ0FIeEI7O0FBU0EsTUFBSSxDQUFDamIsS0FBRCxJQUFVQSxLQUFLLENBQUNrYixTQUFwQixFQUErQjtBQUM3Qi9ULElBQUFBLGFBQUcsQ0FBQyw4REFBRCxDQUFIO0FBQ0EsV0FBTzlJLFNBQVA7QUFDRDs7QUFFRCxNQUFNckUsSUFBSSxHQUFHb0YsUUFBUSxDQUFDbUQsSUFBVCxDQUFjcEYsV0FBM0I7QUFDQSxNQUFNNEQsU0FBUyxHQUFHbEIsOEJBQUEsQ0FBb0JHLEtBQXBCLEVBQTJCRixVQUEzQixDQUFzQ1YsUUFBUSxDQUFDbUQsSUFBL0MsQ0FBbEI7QUFDQSxNQUFNaEksS0FBSyxHQUFHd0csU0FBUyxDQUFDeEcsS0FBVixDQUFnQjBCLE1BQTlCO0FBQ0EsTUFBTXpCLEdBQUcsR0FBR3VHLFNBQVMsQ0FBQ3ZHLEdBQVYsQ0FBY3lCLE1BQTFCO0FBRUEsTUFBTTBwQixhQUFhLEdBQUcsR0FBdEIsQ0F0Q2lDLENBd0NqQzs7QUFDQSxNQUFJN2UsTUFBTSxHQUFHOU0sSUFBSSxDQUFDMkIsS0FBTCxDQUFXWCxJQUFJLENBQUNZLEdBQUwsQ0FBUyxDQUFULEVBQVlyQixLQUFLLEdBQUdvckIsYUFBcEIsQ0FBWCxFQUErQ3ByQixLQUEvQyxDQUFiO0FBQ0EsTUFBSXFyQixjQUFjLEdBQUc5ZSxNQUFNLENBQUMvTSxNQUFQLENBQWMsMDlkQUFkLENBQXJCOztBQUNBLE1BQUk2ckIsY0FBYyxLQUFLLENBQUMsQ0FBeEIsRUFBMkI7QUFDekI5ZSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ25MLEtBQVAsQ0FBYWlxQixjQUFjLEdBQUcsQ0FBOUIsQ0FBVDtBQUNELEdBN0NnQyxDQStDakM7OztBQUNBLE1BQUk3ZSxLQUFLLEdBQUcvTSxJQUFJLENBQUMyQixLQUFMLENBQVduQixHQUFYLEVBQWdCUSxJQUFJLENBQUNDLEdBQUwsQ0FBU2pCLElBQUksQ0FBQ1MsTUFBZCxFQUFzQkQsR0FBRyxHQUFHbXJCLGFBQTVCLENBQWhCLENBQVo7QUFDQSxNQUFJRSxXQUFXLEdBQUd6ZSxLQUFLLENBQUNnRCxJQUFOLENBQVdyRCxLQUFLLENBQUN1ZSxRQUFOLENBQWUsMDlkQUFmLENBQVgsRUFBMkNRLEdBQTNDLEVBQWxCOztBQUNBLE1BQUlELFdBQVcsS0FBS3huQixTQUFoQixJQUE2QnduQixXQUFXLENBQUM1WCxLQUFaLEdBQW9CLENBQXJELEVBQXdEO0FBQ3REbEgsSUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNwTCxLQUFOLENBQVksQ0FBWixFQUFla3FCLFdBQVcsQ0FBQzVYLEtBQVosR0FBb0IsQ0FBbkMsQ0FBUjtBQUNEOztBQUVELFNBQU87QUFBRXhILElBQUFBLFNBQVMsRUFBVEEsU0FBRjtBQUFhSyxJQUFBQSxNQUFNLEVBQU5BLE1BQWI7QUFBcUJDLElBQUFBLEtBQUssRUFBTEE7QUFBckIsR0FBUDtBQUNEOztBQUVELFNBQVNnVSw0QkFBVCxDQUE0QmtILFNBQTVCLEVBQXVDNWhCLFdBQXZDLEVBQW9ENmhCLE9BQXBELEVBQTZEM2hCLFNBQTdELEVBQXdFO0FBQ3RFLE1BQU1QLEtBQUssR0FBRyxJQUFJQyxLQUFKLEVBQWQ7QUFDQUQsRUFBQUEsS0FBSyxDQUFDRSxRQUFOLENBQWUraEIsU0FBZixFQUEwQjVoQixXQUExQjtBQUNBTCxFQUFBQSxLQUFLLENBQUNHLE1BQU4sQ0FBYStoQixPQUFiLEVBQXNCM2hCLFNBQXRCOztBQUNBLE1BQUksQ0FBQ1AsS0FBSyxDQUFDa2IsU0FBWCxFQUFzQjtBQUNwQixXQUFPbGIsS0FBUDtBQUNEOztBQUNEbUgsRUFBQUEsYUFBRyxDQUFDLHFEQUFELENBQUg7QUFDQSxNQUFNZ2IsWUFBWSxHQUFHLElBQUlsaUIsS0FBSixFQUFyQjtBQUNBa2lCLEVBQUFBLFlBQVksQ0FBQ2ppQixRQUFiLENBQXNCZ2lCLE9BQXRCLEVBQStCM2hCLFNBQS9CO0FBQ0E0aEIsRUFBQUEsWUFBWSxDQUFDaGlCLE1BQWIsQ0FBb0I4aEIsU0FBcEIsRUFBK0I1aEIsV0FBL0I7O0FBQ0EsTUFBSSxDQUFDOGhCLFlBQVksQ0FBQ2pILFNBQWxCLEVBQTZCO0FBQzNCL1QsSUFBQUEsYUFBRyxDQUFDLDBDQUFELENBQUg7QUFDQSxXQUFPbkgsS0FBUDtBQUNEOztBQUNEbUgsRUFBQUEsYUFBRyxDQUFDLHVEQUFELENBQUg7QUFDQSxTQUFPOUksU0FBUDtBQUNEOztBQUVNLFNBQVNrZCwwQkFBVCxDQUEwQm5jLFFBQTFCLEVBQW9DK2IsU0FBcEMsRUFBK0M7QUFDcEQsTUFBTW9JLFlBQVksR0FBR25rQixRQUFRLENBQUN3SCxhQUFULENBQ25CdVUsU0FBUyxDQUFDb0UsZ0NBRFMsQ0FBckI7O0FBR0EsTUFBSSxDQUFDZ0UsWUFBTCxFQUFtQjtBQUNqQnBjLElBQUFBLGFBQUcsQ0FBQyxzREFBRCxDQUFIO0FBQ0EsV0FBTzlJLFNBQVA7QUFDRDs7QUFDRCxNQUFJK0IsY0FBYyxHQUFHbWpCLFlBQXJCOztBQUNBLE1BQUlwSSxTQUFTLENBQUNxRSxnQ0FBVixJQUE4QyxDQUFsRCxFQUFxRDtBQUNuRCxRQUNFckUsU0FBUyxDQUFDcUUsZ0NBQVYsSUFDQStELFlBQVksQ0FBQzVqQixVQUFiLENBQXdCbEYsTUFGMUIsRUFHRTtBQUNBME0sTUFBQUEsYUFBRyxDQUNELHFHQURDLENBQUg7QUFHQSxhQUFPOUksU0FBUDtBQUNEOztBQUNEK0IsSUFBQUEsY0FBYyxHQUNabWpCLFlBQVksQ0FBQzVqQixVQUFiLENBQXdCd2IsU0FBUyxDQUFDcUUsZ0NBQWxDLENBREY7O0FBRUEsUUFBSXBmLGNBQWMsQ0FBQ3JELFFBQWYsS0FBNEJDLElBQUksQ0FBQ0UsU0FBckMsRUFBZ0Q7QUFDOUNpSyxNQUFBQSxhQUFHLENBQUMsbUVBQUQsQ0FBSDtBQUNBLGFBQU85SSxTQUFQO0FBQ0Q7QUFDRjs7QUFDRCxNQUFNbWxCLFVBQVUsR0FBR3BrQixRQUFRLENBQUN3SCxhQUFULENBQ2pCdVUsU0FBUyxDQUFDc0UsOEJBRE8sQ0FBbkI7O0FBR0EsTUFBSSxDQUFDK0QsVUFBTCxFQUFpQjtBQUNmcmMsSUFBQUEsYUFBRyxDQUFDLG9EQUFELENBQUg7QUFDQSxXQUFPOUksU0FBUDtBQUNEOztBQUNELE1BQUlpQyxZQUFZLEdBQUdrakIsVUFBbkI7O0FBQ0EsTUFBSXJJLFNBQVMsQ0FBQ3VFLDhCQUFWLElBQTRDLENBQWhELEVBQW1EO0FBQ2pELFFBQ0V2RSxTQUFTLENBQUN1RSw4QkFBVixJQUE0QzhELFVBQVUsQ0FBQzdqQixVQUFYLENBQXNCbEYsTUFEcEUsRUFFRTtBQUNBME0sTUFBQUEsYUFBRyxDQUNELGlHQURDLENBQUg7QUFHQSxhQUFPOUksU0FBUDtBQUNEOztBQUNEaUMsSUFBQUEsWUFBWSxHQUNWa2pCLFVBQVUsQ0FBQzdqQixVQUFYLENBQXNCd2IsU0FBUyxDQUFDdUUsOEJBQWhDLENBREY7O0FBRUEsUUFBSXBmLFlBQVksQ0FBQ3ZELFFBQWIsS0FBMEJDLElBQUksQ0FBQ0UsU0FBbkMsRUFBOEM7QUFDNUNpSyxNQUFBQSxhQUFHLENBQUMsaUVBQUQsQ0FBSDtBQUNBLGFBQU85SSxTQUFQO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPMGMsNEJBQWtCLENBQ3ZCM2EsY0FEdUIsRUFFdkIrYSxTQUFTLENBQUM5YSxXQUZhLEVBR3ZCQyxZQUh1QixFQUl2QjZhLFNBQVMsQ0FBQzVhLFNBSmEsQ0FBekI7QUFNRDtBQUVNLFNBQVM4ZSw0QkFBVCxDQUE0QitFLFFBQTVCLEVBQXNDO0FBQzNDLE1BQU0xZCxTQUFTLEdBQUcwZCxRQUFRLENBQUMxZCxTQUEzQjtBQUNBLE1BQU15ZCxRQUFRLEdBQUd6ZCxTQUFTLENBQUN5ZCxRQUEzQjtBQUNBLE1BQU01cEIsS0FBSyxHQUFHNHBCLFFBQVEsQ0FBQzVwQixLQUF2QjtBQUNBLE1BQU1DLEdBQUcsR0FBRzJwQixRQUFRLENBQUMzcEIsR0FBckI7QUFFQSxTQUFPO0FBQ0xrbEIsSUFBQUEsOEJBQThCLEVBQUVsbEIsR0FBRyxDQUFDOGUsYUFEL0I7QUFFTG1HLElBQUFBLDhCQUE4QixFQUFFamxCLEdBQUcsQ0FBQ21NLFdBRi9CO0FBR0xwRyxJQUFBQSxTQUFTLEVBQUUvRixHQUFHLENBQUN5QixNQUhWO0FBSUx1akIsSUFBQUEsZ0NBQWdDLEVBQUVqbEIsS0FBSyxDQUFDK2UsYUFKbkM7QUFLTGlHLElBQUFBLGdDQUFnQyxFQUFFaGxCLEtBQUssQ0FBQ29NLFdBTG5DO0FBTUx0RyxJQUFBQSxXQUFXLEVBQUU5RixLQUFLLENBQUMwQjtBQU5kLEdBQVA7QUFRRDs7QUFFRCxTQUFTa0wsYUFBVCxHQUFlO0FBQ2IsTUFBSU8sZUFBSixFQUFXO0FBQ1RELElBQUFBLFNBQUEsQ0FBZ0IsSUFBaEIsRUFBc0JGLFNBQXRCO0FBQ0Q7QUFDRixDOztBQ2xNRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBV0E7QUFTQTtBQUNBO0NBR0E7O0FBQ0E1RixNQUFNLENBQUN5akIsT0FBUCxHQUFpQjtBQUNmO0FBQ0ExZ0IsRUFBQUEsVUFBVSxFQUFFQSxVQUZHO0FBR2ZHLEVBQUFBLGdCQUFnQixFQUFFQSxnQkFISDtBQUlmTyxFQUFBQSxZQUFZLEVBQUVBLFlBSkM7QUFLZkYsRUFBQUEsVUFBVSxFQUFFQSxVQUxHO0FBTWZnQixFQUFBQSxXQUFXLEVBQUVBLFdBTkU7QUFPZkwsRUFBQUEsYUFBYSxFQUFFQSxhQVBBO0FBUWZFLEVBQUFBLFdBQVcsRUFBRUEsV0FSRTtBQVNmL0IsRUFBQUEsV0FBVyxFQUFFQSxXQVRFO0FBVWZrRCxFQUFBQSxjQUFjLEVBQUVBLGNBVkQ7QUFZZjtBQUNBc2UsRUFBQUEsbUJBQW1CLEVBQUVBLG1CQWJOO0FBZWY7QUFDQU8sRUFBQUEsMkJBQTJCLEVBQUVuYSxpQkFoQmQ7QUFpQmZRLEVBQUFBLGNBQWMsRUFBRUEsY0FqQkQ7QUFtQmY7QUFDQXVZLEVBQUFBLHVCQUF1QixFQUFFQSx1QkFBdUJBO0FBcEJqQyxDQUFqQixFQXVCQTs7QUFDQWhqQixNQUFNLENBQUN3ZSxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0F4ZSxNQUFNLENBQUNzZSxlQUFQLEdBQXlCQSxlQUF6QjtBQUNBdGUsTUFBTSxDQUFDb1gsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBcFgsTUFBTSxDQUFDMlksdUJBQVAsR0FBaUNBLHVCQUFqQztBQUNBM1ksTUFBTSxDQUFDMmlCLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQTNpQixNQUFNLENBQUMwaUIsMkJBQVAsR0FBcUNBLDJCQUFyQztBQUNBMWlCLE1BQU0sQ0FBQzhpQixhQUFQLEdBQXVCQSxhQUF2QixDOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBOWlCLE1BQU0sQ0FBQ3lqQixPQUFQLENBQWVZLFlBQWYsR0FBOEIsSUFBOUI7QUFFQTVtQixRQUFRLENBQUN3QyxnQkFBVCxDQUEwQixrQkFBMUIsRUFBOEMsWUFBWTtBQUN4RDtBQUNBLE1BQUlxa0IsSUFBSSxHQUFHN21CLFFBQVEsQ0FBQ21FLGFBQVQsQ0FBdUIsTUFBdkIsQ0FBWDtBQUNBMGlCLEVBQUFBLElBQUksQ0FBQ3ppQixZQUFMLENBQWtCLE1BQWxCLEVBQTBCLFVBQTFCO0FBQ0F5aUIsRUFBQUEsSUFBSSxDQUFDemlCLFlBQUwsQ0FDRSxTQURGLEVBRUUsOEZBRkY7QUFJQXBFLEVBQUFBLFFBQVEsQ0FBQzhtQixJQUFULENBQWN0aUIsV0FBZCxDQUEwQnFpQixJQUExQjtBQUNELENBVEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1yZWZsb3dhYmxlLmpzPzM5MjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcHJveFNlYXJjaCBmcm9tICdhcHByb3gtc3RyaW5nLW1hdGNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHByb3gtc3RyaW5nLW1hdGNoJykuTWF0Y2h9IFN0cmluZ01hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBNYXRjaFxuICogQHByb3Age251bWJlcn0gc3RhcnQgLSBTdGFydCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gZW5kIC0gRW5kIG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBzY29yZSAtXG4gKiAgIFNjb3JlIGZvciB0aGUgbWF0Y2ggYmV0d2VlbiAwIGFuZCAxLjAsIHdoZXJlIDEuMCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNoXG4gKiAgIGZvciB0aGUgcXVvdGUgYW5kIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoZXMgZm9yIGBzdHJgIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhFcnJvcnNcbiAqIEByZXR1cm4ge1N0cmluZ01hdGNoW119XG4gKi9cbmZ1bmN0aW9uIHNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycykge1xuICAvLyBEbyBhIGZhc3Qgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLiBUaGUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGxpYnJhcnlcbiAgLy8gZG9lc24ndCBjdXJyZW50bHkgaW5jb3Jwb3JhdGUgdGhpcyBvcHRpbWl6YXRpb24gaXRzZWxmLlxuICBsZXQgbWF0Y2hQb3MgPSAwO1xuICBsZXQgZXhhY3RNYXRjaGVzID0gW107XG4gIHdoaWxlIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICBtYXRjaFBvcyA9IHRleHQuaW5kZXhPZihzdHIsIG1hdGNoUG9zKTtcbiAgICBpZiAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgICBleGFjdE1hdGNoZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtYXRjaFBvcyxcbiAgICAgICAgZW5kOiBtYXRjaFBvcyArIHN0ci5sZW5ndGgsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgIH0pO1xuICAgICAgbWF0Y2hQb3MgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4YWN0TWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGV4YWN0TWF0Y2hlcztcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBubyBleGFjdCBtYXRjaGVzLCBkbyBhIG1vcmUgZXhwZW5zaXZlIHNlYXJjaCBmb3IgbWF0Y2hlc1xuICAvLyB3aXRoIGVycm9ycy5cbiAgcmV0dXJuIGFwcHJveFNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGB0ZXh0YCBhbmQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gdGV4dE1hdGNoU2NvcmUodGV4dCwgc3RyKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gYHNjb3JlTWF0Y2hgIHdpbGwgbmV2ZXIgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKi9cbiAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgc3RyLCBzdHIubGVuZ3RoKTtcblxuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgcmV0dXJuIDEgLSAobWF0Y2hlc1swXS5lcnJvcnMgLyBzdHIubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoIGZvciBgcXVvdGVgIGluIGB0ZXh0YC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBpZiBubyBtYXRjaCBleGNlZWRpbmcgdGhlIG1pbmltdW0gcXVhbGl0eSB0aHJlc2hvbGQgd2FzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRG9jdW1lbnQgdGV4dCB0byBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdW90ZSAtIFN0cmluZyB0byBmaW5kIHdpdGhpbiBgdGV4dGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IC1cbiAqICAgQ29udGV4dCBpbiB3aGljaCB0aGUgcXVvdGUgb3JpZ2luYWxseSBhcHBlYXJlZC4gVGhpcyBpcyB1c2VkIHRvIGNob29zZSB0aGVcbiAqICAgYmVzdCBtYXRjaC5cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF0gLSBFeHBlY3RlZCB0ZXh0IGJlZm9yZSB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF0gLSBFeHBlY3RlZCB0ZXh0IGFmdGVyIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge251bWJlcn0gW2NvbnRleHQuaGludF0gLSBFeHBlY3RlZCBvZmZzZXQgb2YgbWF0Y2ggd2l0aGluIHRleHRcbiAqIEByZXR1cm4ge01hdGNofG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1b3RlKHRleHQsIHF1b3RlLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKHF1b3RlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hvb3NlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gYWxsb3cgZm9yIHRoZSBpbml0aWFsIHNlYXJjaC5cbiAgLy8gVGhpcyBjaG9pY2UgaW52b2x2ZXMgYSB0cmFkZW9mZiBiZXR3ZWVuOlxuICAvL1xuICAvLyAgLSBSZWNhbGwgKHByb3BvcnRpb24gb2YgXCJnb29kXCIgbWF0Y2hlcyBmb3VuZClcbiAgLy8gIC0gUHJlY2lzaW9uIChwcm9wb3J0aW9uIG9mIG1hdGNoZXMgZm91bmQgd2hpY2ggYXJlIFwiZ29vZFwiKVxuICAvLyAgLSBDb3N0IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgb2YgcHJvY2Vzc2luZyB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgWzFdXG4gIC8vXG4gIC8vIFsxXSBTcGVjaWZpY2FsbHksIHRoZSBleHBlY3RlZC10aW1lIGNvbXBsZXhpdHkgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGlzXG4gIC8vICAgICBgTygobWF4RXJyb3JzIC8gMzIpICogdGV4dC5sZW5ndGgpYC4gU2VlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBkb2NzLlxuICBjb25zdCBtYXhFcnJvcnMgPSBNYXRoLm1pbigyNTYsIHF1b3RlLmxlbmd0aCAvIDIpO1xuXG4gIC8vIEZpbmQgY2xvc2VzdCBtYXRjaGVzIGZvciBgcXVvdGVgIGluIGB0ZXh0YCBiYXNlZCBvbiBlZGl0IGRpc3RhbmNlLlxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHF1b3RlLCBtYXhFcnJvcnMpO1xuXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgYSBtYXRjaCBjYW5kaWRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nTWF0Y2h9IG1hdGNoXG4gICAqL1xuICBjb25zdCBzY29yZU1hdGNoID0gbWF0Y2ggPT4ge1xuICAgIGNvbnN0IHF1b3RlV2VpZ2h0ID0gNTA7IC8vIFNpbWlsYXJpdHkgb2YgbWF0Y2hlZCB0ZXh0IHRvIHF1b3RlLlxuICAgIGNvbnN0IHByZWZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYmVmb3JlIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5wcmVmaXhgLlxuICAgIGNvbnN0IHN1ZmZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYWZ0ZXIgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnN1ZmZpeGAuXG4gICAgY29uc3QgcG9zV2VpZ2h0ID0gMjsgLy8gUHJveGltaXR5IHRvIGV4cGVjdGVkIGxvY2F0aW9uLiBVc2VkIGFzIGEgdGllLWJyZWFrZXIuXG5cbiAgICBjb25zdCBxdW90ZVNjb3JlID0gMSAtIG1hdGNoLmVycm9ycyAvIHF1b3RlLmxlbmd0aDtcblxuICAgIGNvbnN0IHByZWZpeFNjb3JlID0gY29udGV4dC5wcmVmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShNYXRoLm1heCgwLCBtYXRjaC5zdGFydCAtIGNvbnRleHQucHJlZml4Lmxlbmd0aCksIG1hdGNoLnN0YXJ0KSxcbiAgICAgICAgICBjb250ZXh0LnByZWZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcbiAgICBjb25zdCBzdWZmaXhTY29yZSA9IGNvbnRleHQuc3VmZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UobWF0Y2guZW5kLCBtYXRjaC5lbmQgKyBjb250ZXh0LnN1ZmZpeC5sZW5ndGgpLFxuICAgICAgICAgIGNvbnRleHQuc3VmZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuXG4gICAgbGV0IHBvc1Njb3JlID0gMS4wO1xuICAgIGlmICh0eXBlb2YgY29udGV4dC5oaW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMobWF0Y2guc3RhcnQgLSBjb250ZXh0LmhpbnQpO1xuICAgICAgcG9zU2NvcmUgPSAxLjAgLSBvZmZzZXQgLyB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTY29yZSA9XG4gICAgICBxdW90ZVdlaWdodCAqIHF1b3RlU2NvcmUgK1xuICAgICAgcHJlZml4V2VpZ2h0ICogcHJlZml4U2NvcmUgK1xuICAgICAgc3VmZml4V2VpZ2h0ICogc3VmZml4U2NvcmUgK1xuICAgICAgcG9zV2VpZ2h0ICogcG9zU2NvcmU7XG4gICAgY29uc3QgbWF4U2NvcmUgPSBxdW90ZVdlaWdodCArIHByZWZpeFdlaWdodCArIHN1ZmZpeFdlaWdodCArIHBvc1dlaWdodDtcbiAgICBjb25zdCBub3JtYWxpemVkU2NvcmUgPSByYXdTY29yZSAvIG1heFNjb3JlO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTY29yZTtcbiAgfTtcblxuICAvLyBSYW5rIG1hdGNoZXMgYmFzZWQgb24gc2ltaWxhcml0eSBvZiBhY3R1YWwgYW5kIGV4cGVjdGVkIHN1cnJvdW5kaW5nIHRleHRcbiAgLy8gYW5kIGFjdHVhbC9leHBlY3RlZCBvZmZzZXQgaW4gdGhlIGRvY3VtZW50IHRleHQuXG4gIGNvbnN0IHNjb3JlZE1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+ICh7XG4gICAgc3RhcnQ6IG0uc3RhcnQsXG4gICAgZW5kOiBtLmVuZCxcbiAgICBzY29yZTogc2NvcmVNYXRjaChtKSxcbiAgfSkpO1xuXG4gIC8vIENob29zZSBtYXRjaCB3aXRoIGhpZ2hlc3Qgc2NvcmUuXG4gIHNjb3JlZE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICByZXR1cm4gc2NvcmVkTWF0Y2hlc1swXTtcbn1cbiIsIi8qKlxuICogUmV0dXJuIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGV4dCBub2RlcyBjb250YWluZWQgaW4gYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBub2RlVGV4dExlbmd0aChub2RlKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIC8vIG5iLiBgdGV4dENvbnRlbnRgIGV4Y2x1ZGVzIHRleHQgaW4gY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAvLyB3aGVuIGNhbGxlZCBvbiBhIHBhcmVudCBlbGVtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0IHRoYXQgaGVyZS5cblxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobm9kZS50ZXh0Q29udGVudCkubGVuZ3RoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IG9mIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIHdoaWxlIChzaWJsaW5nKSB7XG4gICAgbGVuZ3RoICs9IG5vZGVUZXh0TGVuZ3RoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIG9yIG1vcmUgY2hhcmFjdGVyIG9mZnNldHMgd2l0aGluIGFuIGVsZW1lbnQgdG8gKHRleHQgbm9kZSwgcG9zaXRpb24pXG4gKiBwYWlycy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyW119IG9mZnNldHMgLSBPZmZzZXRzLCB3aGljaCBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfVtdfVxuICovXG5mdW5jdGlvbiByZXNvbHZlT2Zmc2V0cyhlbGVtZW50LCAuLi5vZmZzZXRzKSB7XG4gIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICBjb25zdCBub2RlSXRlciA9IC8qKiBAdHlwZSB7RG9jdW1lbnR9ICovIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgKS5jcmVhdGVOb2RlSXRlcmF0b3IoZWxlbWVudCwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgbGV0IHRleHROb2RlO1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICAvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgYG5leHRPZmZzZXRgdGggY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0XG4gIC8vIG9mIGBlbGVtZW50YC5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Tm9kZSkge1xuICAgIHRleHROb2RlID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAoY3VycmVudE5vZGUpO1xuICAgIGlmIChsZW5ndGggKyB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IG5leHRPZmZzZXQpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IG5leHRPZmZzZXQgLSBsZW5ndGggfSk7XG4gICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gICAgICBsZW5ndGggKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLy8gQm91bmRhcnkgY2FzZS5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0Tm9kZSAmJiBsZW5ndGggPT09IG5leHRPZmZzZXQpIHtcbiAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCB9KTtcbiAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICB9XG5cbiAgaWYgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgZXhjZWVkcyB0ZXh0IGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBsZXQgUkVTT0xWRV9GT1JXQVJEUyA9IDE7XG5leHBvcnQgbGV0IFJFU09MVkVfQkFDS1dBUkRTID0gMjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9mZnNldCB3aXRoaW4gdGhlIHRleHQgY29udGVudCBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoaXMgcG9zaXRpb24gY2FuIGJlIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZGVzY2VuZGFudCBub2RlIGluIHRoZSBjdXJyZW50XG4gKiBET00gc3VidHJlZSBvZiB0aGUgZWxlbWVudCB1c2luZyB0aGUgYHJlc29sdmVgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgdGV4dCBwb3NpdGlvbiBgb2Zmc2V0YCB3aXRoaW5cbiAgICogdGhlIHRleHQgY29udGVudCBvZiBgZWxlbWVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPZmZzZXQgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8qKiBFbGVtZW50IHRoYXQgYG9mZnNldGAgaXMgcmVsYXRpdmUgdG8uICovXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIC8qKiBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50J3MgYHRleHRDb250ZW50YC4gKi9cbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcG9zaXRpb24gd2l0aCBvZmZzZXQgcmVsYXRpdmUgdG8gYSBnaXZlbiBhbmNlc3RvclxuICAgKiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudCAtIEFuY2VzdG9yIG9mIGB0aGlzLmVsZW1lbnRgXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHJlbGF0aXZlVG8ocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuY29udGFpbnModGhpcy5lbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGN1cnJlbnQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgd2hpbGUgKGVsICE9PSBwYXJlbnQpIHtcbiAgICAgIG9mZnNldCArPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChlbCk7XG4gICAgICBlbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHBvc2l0aW9uIHRvIGEgc3BlY2lmaWMgdGV4dCBub2RlIGFuZCBvZmZzZXQgd2l0aGluIHRoYXQgbm9kZS5cbiAgICpcbiAgICogVGhyb3dzIGlmIGB0aGlzLm9mZnNldGAgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSW4gdGhlXG4gICAqIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaGFzIG5vIHRleHQgYW5kIGB0aGlzLm9mZnNldGAgaXMgMCwgdGhlIGBkaXJlY3Rpb25gXG4gICAqIG9wdGlvbiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucy5cbiAgICpcbiAgICogT2Zmc2V0cyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbm9kZXMgYXJlIHJlc29sdmVkIHRvIHRoZSBzdGFydCBvZiB0aGVcbiAgICogbm9kZSB0aGF0IGJlZ2lucyBhdCB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICBAcGFyYW0ge1JFU09MVkVfRk9SV0FSRFN8UkVTT0xWRV9CQUNLV0FSRFN9IFtvcHRpb25zLmRpcmVjdGlvbl0gLVxuICAgKiAgICAgU3BlY2lmaWVzIGluIHdoaWNoIGRpcmVjdGlvbiB0byBzZWFyY2ggZm9yIHRoZSBuZWFyZXN0IHRleHQgbm9kZSBpZlxuICAgKiAgICAgYHRoaXMub2Zmc2V0YCBpcyBgMGAgYW5kIGB0aGlzLmVsZW1lbnRgIGhhcyBubyB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkXG4gICAqICAgICBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfX1cbiAgICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAgICovXG4gIHJlc29sdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXNvbHZlT2Zmc2V0cyh0aGlzLmVsZW1lbnQsIHRoaXMub2Zmc2V0KVswXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMCAmJiBvcHRpb25zLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHR3ID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Um9vdE5vZGUoKSxcbiAgICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVFxuICAgICAgICApO1xuICAgICAgICB0dy5jdXJyZW50Tm9kZSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9yd2FyZHMgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUkVTT0xWRV9GT1JXQVJEUztcbiAgICAgICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7VGV4dHxudWxsfSAqLyAoXG4gICAgICAgICAgZm9yd2FyZHMgPyB0dy5uZXh0Tm9kZSgpIDogdHcucHJldmlvdXNOb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRleHQsIG9mZnNldDogZm9yd2FyZHMgPyAwIDogdGV4dC5kYXRhLmxlbmd0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgYG9mZnNldGB0aCBjaGFyYWN0ZXIgd2l0aGluXG4gICAqIGBub2RlYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21DaGFyT2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbi5mcm9tUG9pbnQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCBvZmZzZXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGlzIG5vdCBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIHN0YXJ0IG9yIGVuZCBwb2ludCAobm9kZSwgb2Zmc2V0KS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGV4dCBvciBFbGVtZW50IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIE9mZnNldCB3aXRoaW4gdGhlIG5vZGUuXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tUG9pbnQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IC8qKiBAdHlwZSB7VGV4dH0gKi8gKG5vZGUpLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBoYXMgbm8gcGFyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSArIG9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihub2RlLnBhcmVudEVsZW1lbnQsIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggYmVmb3JlIHRoZSBgb2Zmc2V0YHRoIGNoaWxkIG9mIGVsZW1lbnQuXG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgICAgIHRleHRPZmZzZXQgKz0gbm9kZVRleHRMZW5ndGgobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IGluIGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZ2lvbiBvZiBhIGRvY3VtZW50IGFzIGEgKHN0YXJ0LCBlbmQpIHBhaXIgb2YgYFRleHRQb3NpdGlvbmAgcG9pbnRzLlxuICpcbiAqIFJlcHJlc2VudGluZyBhIHJhbmdlIGluIHRoaXMgd2F5IGFsbG93cyBmb3IgY2hhbmdlcyBpbiB0aGUgRE9NIGNvbnRlbnQgb2YgdGhlXG4gKiByYW5nZSB3aGljaCBkb24ndCBhZmZlY3QgaXRzIHRleHQgY29udGVudCwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHRleHQgY29udGVudFxuICogb2YgdGhlIHJhbmdlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRSYW5nZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW1tdXRhYmxlIGBUZXh0UmFuZ2VgIGZyb20gYSBgc3RhcnRgIGFuZCBgZW5kYCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IHN0YXJ0XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gYVxuICAgKiBnaXZlbiBhbmNlc3Rvci4gU2VlIGBUZXh0UG9zaXRpb24ucmVsYXRpdmVUb2AuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgcmVsYXRpdmVUbyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlVG8oZWxlbWVudCksXG4gICAgICB0aGlzLmVuZC5yZWxhdGl2ZVRvKGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgVGV4dFJhbmdlYCB0byBhIERPTSByYW5nZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBET00gUmFuZ2Ugd2lsbCBhbHdheXMgc3RhcnQgYW5kIGVuZCBpbiBhIGBUZXh0YCBub2RlLlxuICAgKiBIZW5jZSBgVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkudG9SYW5nZSgpYCBjYW4gYmUgdXNlZCB0byBcInNocmlua1wiIGFcbiAgICogcmFuZ2UgdG8gdGhlIHRleHQgaXQgY29udGFpbnMuXG4gICAqXG4gICAqIE1heSB0aHJvdyBpZiB0aGUgYHN0YXJ0YCBvciBgZW5kYCBwb3NpdGlvbnMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cbiAgdG9SYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCA9PT0gdGhpcy5lbmQuZWxlbWVudCAmJlxuICAgICAgdGhpcy5zdGFydC5vZmZzZXQgPD0gdGhpcy5lbmQub2Zmc2V0XG4gICAgKSB7XG4gICAgICAvLyBGYXN0IHBhdGggZm9yIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGluIHNhbWUgZWxlbWVudC5cbiAgICAgIFtzdGFydCwgZW5kXSA9IHJlc29sdmVPZmZzZXRzKFxuICAgICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQsXG4gICAgICAgIHRoaXMuc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmVuZC5vZmZzZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5zdGFydC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0ZPUldBUkRTIH0pO1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9CQUNLV0FSRFMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gZXhpc3RpbmcgRE9NIGBSYW5nZWAgdG8gYSBgVGV4dFJhbmdlYFxuICAgKlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKiBAcmV0dXJuIHtUZXh0UmFuZ2V9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KFxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICByYW5nZS5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgYFRleHRSYW5nZWAgZnJvbSB0aGUgYHN0YXJ0YHRoIHRvIGBlbmRgdGggY2hhcmFjdGVycyBpbiBgcm9vdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgc3RhdGljIGZyb21PZmZzZXRzKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgc3RhcnQpLFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBlbmQpXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGNsYXNzZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBET00gYFJhbmdlYFxuICogb2JqZWN0cyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlbGVjdG9ycy4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhXG4gKiBzZXQgb2YgYW5jaG9yaW5nIGxpYnJhcmllcy4gSXQgc2VydmVzIHR3byBtYWluIHB1cnBvc2VzOlxuICpcbiAqICAxLiBQcm92aWRpbmcgYSBjb25zaXN0ZW50IGludGVyZmFjZSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFuY2hvcnMuXG4gKiAgMi4gSW5zdWxhdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIEFQSSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGFuY2hvcmluZ1xuICogICAgIGxpYnJhcmllcy5cbiAqL1xuXG5pbXBvcnQgeyBtYXRjaFF1b3RlIH0gZnJvbSAnLi9tYXRjaC1xdW90ZSc7XG5pbXBvcnQgeyBUZXh0UmFuZ2UsIFRleHRQb3NpdGlvbiB9IGZyb20gJy4vdGV4dC1yYW5nZSc7XG5pbXBvcnQgeyBub2RlRnJvbVhQYXRoLCB4cGF0aEZyb21Ob2RlIH0gZnJvbSAnLi94cGF0aCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuUmFuZ2VTZWxlY3Rvcn0gUmFuZ2VTZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFBvc2l0aW9uU2VsZWN0b3J9IFRleHRQb3NpdGlvblNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UXVvdGVTZWxlY3Rvcn0gVGV4dFF1b3RlU2VsZWN0b3JcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUmFuZ2VBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgcmFuZ2UpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhbmNob3IgZnJvbSBhIHNlcmlhbGl6ZWQgYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2VTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3Iuc3RhcnRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghc3RhcnRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgc3RhcnRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLmVuZENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFlbmRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZW5kQ29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5lbmRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpLnRvUmFuZ2UoKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7UmFuZ2VTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgLy8gXCJTaHJpbmtcIiB0aGUgcmFuZ2Ugc28gdGhhdCBpdCB0aWdodGx5IHdyYXBzIGl0cyB0ZXh0LiBUaGlzIGVuc3VyZXMgbW9yZVxuICAgIC8vIHByZWRpY3RhYmxlIG91dHB1dCBmb3IgYSBnaXZlbiB0ZXh0IHNlbGVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkUmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHRoaXMucmFuZ2UpLnRvUmFuZ2UoKTtcblxuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2Uobm9ybWFsaXplZFJhbmdlKTtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLnN0YXJ0LmVsZW1lbnQsIHRoaXMucm9vdCk7XG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2UuZW5kLmVsZW1lbnQsIHRoaXMucm9vdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JhbmdlU2VsZWN0b3InLFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzdGFydE9mZnNldDogdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIGVuZE9mZnNldDogdGV4dFJhbmdlLmVuZC5vZmZzZXQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRQb3NpdGlvblNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbkFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKFxuICAgICAgcm9vdCxcbiAgICAgIHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICB0ZXh0UmFuZ2UuZW5kLm9mZnNldFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvblNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHJvb3QsIHNlbGVjdG9yLnN0YXJ0LCBzZWxlY3Rvci5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvblNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRQb3NpdGlvblNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICB9O1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gVGV4dFJhbmdlLmZyb21PZmZzZXRzKHRoaXMucm9vdCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLnRvUmFuZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFF1b3RlTWF0Y2hPcHRpb25zXG4gKiBAcHJvcCB7bnVtYmVyfSBbaGludF0gLSBFeHBlY3RlZCBwb3NpdGlvbiBvZiBtYXRjaCBpbiB0ZXh0LiBTZWUgYG1hdGNoUXVvdGVgLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFF1b3RlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFF1b3RlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhhY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XVxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBleGFjdCwgY29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmV4YWN0ID0gZXhhY3Q7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgVGV4dFF1b3RlQW5jaG9yYCBmcm9tIGEgcmFuZ2UuXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgYHJhbmdlYCBkb2VzIG5vdCBjb250YWluIGFueSB0ZXh0IG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICAgIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBxdW90ZSB0byBjYXB0dXJlIGFzIGNvbnRleHQuIFdlIGN1cnJlbnRseVxuICAgIC8vIGFsd2F5cyB1c2UgYSBmaXhlZCBhbW91bnQsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhpcyBjb2RlIHdhcyBhd2FyZVxuICAgIC8vIG9mIGxvZ2ljYWwgYm91bmRhcmllcyBpbiB0aGUgZG9jdW1lbnQgKHBhcmFncmFwaCwgYXJ0aWNsZSBldGMuKSB0byBhdm9pZFxuICAgIC8vIGNhcHR1cmluZyB0ZXh0IHVucmVsYXRlZCB0byB0aGUgcXVvdGUuXG4gICAgLy9cbiAgICAvLyBJbiByZWd1bGFyIHByb3NlIHRoZSBpZGVhbCBjb250ZW50IHdvdWxkIG9mdGVuIGJlIHRoZSBzdXJyb3VuZGluZyBzZW50ZW5jZS5cbiAgICAvLyBUaGlzIGlzIGEgbmF0dXJhbCB1bml0IG9mIG1lYW5pbmcgd2hpY2ggZW5hYmxlcyBkaXNwbGF5aW5nIHF1b3RlcyBpblxuICAgIC8vIGNvbnRleHQgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBpcyBub3QgYXZhaWxhYmxlLiBXZSBjb3VsZCB1c2UgYEludGwuU2VnbWVudGVyYFxuICAgIC8vIGZvciB0aGlzIHdoZW4gYXZhaWxhYmxlLlxuICAgIGNvbnN0IGNvbnRleHRMZW4gPSAzMjtcblxuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCksIHtcbiAgICAgIHByZWZpeDogdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIGNvbnRleHRMZW4pLCBzdGFydCksXG4gICAgICBzdWZmaXg6IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgY29udGV4dExlbikpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRRdW90ZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHsgcHJlZml4LCBzdWZmaXggfSA9IHNlbGVjdG9yO1xuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHNlbGVjdG9yLmV4YWN0LCB7IHByZWZpeCwgc3VmZml4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRRdW90ZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRRdW90ZVNlbGVjdG9yJyxcbiAgICAgIGV4YWN0OiB0aGlzLmV4YWN0LFxuICAgICAgcHJlZml4OiB0aGlzLmNvbnRleHQucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLmNvbnRleHQuc3VmZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1JhbmdlKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnRvUG9zaXRpb25BbmNob3Iob3B0aW9ucykudG9SYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hRdW90ZSh0ZXh0LCB0aGlzLmV4YWN0LCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICBoaW50OiBvcHRpb25zLmhpbnQsXG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdW90ZSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IodGhpcy5yb290LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgVGV4dFF1b3RlQW5jaG9yIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzXCI7XG5cbi8vIENhdGNoIEpTIGVycm9ycyB0byBsb2cgdGhlbSBpbiB0aGUgYXBwLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwiZXJyb3JcIixcbiAgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgQW5kcm9pZC5sb2dFcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5maWxlbmFtZSwgZXZlbnQubGluZW5vKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8vIE5vdGlmeSBuYXRpdmUgY29kZSB0aGF0IHRoZSBwYWdlIGhhcyBsb2FkZWQuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gICAgICBzbmFwQ3VycmVudE9mZnNldCgpO1xuICAgIH0pO1xuICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8qKlxuICogSGF2aW5nIGFuIG9kZCBudW1iZXIgb2YgY29sdW1ucyB3aGVuIGRpc3BsYXlpbmcgdHdvIGNvbHVtbnMgcGVyIHNjcmVlbiBjYXVzZXMgc25hcHBpbmcgYW5kIHBhZ2VcbiAqIHR1cm5pbmcgaXNzdWVzLiBUbyBmaXggdGhpcywgd2UgaW5zZXJ0IGEgYmxhbmsgdmlydHVhbCBjb2x1bW4gYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpIHtcbiAgY29uc3QgaWQgPSBcInJlYWRpdW0tdmlydHVhbC1wYWdlXCI7XG4gIHZhciB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHx8IGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkgIT0gMikge1xuICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGNvbENvdW50ID0gZG9jdW1lbnRXaWR0aCAvIHBhZ2VXaWR0aDtcbiAgICB2YXIgaGFzT2RkQ29sQ291bnQgPSAoTWF0aC5yb3VuZChjb2xDb3VudCAqIDIpIC8gMikgJSAxID4gMC4xO1xuICAgIGlmIChoYXNPZGRDb2xDb3VudCkge1xuICAgICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2aXJ0dWFsQ29sLnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgICAgdmlydHVhbENvbC5zdHlsZS5icmVha0JlZm9yZSA9IFwiY29sdW1uXCI7XG4gICAgICAgIHZpcnR1YWxDb2wuaW5uZXJIVE1MID0gXCImIzgyMDM7XCI7IC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aXJ0dWFsQ29sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHZhciBwYWdlV2lkdGggPSAxO1xuXG5mdW5jdGlvbiBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCkge1xuICAvLyBXZSBjYW4ndCByZWx5IG9uIHdpbmRvdy5pbm5lcldpZHRoIGZvciB0aGUgcGFnZVdpZHRoIG9uIEFuZHJvaWQsIGJlY2F1c2UgaWYgdGhlXG4gIC8vIGRldmljZSBwaXhlbCByYXRpbyBpcyBub3QgYW4gaW50ZWdlciwgd2UgZ2V0IHJvdW5kaW5nIGlzc3VlcyBvZmZzZXR0aW5nIHRoZSBwYWdlcy5cbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3JlYWRpdW0tY3NzL2lzc3Vlcy85N1xuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcjItbmF2aWdhdG9yLWtvdGxpbi9pc3N1ZXMvMTQ2XG4gIHZhciB3aWR0aCA9IEFuZHJvaWQuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICBwYWdlV2lkdGggPSB3aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBzZXRQcm9wZXJ0eShcbiAgICBcIi0tUlNfX3ZpZXdwb3J0V2lkdGhcIixcbiAgICBcImNhbGMoXCIgKyB3aWR0aCArIFwicHggLyBcIiArIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICsgXCIpXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkge1xuICByZXR1cm4gcGFyc2VJbnQoXG4gICAgd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbi1jb3VudFwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1VU0VSX19zY3JvbGxcIilcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpID09IFwicmVhZGl1bS1zY3JvbGwtb25cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Q3NzU2VsZWN0b3IgfSBmcm9tIFwiY3NzLXNlbGVjdG9yLWdlbmVyYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IoKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaW5kRmlyc3RWaXNpYmxlQmxvY2tFbGVtZW50KCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhyZWY6IFwiI1wiLFxuICAgIHR5cGU6IFwiYXBwbGljYXRpb24veGh0bWwreG1sXCIsXG4gICAgbG9jYXRpb25zOiB7XG4gICAgICBjc3NTZWxlY3RvcjogZ2V0Q3NzU2VsZWN0b3IoZWxlbWVudCksXG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IGVsZW1lbnQudGV4dENvbnRlbnQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUJsb2NrRWxlbWVudCgpIHtcbiAgcmV0dXJuIGZpbmRFbGVtZW50KFxuICAgIGRvY3VtZW50LmJvZHksXG4gICAgKGVsZW1lbnQpID0+IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmRpc3BsYXkgIT0gXCJibG9ja1wiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbmRFbGVtZW50KHJvb3RFbGVtZW50LCBzaG91bGRJZ25vcmUpIHtcbiAgdmFyIGZvdW5kRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgZm9yICh2YXIgaSA9IHJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgY2hpbGQgPSByb290RWxlbWVudC5jaGlsZHJlbltpXTtcbiAgICBjb25zdCBlbGVtZW50ID0gZmluZEVsZW1lbnQoY2hpbGQsIHNob3VsZElnbm9yZSk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0VsZW1lbnRWaXNpYmxlKHJvb3RFbGVtZW50LCB1bmRlZmluZWQsIHNob3VsZElnbm9yZSkpIHtcbiAgICByZXR1cm4gcm9vdEVsZW1lbnQ7XG4gIH1cbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovLCBzaG91bGRJZ25vcmUpIHtcbiAgaWYgKFxuICAgIHJlYWRpdW0uaXNGaXhlZExheW91dCB8fFxuICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgfHxcbiAgICBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKFxuICAgICFkb2N1bWVudCB8fFxuICAgICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHxcbiAgICAhZG9jdW1lbnQuYm9keSB8fFxuICAgIChzaG91bGRJZ25vcmUgJiYgc2hvdWxkSWdub3JlKGVsZW1lbnQpKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBlbFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgaWYgKGVsU3R5bGUpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKTtcbiAgICBpZiAoZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZWN0LmxlZnQgPCBwYWdlV2lkdGg7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGxvZ0Vycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IHRvTmF0aXZlUmVjdCB9IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IFRleHRSYW5nZSB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlXCI7XG5cbi8vIFBvbHlmaWxsIGZvciBBbmRyb2lkIEFQSSAyNlxuaW1wb3J0IG1hdGNoQWxsIGZyb20gXCJzdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsXCI7XG5tYXRjaEFsbC5zaGltKCk7XG5cbmNvbnN0IGRlYnVnID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb24oKSB7XG4gIGNvbnN0IHRleHQgPSBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdCgpO1xuICByZXR1cm4geyB0ZXh0LCByZWN0IH07XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIHJldHVybiB0b05hdGl2ZVJlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhbkhpZ2hsaWdodCA9IGhpZ2hsaWdodFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxuL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDtcbiAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhkb2N1bWVudC5ib2R5KTtcbiAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICBjb25zdCBzbmlwcGV0TGVuZ3RoID0gMjAwO1xuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYmVmb3JlIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBmaXJzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYmVmb3JlID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIHNuaXBwZXRMZW5ndGgpLCBzdGFydCk7XG4gIGxldCBmaXJzdFdvcmRTdGFydCA9IGJlZm9yZS5zZWFyY2goL1xcUHtMfVxccHtMfS9ndSk7XG4gIGlmIChmaXJzdFdvcmRTdGFydCAhPT0gLTEpIHtcbiAgICBiZWZvcmUgPSBiZWZvcmUuc2xpY2UoZmlyc3RXb3JkU3RhcnQgKyAxKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYWZ0ZXIgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGxhc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGFmdGVyID0gdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBzbmlwcGV0TGVuZ3RoKSk7XG4gIGxldCBsYXN0V29yZEVuZCA9IEFycmF5LmZyb20oYWZ0ZXIubWF0Y2hBbGwoL1xccHtMfVxcUHtMfS9ndSkpLnBvcCgpO1xuICBpZiAobGFzdFdvcmRFbmQgIT09IHVuZGVmaW5lZCAmJiBsYXN0V29yZEVuZC5pbmRleCA+IDEpIHtcbiAgICBhZnRlciA9IGFmdGVyLnNsaWNlKDAsIGxhc3RXb3JkRW5kLmluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4geyBoaWdobGlnaHQsIGJlZm9yZSwgYWZ0ZXIgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIEJhc2Ugc2NyaXB0IHVzZWQgYnkgYm90aCByZWZsb3dhYmxlIGFuZCBmaXhlZCBsYXlvdXQgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2dlc3R1cmVzXCI7XG5pbXBvcnQge1xuICByZW1vdmVQcm9wZXJ0eSxcbiAgc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvRW5kLFxuICBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb1RleHQsXG4gIHNldFByb3BlcnR5LFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5ub3RhdGlvbixcbiAgY3JlYXRlSGlnaGxpZ2h0LFxuICBkZXN0cm95SGlnaGxpZ2h0LFxuICBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbyxcbiAgZ2V0U2VsZWN0aW9uUmVjdCxcbiAgcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElELFxuICBzZXRTY3JvbGxNb2RlLFxufSBmcm9tIFwiLi9oaWdobGlnaHRcIjtcbmltcG9ydCB7IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yIH0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXREZWNvcmF0aW9ucywgcmVnaXN0ZXJUZW1wbGF0ZXMgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxuLy8gUHVibGljIEFQSSB1c2VkIGJ5IHRoZSBuYXZpZ2F0b3IuXG53aW5kb3cucmVhZGl1bSA9IHtcbiAgLy8gdXRpbHNcbiAgc2Nyb2xsVG9JZDogc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbjogc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9UZXh0OiBzY3JvbGxUb1RleHQsXG4gIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0OiBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9TdGFydDogc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9FbmQ6IHNjcm9sbFRvRW5kLFxuICBzZXRQcm9wZXJ0eTogc2V0UHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnR5OiByZW1vdmVQcm9wZXJ0eSxcblxuICAvLyBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbjogZ2V0Q3VycmVudFNlbGVjdGlvbixcblxuICAvLyBkZWNvcmF0aW9uXG4gIHJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlczogcmVnaXN0ZXJUZW1wbGF0ZXMsXG4gIGdldERlY29yYXRpb25zOiBnZXREZWNvcmF0aW9ucyxcblxuICAvLyBET01cbiAgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3I6IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yLFxufTtcblxuLy8gTGVnYWN5IGhpZ2hsaWdodHMgQVBJLlxud2luZG93LmNyZWF0ZUFubm90YXRpb24gPSBjcmVhdGVBbm5vdGF0aW9uO1xud2luZG93LmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbndpbmRvdy5kZXN0cm95SGlnaGxpZ2h0ID0gZGVzdHJveUhpZ2hsaWdodDtcbndpbmRvdy5nZXRDdXJyZW50U2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvO1xud2luZG93LmdldFNlbGVjdGlvblJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0O1xud2luZG93LnJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCA9IHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRDtcbndpbmRvdy5zZXRTY3JvbGxNb2RlID0gc2V0U2Nyb2xsTW9kZTtcbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIFNjcmlwdCB1c2VkIGZvciByZWZsb3dhYmxlIHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9pbmRleFwiO1xuXG53aW5kb3cucmVhZGl1bS5pc1JlZmxvd2FibGUgPSB0cnVlO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFNldHVwcyB0aGUgYHZpZXdwb3J0YCBtZXRhIHRhZyB0byBkaXNhYmxlIHpvb21pbmcuXG4gIGxldCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpO1xuICBtZXRhLnNldEF0dHJpYnV0ZShcbiAgICBcImNvbnRlbnRcIixcbiAgICBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCBzaHJpbmstdG8tZml0PW5vXCJcbiAgKTtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChtZXRhKTtcbn0pO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEZpcnN0VmlzaWJsZUJsb2NrRWxlbWVudCIsImhyZWYiLCJmaW5kRWxlbWVudCIsImRpc3BsYXkiLCJyb290RWxlbWVudCIsInNob3VsZElnbm9yZSIsImlzRWxlbWVudFZpc2libGUiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzIiwiaXNSZWZsb3dhYmxlIiwibWV0YSIsImhlYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SSxDQUFDeGlCLFlBQUwsQ0FDRSxTQURGLEVBRUUsOEZBRkY7QUFJQXBFLEVBQUFBLFFBQVEsQ0FBQzZtQixJQUFULENBQWNyaUIsV0FBZCxDQUEwQm9pQixJQUExQjtBQUNELENBVEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1yZWZsb3dhYmxlLmpzPzM5MjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcHJveFNlYXJjaCBmcm9tICdhcHByb3gtc3RyaW5nLW1hdGNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHByb3gtc3RyaW5nLW1hdGNoJykuTWF0Y2h9IFN0cmluZ01hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBNYXRjaFxuICogQHByb3Age251bWJlcn0gc3RhcnQgLSBTdGFydCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gZW5kIC0gRW5kIG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBzY29yZSAtXG4gKiAgIFNjb3JlIGZvciB0aGUgbWF0Y2ggYmV0d2VlbiAwIGFuZCAxLjAsIHdoZXJlIDEuMCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNoXG4gKiAgIGZvciB0aGUgcXVvdGUgYW5kIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoZXMgZm9yIGBzdHJgIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhFcnJvcnNcbiAqIEByZXR1cm4ge1N0cmluZ01hdGNoW119XG4gKi9cbmZ1bmN0aW9uIHNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycykge1xuICAvLyBEbyBhIGZhc3Qgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLiBUaGUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGxpYnJhcnlcbiAgLy8gZG9lc24ndCBjdXJyZW50bHkgaW5jb3Jwb3JhdGUgdGhpcyBvcHRpbWl6YXRpb24gaXRzZWxmLlxuICBsZXQgbWF0Y2hQb3MgPSAwO1xuICBsZXQgZXhhY3RNYXRjaGVzID0gW107XG4gIHdoaWxlIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICBtYXRjaFBvcyA9IHRleHQuaW5kZXhPZihzdHIsIG1hdGNoUG9zKTtcbiAgICBpZiAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgICBleGFjdE1hdGNoZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtYXRjaFBvcyxcbiAgICAgICAgZW5kOiBtYXRjaFBvcyArIHN0ci5sZW5ndGgsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgIH0pO1xuICAgICAgbWF0Y2hQb3MgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4YWN0TWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGV4YWN0TWF0Y2hlcztcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBubyBleGFjdCBtYXRjaGVzLCBkbyBhIG1vcmUgZXhwZW5zaXZlIHNlYXJjaCBmb3IgbWF0Y2hlc1xuICAvLyB3aXRoIGVycm9ycy5cbiAgcmV0dXJuIGFwcHJveFNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGB0ZXh0YCBhbmQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gdGV4dE1hdGNoU2NvcmUodGV4dCwgc3RyKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gYHNjb3JlTWF0Y2hgIHdpbGwgbmV2ZXIgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKi9cbiAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgc3RyLCBzdHIubGVuZ3RoKTtcblxuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgcmV0dXJuIDEgLSAobWF0Y2hlc1swXS5lcnJvcnMgLyBzdHIubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoIGZvciBgcXVvdGVgIGluIGB0ZXh0YC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBpZiBubyBtYXRjaCBleGNlZWRpbmcgdGhlIG1pbmltdW0gcXVhbGl0eSB0aHJlc2hvbGQgd2FzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRG9jdW1lbnQgdGV4dCB0byBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdW90ZSAtIFN0cmluZyB0byBmaW5kIHdpdGhpbiBgdGV4dGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IC1cbiAqICAgQ29udGV4dCBpbiB3aGljaCB0aGUgcXVvdGUgb3JpZ2luYWxseSBhcHBlYXJlZC4gVGhpcyBpcyB1c2VkIHRvIGNob29zZSB0aGVcbiAqICAgYmVzdCBtYXRjaC5cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF0gLSBFeHBlY3RlZCB0ZXh0IGJlZm9yZSB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF0gLSBFeHBlY3RlZCB0ZXh0IGFmdGVyIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge251bWJlcn0gW2NvbnRleHQuaGludF0gLSBFeHBlY3RlZCBvZmZzZXQgb2YgbWF0Y2ggd2l0aGluIHRleHRcbiAqIEByZXR1cm4ge01hdGNofG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1b3RlKHRleHQsIHF1b3RlLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKHF1b3RlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hvb3NlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gYWxsb3cgZm9yIHRoZSBpbml0aWFsIHNlYXJjaC5cbiAgLy8gVGhpcyBjaG9pY2UgaW52b2x2ZXMgYSB0cmFkZW9mZiBiZXR3ZWVuOlxuICAvL1xuICAvLyAgLSBSZWNhbGwgKHByb3BvcnRpb24gb2YgXCJnb29kXCIgbWF0Y2hlcyBmb3VuZClcbiAgLy8gIC0gUHJlY2lzaW9uIChwcm9wb3J0aW9uIG9mIG1hdGNoZXMgZm91bmQgd2hpY2ggYXJlIFwiZ29vZFwiKVxuICAvLyAgLSBDb3N0IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgb2YgcHJvY2Vzc2luZyB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgWzFdXG4gIC8vXG4gIC8vIFsxXSBTcGVjaWZpY2FsbHksIHRoZSBleHBlY3RlZC10aW1lIGNvbXBsZXhpdHkgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGlzXG4gIC8vICAgICBgTygobWF4RXJyb3JzIC8gMzIpICogdGV4dC5sZW5ndGgpYC4gU2VlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBkb2NzLlxuICBjb25zdCBtYXhFcnJvcnMgPSBNYXRoLm1pbigyNTYsIHF1b3RlLmxlbmd0aCAvIDIpO1xuXG4gIC8vIEZpbmQgY2xvc2VzdCBtYXRjaGVzIGZvciBgcXVvdGVgIGluIGB0ZXh0YCBiYXNlZCBvbiBlZGl0IGRpc3RhbmNlLlxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHF1b3RlLCBtYXhFcnJvcnMpO1xuXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgYSBtYXRjaCBjYW5kaWRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nTWF0Y2h9IG1hdGNoXG4gICAqL1xuICBjb25zdCBzY29yZU1hdGNoID0gbWF0Y2ggPT4ge1xuICAgIGNvbnN0IHF1b3RlV2VpZ2h0ID0gNTA7IC8vIFNpbWlsYXJpdHkgb2YgbWF0Y2hlZCB0ZXh0IHRvIHF1b3RlLlxuICAgIGNvbnN0IHByZWZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYmVmb3JlIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5wcmVmaXhgLlxuICAgIGNvbnN0IHN1ZmZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYWZ0ZXIgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnN1ZmZpeGAuXG4gICAgY29uc3QgcG9zV2VpZ2h0ID0gMjsgLy8gUHJveGltaXR5IHRvIGV4cGVjdGVkIGxvY2F0aW9uLiBVc2VkIGFzIGEgdGllLWJyZWFrZXIuXG5cbiAgICBjb25zdCBxdW90ZVNjb3JlID0gMSAtIG1hdGNoLmVycm9ycyAvIHF1b3RlLmxlbmd0aDtcblxuICAgIGNvbnN0IHByZWZpeFNjb3JlID0gY29udGV4dC5wcmVmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShNYXRoLm1heCgwLCBtYXRjaC5zdGFydCAtIGNvbnRleHQucHJlZml4Lmxlbmd0aCksIG1hdGNoLnN0YXJ0KSxcbiAgICAgICAgICBjb250ZXh0LnByZWZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcbiAgICBjb25zdCBzdWZmaXhTY29yZSA9IGNvbnRleHQuc3VmZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UobWF0Y2guZW5kLCBtYXRjaC5lbmQgKyBjb250ZXh0LnN1ZmZpeC5sZW5ndGgpLFxuICAgICAgICAgIGNvbnRleHQuc3VmZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuXG4gICAgbGV0IHBvc1Njb3JlID0gMS4wO1xuICAgIGlmICh0eXBlb2YgY29udGV4dC5oaW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMobWF0Y2guc3RhcnQgLSBjb250ZXh0LmhpbnQpO1xuICAgICAgcG9zU2NvcmUgPSAxLjAgLSBvZmZzZXQgLyB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTY29yZSA9XG4gICAgICBxdW90ZVdlaWdodCAqIHF1b3RlU2NvcmUgK1xuICAgICAgcHJlZml4V2VpZ2h0ICogcHJlZml4U2NvcmUgK1xuICAgICAgc3VmZml4V2VpZ2h0ICogc3VmZml4U2NvcmUgK1xuICAgICAgcG9zV2VpZ2h0ICogcG9zU2NvcmU7XG4gICAgY29uc3QgbWF4U2NvcmUgPSBxdW90ZVdlaWdodCArIHByZWZpeFdlaWdodCArIHN1ZmZpeFdlaWdodCArIHBvc1dlaWdodDtcbiAgICBjb25zdCBub3JtYWxpemVkU2NvcmUgPSByYXdTY29yZSAvIG1heFNjb3JlO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTY29yZTtcbiAgfTtcblxuICAvLyBSYW5rIG1hdGNoZXMgYmFzZWQgb24gc2ltaWxhcml0eSBvZiBhY3R1YWwgYW5kIGV4cGVjdGVkIHN1cnJvdW5kaW5nIHRleHRcbiAgLy8gYW5kIGFjdHVhbC9leHBlY3RlZCBvZmZzZXQgaW4gdGhlIGRvY3VtZW50IHRleHQuXG4gIGNvbnN0IHNjb3JlZE1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+ICh7XG4gICAgc3RhcnQ6IG0uc3RhcnQsXG4gICAgZW5kOiBtLmVuZCxcbiAgICBzY29yZTogc2NvcmVNYXRjaChtKSxcbiAgfSkpO1xuXG4gIC8vIENob29zZSBtYXRjaCB3aXRoIGhpZ2hlc3Qgc2NvcmUuXG4gIHNjb3JlZE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICByZXR1cm4gc2NvcmVkTWF0Y2hlc1swXTtcbn1cbiIsIi8qKlxuICogUmV0dXJuIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGV4dCBub2RlcyBjb250YWluZWQgaW4gYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBub2RlVGV4dExlbmd0aChub2RlKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIC8vIG5iLiBgdGV4dENvbnRlbnRgIGV4Y2x1ZGVzIHRleHQgaW4gY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAvLyB3aGVuIGNhbGxlZCBvbiBhIHBhcmVudCBlbGVtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0IHRoYXQgaGVyZS5cblxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobm9kZS50ZXh0Q29udGVudCkubGVuZ3RoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IG9mIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIHdoaWxlIChzaWJsaW5nKSB7XG4gICAgbGVuZ3RoICs9IG5vZGVUZXh0TGVuZ3RoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIG9yIG1vcmUgY2hhcmFjdGVyIG9mZnNldHMgd2l0aGluIGFuIGVsZW1lbnQgdG8gKHRleHQgbm9kZSwgcG9zaXRpb24pXG4gKiBwYWlycy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyW119IG9mZnNldHMgLSBPZmZzZXRzLCB3aGljaCBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfVtdfVxuICovXG5mdW5jdGlvbiByZXNvbHZlT2Zmc2V0cyhlbGVtZW50LCAuLi5vZmZzZXRzKSB7XG4gIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICBjb25zdCBub2RlSXRlciA9IC8qKiBAdHlwZSB7RG9jdW1lbnR9ICovIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgKS5jcmVhdGVOb2RlSXRlcmF0b3IoZWxlbWVudCwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgbGV0IHRleHROb2RlO1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICAvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgYG5leHRPZmZzZXRgdGggY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0XG4gIC8vIG9mIGBlbGVtZW50YC5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Tm9kZSkge1xuICAgIHRleHROb2RlID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAoY3VycmVudE5vZGUpO1xuICAgIGlmIChsZW5ndGggKyB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IG5leHRPZmZzZXQpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IG5leHRPZmZzZXQgLSBsZW5ndGggfSk7XG4gICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gICAgICBsZW5ndGggKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLy8gQm91bmRhcnkgY2FzZS5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0Tm9kZSAmJiBsZW5ndGggPT09IG5leHRPZmZzZXQpIHtcbiAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCB9KTtcbiAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICB9XG5cbiAgaWYgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgZXhjZWVkcyB0ZXh0IGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBsZXQgUkVTT0xWRV9GT1JXQVJEUyA9IDE7XG5leHBvcnQgbGV0IFJFU09MVkVfQkFDS1dBUkRTID0gMjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9mZnNldCB3aXRoaW4gdGhlIHRleHQgY29udGVudCBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoaXMgcG9zaXRpb24gY2FuIGJlIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZGVzY2VuZGFudCBub2RlIGluIHRoZSBjdXJyZW50XG4gKiBET00gc3VidHJlZSBvZiB0aGUgZWxlbWVudCB1c2luZyB0aGUgYHJlc29sdmVgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgdGV4dCBwb3NpdGlvbiBgb2Zmc2V0YCB3aXRoaW5cbiAgICogdGhlIHRleHQgY29udGVudCBvZiBgZWxlbWVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPZmZzZXQgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8qKiBFbGVtZW50IHRoYXQgYG9mZnNldGAgaXMgcmVsYXRpdmUgdG8uICovXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIC8qKiBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50J3MgYHRleHRDb250ZW50YC4gKi9cbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcG9zaXRpb24gd2l0aCBvZmZzZXQgcmVsYXRpdmUgdG8gYSBnaXZlbiBhbmNlc3RvclxuICAgKiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudCAtIEFuY2VzdG9yIG9mIGB0aGlzLmVsZW1lbnRgXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHJlbGF0aXZlVG8ocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuY29udGFpbnModGhpcy5lbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGN1cnJlbnQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgd2hpbGUgKGVsICE9PSBwYXJlbnQpIHtcbiAgICAgIG9mZnNldCArPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChlbCk7XG4gICAgICBlbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHBvc2l0aW9uIHRvIGEgc3BlY2lmaWMgdGV4dCBub2RlIGFuZCBvZmZzZXQgd2l0aGluIHRoYXQgbm9kZS5cbiAgICpcbiAgICogVGhyb3dzIGlmIGB0aGlzLm9mZnNldGAgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSW4gdGhlXG4gICAqIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaGFzIG5vIHRleHQgYW5kIGB0aGlzLm9mZnNldGAgaXMgMCwgdGhlIGBkaXJlY3Rpb25gXG4gICAqIG9wdGlvbiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucy5cbiAgICpcbiAgICogT2Zmc2V0cyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbm9kZXMgYXJlIHJlc29sdmVkIHRvIHRoZSBzdGFydCBvZiB0aGVcbiAgICogbm9kZSB0aGF0IGJlZ2lucyBhdCB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICBAcGFyYW0ge1JFU09MVkVfRk9SV0FSRFN8UkVTT0xWRV9CQUNLV0FSRFN9IFtvcHRpb25zLmRpcmVjdGlvbl0gLVxuICAgKiAgICAgU3BlY2lmaWVzIGluIHdoaWNoIGRpcmVjdGlvbiB0byBzZWFyY2ggZm9yIHRoZSBuZWFyZXN0IHRleHQgbm9kZSBpZlxuICAgKiAgICAgYHRoaXMub2Zmc2V0YCBpcyBgMGAgYW5kIGB0aGlzLmVsZW1lbnRgIGhhcyBubyB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkXG4gICAqICAgICBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfX1cbiAgICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAgICovXG4gIHJlc29sdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXNvbHZlT2Zmc2V0cyh0aGlzLmVsZW1lbnQsIHRoaXMub2Zmc2V0KVswXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMCAmJiBvcHRpb25zLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHR3ID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Um9vdE5vZGUoKSxcbiAgICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVFxuICAgICAgICApO1xuICAgICAgICB0dy5jdXJyZW50Tm9kZSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9yd2FyZHMgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUkVTT0xWRV9GT1JXQVJEUztcbiAgICAgICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7VGV4dHxudWxsfSAqLyAoXG4gICAgICAgICAgZm9yd2FyZHMgPyB0dy5uZXh0Tm9kZSgpIDogdHcucHJldmlvdXNOb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRleHQsIG9mZnNldDogZm9yd2FyZHMgPyAwIDogdGV4dC5kYXRhLmxlbmd0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgYG9mZnNldGB0aCBjaGFyYWN0ZXIgd2l0aGluXG4gICAqIGBub2RlYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21DaGFyT2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbi5mcm9tUG9pbnQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCBvZmZzZXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGlzIG5vdCBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIHN0YXJ0IG9yIGVuZCBwb2ludCAobm9kZSwgb2Zmc2V0KS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGV4dCBvciBFbGVtZW50IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIE9mZnNldCB3aXRoaW4gdGhlIG5vZGUuXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tUG9pbnQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IC8qKiBAdHlwZSB7VGV4dH0gKi8gKG5vZGUpLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBoYXMgbm8gcGFyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSArIG9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihub2RlLnBhcmVudEVsZW1lbnQsIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggYmVmb3JlIHRoZSBgb2Zmc2V0YHRoIGNoaWxkIG9mIGVsZW1lbnQuXG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgICAgIHRleHRPZmZzZXQgKz0gbm9kZVRleHRMZW5ndGgobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IGluIGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZ2lvbiBvZiBhIGRvY3VtZW50IGFzIGEgKHN0YXJ0LCBlbmQpIHBhaXIgb2YgYFRleHRQb3NpdGlvbmAgcG9pbnRzLlxuICpcbiAqIFJlcHJlc2VudGluZyBhIHJhbmdlIGluIHRoaXMgd2F5IGFsbG93cyBmb3IgY2hhbmdlcyBpbiB0aGUgRE9NIGNvbnRlbnQgb2YgdGhlXG4gKiByYW5nZSB3aGljaCBkb24ndCBhZmZlY3QgaXRzIHRleHQgY29udGVudCwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHRleHQgY29udGVudFxuICogb2YgdGhlIHJhbmdlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRSYW5nZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW1tdXRhYmxlIGBUZXh0UmFuZ2VgIGZyb20gYSBgc3RhcnRgIGFuZCBgZW5kYCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IHN0YXJ0XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gYVxuICAgKiBnaXZlbiBhbmNlc3Rvci4gU2VlIGBUZXh0UG9zaXRpb24ucmVsYXRpdmVUb2AuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgcmVsYXRpdmVUbyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlVG8oZWxlbWVudCksXG4gICAgICB0aGlzLmVuZC5yZWxhdGl2ZVRvKGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgVGV4dFJhbmdlYCB0byBhIERPTSByYW5nZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBET00gUmFuZ2Ugd2lsbCBhbHdheXMgc3RhcnQgYW5kIGVuZCBpbiBhIGBUZXh0YCBub2RlLlxuICAgKiBIZW5jZSBgVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkudG9SYW5nZSgpYCBjYW4gYmUgdXNlZCB0byBcInNocmlua1wiIGFcbiAgICogcmFuZ2UgdG8gdGhlIHRleHQgaXQgY29udGFpbnMuXG4gICAqXG4gICAqIE1heSB0aHJvdyBpZiB0aGUgYHN0YXJ0YCBvciBgZW5kYCBwb3NpdGlvbnMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cbiAgdG9SYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCA9PT0gdGhpcy5lbmQuZWxlbWVudCAmJlxuICAgICAgdGhpcy5zdGFydC5vZmZzZXQgPD0gdGhpcy5lbmQub2Zmc2V0XG4gICAgKSB7XG4gICAgICAvLyBGYXN0IHBhdGggZm9yIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGluIHNhbWUgZWxlbWVudC5cbiAgICAgIFtzdGFydCwgZW5kXSA9IHJlc29sdmVPZmZzZXRzKFxuICAgICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQsXG4gICAgICAgIHRoaXMuc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmVuZC5vZmZzZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5zdGFydC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0ZPUldBUkRTIH0pO1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9CQUNLV0FSRFMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gZXhpc3RpbmcgRE9NIGBSYW5nZWAgdG8gYSBgVGV4dFJhbmdlYFxuICAgKlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKiBAcmV0dXJuIHtUZXh0UmFuZ2V9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KFxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICByYW5nZS5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgYFRleHRSYW5nZWAgZnJvbSB0aGUgYHN0YXJ0YHRoIHRvIGBlbmRgdGggY2hhcmFjdGVycyBpbiBgcm9vdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgc3RhdGljIGZyb21PZmZzZXRzKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgc3RhcnQpLFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBlbmQpXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGNsYXNzZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBET00gYFJhbmdlYFxuICogb2JqZWN0cyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlbGVjdG9ycy4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhXG4gKiBzZXQgb2YgYW5jaG9yaW5nIGxpYnJhcmllcy4gSXQgc2VydmVzIHR3byBtYWluIHB1cnBvc2VzOlxuICpcbiAqICAxLiBQcm92aWRpbmcgYSBjb25zaXN0ZW50IGludGVyZmFjZSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFuY2hvcnMuXG4gKiAgMi4gSW5zdWxhdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIEFQSSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGFuY2hvcmluZ1xuICogICAgIGxpYnJhcmllcy5cbiAqL1xuXG5pbXBvcnQgeyBtYXRjaFF1b3RlIH0gZnJvbSAnLi9tYXRjaC1xdW90ZSc7XG5pbXBvcnQgeyBUZXh0UmFuZ2UsIFRleHRQb3NpdGlvbiB9IGZyb20gJy4vdGV4dC1yYW5nZSc7XG5pbXBvcnQgeyBub2RlRnJvbVhQYXRoLCB4cGF0aEZyb21Ob2RlIH0gZnJvbSAnLi94cGF0aCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuUmFuZ2VTZWxlY3Rvcn0gUmFuZ2VTZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFBvc2l0aW9uU2VsZWN0b3J9IFRleHRQb3NpdGlvblNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UXVvdGVTZWxlY3Rvcn0gVGV4dFF1b3RlU2VsZWN0b3JcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUmFuZ2VBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgcmFuZ2UpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhbmNob3IgZnJvbSBhIHNlcmlhbGl6ZWQgYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2VTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3Iuc3RhcnRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghc3RhcnRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgc3RhcnRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLmVuZENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFlbmRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZW5kQ29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5lbmRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpLnRvUmFuZ2UoKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7UmFuZ2VTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgLy8gXCJTaHJpbmtcIiB0aGUgcmFuZ2Ugc28gdGhhdCBpdCB0aWdodGx5IHdyYXBzIGl0cyB0ZXh0LiBUaGlzIGVuc3VyZXMgbW9yZVxuICAgIC8vIHByZWRpY3RhYmxlIG91dHB1dCBmb3IgYSBnaXZlbiB0ZXh0IHNlbGVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkUmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHRoaXMucmFuZ2UpLnRvUmFuZ2UoKTtcblxuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2Uobm9ybWFsaXplZFJhbmdlKTtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLnN0YXJ0LmVsZW1lbnQsIHRoaXMucm9vdCk7XG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2UuZW5kLmVsZW1lbnQsIHRoaXMucm9vdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JhbmdlU2VsZWN0b3InLFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzdGFydE9mZnNldDogdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIGVuZE9mZnNldDogdGV4dFJhbmdlLmVuZC5vZmZzZXQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRQb3NpdGlvblNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbkFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKFxuICAgICAgcm9vdCxcbiAgICAgIHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICB0ZXh0UmFuZ2UuZW5kLm9mZnNldFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvblNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHJvb3QsIHNlbGVjdG9yLnN0YXJ0LCBzZWxlY3Rvci5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvblNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRQb3NpdGlvblNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICB9O1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gVGV4dFJhbmdlLmZyb21PZmZzZXRzKHRoaXMucm9vdCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLnRvUmFuZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFF1b3RlTWF0Y2hPcHRpb25zXG4gKiBAcHJvcCB7bnVtYmVyfSBbaGludF0gLSBFeHBlY3RlZCBwb3NpdGlvbiBvZiBtYXRjaCBpbiB0ZXh0LiBTZWUgYG1hdGNoUXVvdGVgLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFF1b3RlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFF1b3RlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhhY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XVxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBleGFjdCwgY29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmV4YWN0ID0gZXhhY3Q7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgVGV4dFF1b3RlQW5jaG9yYCBmcm9tIGEgcmFuZ2UuXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgYHJhbmdlYCBkb2VzIG5vdCBjb250YWluIGFueSB0ZXh0IG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICAgIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBxdW90ZSB0byBjYXB0dXJlIGFzIGNvbnRleHQuIFdlIGN1cnJlbnRseVxuICAgIC8vIGFsd2F5cyB1c2UgYSBmaXhlZCBhbW91bnQsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhpcyBjb2RlIHdhcyBhd2FyZVxuICAgIC8vIG9mIGxvZ2ljYWwgYm91bmRhcmllcyBpbiB0aGUgZG9jdW1lbnQgKHBhcmFncmFwaCwgYXJ0aWNsZSBldGMuKSB0byBhdm9pZFxuICAgIC8vIGNhcHR1cmluZyB0ZXh0IHVucmVsYXRlZCB0byB0aGUgcXVvdGUuXG4gICAgLy9cbiAgICAvLyBJbiByZWd1bGFyIHByb3NlIHRoZSBpZGVhbCBjb250ZW50IHdvdWxkIG9mdGVuIGJlIHRoZSBzdXJyb3VuZGluZyBzZW50ZW5jZS5cbiAgICAvLyBUaGlzIGlzIGEgbmF0dXJhbCB1bml0IG9mIG1lYW5pbmcgd2hpY2ggZW5hYmxlcyBkaXNwbGF5aW5nIHF1b3RlcyBpblxuICAgIC8vIGNvbnRleHQgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBpcyBub3QgYXZhaWxhYmxlLiBXZSBjb3VsZCB1c2UgYEludGwuU2VnbWVudGVyYFxuICAgIC8vIGZvciB0aGlzIHdoZW4gYXZhaWxhYmxlLlxuICAgIGNvbnN0IGNvbnRleHRMZW4gPSAzMjtcblxuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCksIHtcbiAgICAgIHByZWZpeDogdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIGNvbnRleHRMZW4pLCBzdGFydCksXG4gICAgICBzdWZmaXg6IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgY29udGV4dExlbikpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRRdW90ZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHsgcHJlZml4LCBzdWZmaXggfSA9IHNlbGVjdG9yO1xuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHNlbGVjdG9yLmV4YWN0LCB7IHByZWZpeCwgc3VmZml4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRRdW90ZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRRdW90ZVNlbGVjdG9yJyxcbiAgICAgIGV4YWN0OiB0aGlzLmV4YWN0LFxuICAgICAgcHJlZml4OiB0aGlzLmNvbnRleHQucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLmNvbnRleHQuc3VmZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1JhbmdlKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnRvUG9zaXRpb25BbmNob3Iob3B0aW9ucykudG9SYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hRdW90ZSh0ZXh0LCB0aGlzLmV4YWN0LCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICBoaW50OiBvcHRpb25zLmhpbnQsXG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdW90ZSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IodGhpcy5yb290LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgVGV4dFF1b3RlQW5jaG9yIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzXCI7XG5cbi8vIENhdGNoIEpTIGVycm9ycyB0byBsb2cgdGhlbSBpbiB0aGUgYXBwLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwiZXJyb3JcIixcbiAgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgQW5kcm9pZC5sb2dFcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5maWxlbmFtZSwgZXZlbnQubGluZW5vKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8vIE5vdGlmeSBuYXRpdmUgY29kZSB0aGF0IHRoZSBwYWdlIGhhcyBsb2FkZWQuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gICAgICBzbmFwQ3VycmVudE9mZnNldCgpO1xuICAgIH0pO1xuICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8qKlxuICogSGF2aW5nIGFuIG9kZCBudW1iZXIgb2YgY29sdW1ucyB3aGVuIGRpc3BsYXlpbmcgdHdvIGNvbHVtbnMgcGVyIHNjcmVlbiBjYXVzZXMgc25hcHBpbmcgYW5kIHBhZ2VcbiAqIHR1cm5pbmcgaXNzdWVzLiBUbyBmaXggdGhpcywgd2UgaW5zZXJ0IGEgYmxhbmsgdmlydHVhbCBjb2x1bW4gYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpIHtcbiAgY29uc3QgaWQgPSBcInJlYWRpdW0tdmlydHVhbC1wYWdlXCI7XG4gIHZhciB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHx8IGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkgIT0gMikge1xuICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGNvbENvdW50ID0gZG9jdW1lbnRXaWR0aCAvIHBhZ2VXaWR0aDtcbiAgICB2YXIgaGFzT2RkQ29sQ291bnQgPSAoTWF0aC5yb3VuZChjb2xDb3VudCAqIDIpIC8gMikgJSAxID4gMC4xO1xuICAgIGlmIChoYXNPZGRDb2xDb3VudCkge1xuICAgICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2aXJ0dWFsQ29sLnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgICAgdmlydHVhbENvbC5zdHlsZS5icmVha0JlZm9yZSA9IFwiY29sdW1uXCI7XG4gICAgICAgIHZpcnR1YWxDb2wuaW5uZXJIVE1MID0gXCImIzgyMDM7XCI7IC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aXJ0dWFsQ29sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHZhciBwYWdlV2lkdGggPSAxO1xuXG5mdW5jdGlvbiBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCkge1xuICAvLyBXZSBjYW4ndCByZWx5IG9uIHdpbmRvdy5pbm5lcldpZHRoIGZvciB0aGUgcGFnZVdpZHRoIG9uIEFuZHJvaWQsIGJlY2F1c2UgaWYgdGhlXG4gIC8vIGRldmljZSBwaXhlbCByYXRpbyBpcyBub3QgYW4gaW50ZWdlciwgd2UgZ2V0IHJvdW5kaW5nIGlzc3VlcyBvZmZzZXR0aW5nIHRoZSBwYWdlcy5cbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3JlYWRpdW0tY3NzL2lzc3Vlcy85N1xuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcjItbmF2aWdhdG9yLWtvdGxpbi9pc3N1ZXMvMTQ2XG4gIHZhciB3aWR0aCA9IEFuZHJvaWQuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICBwYWdlV2lkdGggPSB3aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBzZXRQcm9wZXJ0eShcbiAgICBcIi0tUlNfX3ZpZXdwb3J0V2lkdGhcIixcbiAgICBcImNhbGMoXCIgKyB3aWR0aCArIFwicHggLyBcIiArIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICsgXCIpXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkge1xuICByZXR1cm4gcGFyc2VJbnQoXG4gICAgd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbi1jb3VudFwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1VU0VSX19zY3JvbGxcIilcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpID09IFwicmVhZGl1bS1zY3JvbGwtb25cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Q3NzU2VsZWN0b3IgfSBmcm9tIFwiY3NzLXNlbGVjdG9yLWdlbmVyYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IoKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaHJlZjogXCIjXCIsXG4gICAgdHlwZTogXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIixcbiAgICBsb2NhdGlvbnM6IHtcbiAgICAgIGNzc1NlbGVjdG9yOiBnZXRDc3NTZWxlY3RvcihlbGVtZW50KSxcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogZWxlbWVudC50ZXh0Q29udGVudCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kRWxlbWVudChyb290RWxlbWVudCkge1xuICB2YXIgZm91bmRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZWxlbWVudFJlbGF0aXZlUG9zaXRpb24oY2hpbGQsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHBvc2l0aW9uID09IDApIHtcbiAgICAgIGlmICghc2hvdWxkSWdub3JlRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICAgIGlmICghZm91bmRFbGVtZW50KSB7XG4gICAgICAgIGZvdW5kRWxlbWVudCA9IGNoaWxkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudCkge1xuICAgIHJldHVybiBmaW5kRWxlbWVudChmb3VuZEVsZW1lbnQpO1xuICB9XG4gIHJldHVybiByb290RWxlbWVudDtcbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gZWxlbWVudFJlbGF0aXZlUG9zaXRpb24oZWxlbWVudCwgZG9tUmVjdCAvKiBudWxsYWJsZSAqLykge1xuICBpZiAocmVhZGl1bS5pc0ZpeGVkTGF5b3V0KSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8ICFkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCByZWN0ID0gZG9tUmVjdCB8fCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocmVjdC5sZWZ0ID49IHBhZ2VXaWR0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChyZWN0LmxlZnQgPj0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSWdub3JlRWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENhbm5vdCBiZSByZWxpZWQgdXBvbiwgYmVjYXVzZSB3ZWIgYnJvd3NlciBlbmdpbmUgcmVwb3J0cyBpbnZpc2libGUgd2hlbiBvdXQgb2YgdmlldyBpblxuICAgIC8vIHNjcm9sbGVkIGNvbHVtbnMhXG4gICAgLy8gY29uc3QgdmlzaWJpbGl0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2liaWxpdHlcIik7XG4gICAgLy8gaWYgKHZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIH1cbiAgICBjb25zdCBvcGFjaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3BhY2l0eVwiKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gXCIwXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGxvZ0Vycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IHRvTmF0aXZlUmVjdCB9IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IFRleHRSYW5nZSB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlXCI7XG5cbi8vIFBvbHlmaWxsIGZvciBBbmRyb2lkIEFQSSAyNlxuaW1wb3J0IG1hdGNoQWxsIGZyb20gXCJzdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsXCI7XG5tYXRjaEFsbC5zaGltKCk7XG5cbmNvbnN0IGRlYnVnID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb24oKSB7XG4gIGNvbnN0IHRleHQgPSBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdCgpO1xuICByZXR1cm4geyB0ZXh0LCByZWN0IH07XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIHJldHVybiB0b05hdGl2ZVJlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhbkhpZ2hsaWdodCA9IGhpZ2hsaWdodFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxuL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDtcbiAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhkb2N1bWVudC5ib2R5KTtcbiAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICBjb25zdCBzbmlwcGV0TGVuZ3RoID0gMjAwO1xuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYmVmb3JlIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBmaXJzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYmVmb3JlID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIHNuaXBwZXRMZW5ndGgpLCBzdGFydCk7XG4gIGxldCBmaXJzdFdvcmRTdGFydCA9IGJlZm9yZS5zZWFyY2goL1xcUHtMfVxccHtMfS9ndSk7XG4gIGlmIChmaXJzdFdvcmRTdGFydCAhPT0gLTEpIHtcbiAgICBiZWZvcmUgPSBiZWZvcmUuc2xpY2UoZmlyc3RXb3JkU3RhcnQgKyAxKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYWZ0ZXIgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGxhc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGFmdGVyID0gdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBzbmlwcGV0TGVuZ3RoKSk7XG4gIGxldCBsYXN0V29yZEVuZCA9IEFycmF5LmZyb20oYWZ0ZXIubWF0Y2hBbGwoL1xccHtMfVxcUHtMfS9ndSkpLnBvcCgpO1xuICBpZiAobGFzdFdvcmRFbmQgIT09IHVuZGVmaW5lZCAmJiBsYXN0V29yZEVuZC5pbmRleCA+IDEpIHtcbiAgICBhZnRlciA9IGFmdGVyLnNsaWNlKDAsIGxhc3RXb3JkRW5kLmluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4geyBoaWdobGlnaHQsIGJlZm9yZSwgYWZ0ZXIgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIEJhc2Ugc2NyaXB0IHVzZWQgYnkgYm90aCByZWZsb3dhYmxlIGFuZCBmaXhlZCBsYXlvdXQgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2dlc3R1cmVzXCI7XG5pbXBvcnQge1xuICByZW1vdmVQcm9wZXJ0eSxcbiAgc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvRW5kLFxuICBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb1RleHQsXG4gIHNldFByb3BlcnR5LFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5ub3RhdGlvbixcbiAgY3JlYXRlSGlnaGxpZ2h0LFxuICBkZXN0cm95SGlnaGxpZ2h0LFxuICBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbyxcbiAgZ2V0U2VsZWN0aW9uUmVjdCxcbiAgcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElELFxuICBzZXRTY3JvbGxNb2RlLFxufSBmcm9tIFwiLi9oaWdobGlnaHRcIjtcbmltcG9ydCB7IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yIH0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXREZWNvcmF0aW9ucywgcmVnaXN0ZXJUZW1wbGF0ZXMgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxuLy8gUHVibGljIEFQSSB1c2VkIGJ5IHRoZSBuYXZpZ2F0b3IuXG53aW5kb3cucmVhZGl1bSA9IHtcbiAgLy8gdXRpbHNcbiAgc2Nyb2xsVG9JZDogc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbjogc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9UZXh0OiBzY3JvbGxUb1RleHQsXG4gIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0OiBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9TdGFydDogc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9FbmQ6IHNjcm9sbFRvRW5kLFxuICBzZXRQcm9wZXJ0eTogc2V0UHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnR5OiByZW1vdmVQcm9wZXJ0eSxcblxuICAvLyBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbjogZ2V0Q3VycmVudFNlbGVjdGlvbixcblxuICAvLyBkZWNvcmF0aW9uXG4gIHJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlczogcmVnaXN0ZXJUZW1wbGF0ZXMsXG4gIGdldERlY29yYXRpb25zOiBnZXREZWNvcmF0aW9ucyxcblxuICAvLyBET01cbiAgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3I6IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yLFxufTtcblxuLy8gTGVnYWN5IGhpZ2hsaWdodHMgQVBJLlxud2luZG93LmNyZWF0ZUFubm90YXRpb24gPSBjcmVhdGVBbm5vdGF0aW9uO1xud2luZG93LmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbndpbmRvdy5kZXN0cm95SGlnaGxpZ2h0ID0gZGVzdHJveUhpZ2hsaWdodDtcbndpbmRvdy5nZXRDdXJyZW50U2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvO1xud2luZG93LmdldFNlbGVjdGlvblJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0O1xud2luZG93LnJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCA9IHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRDtcbndpbmRvdy5zZXRTY3JvbGxNb2RlID0gc2V0U2Nyb2xsTW9kZTtcbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIFNjcmlwdCB1c2VkIGZvciByZWZsb3dhYmxlIHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9pbmRleFwiO1xuXG53aW5kb3cucmVhZGl1bS5pc1JlZmxvd2FibGUgPSB0cnVlO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFNldHVwcyB0aGUgYHZpZXdwb3J0YCBtZXRhIHRhZyB0byBkaXNhYmxlIHpvb21pbmcuXG4gIGxldCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpO1xuICBtZXRhLnNldEF0dHJpYnV0ZShcbiAgICBcImNvbnRlbnRcIixcbiAgICBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCBzaHJpbmstdG8tZml0PW5vXCJcbiAgKTtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChtZXRhKTtcbn0pO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEVsZW1lbnQiLCJocmVmIiwicm9vdEVsZW1lbnQiLCJlbGVtZW50UmVsYXRpdmVQb3NpdGlvbiIsInNob3VsZElnbm9yZUVsZW1lbnQiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyIsImlzUmVmbG93YWJsZSIsIm1ldGEiLCJoZWFkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file From c62fa1390f367df9cd0c1f627142673be63f826d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 6 Apr 2022 14:57:21 +0200 Subject: [PATCH 17/59] Fix crash --- .../shared/publication/services/content/ContentIterator.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt index caa0dba0dd..ee01dc42e0 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt @@ -13,6 +13,7 @@ import org.jsoup.nodes.* import org.jsoup.parser.Parser import org.jsoup.select.NodeTraversor import org.jsoup.select.NodeVisitor +import org.readium.r2.shared.extensions.tryOrNull import org.readium.r2.shared.fetcher.Resource import org.readium.r2.shared.fetcher.mapCatching import org.readium.r2.shared.publication.Link @@ -168,10 +169,11 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) private fun parseElement(element: Element): List { val contentParser = ContentParser( baseLocator = locator, - startElement = locator.locations.cssSelector + startElement = locator.locations.cssSelector?.let { // The JS third-party library used to generate the CSS Selector sometimes adds // :root >, which doesn't work with JSoup. - ?.let { element.selectFirst(it.removePrefix(":root > ")) }, + tryOrNull { element.selectFirst(it.removePrefix(":root > ")) } + } ) NodeTraversor.traverse(contentParser, element) var content = contentParser.content From 4cbbad79f44ba2a50a273cc5e1b9a181f99cd9e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 6 Apr 2022 17:13:54 +0200 Subject: [PATCH 18/59] Fix current locator not being propagated --- .../java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt | 2 +- .../java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index afeae94453..4432bbc075 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -294,6 +294,7 @@ class EpubNavigatorFragment private constructor( val (index, resource) = page if (resourcePager.currentItem != index) { + pendingLocator = locator resourcePager.currentItem = index } else if (resource is PageResource.EpubReflowable) { currentFragment?.loadLocator(locator) @@ -301,7 +302,6 @@ class EpubNavigatorFragment private constructor( } if (publication.metadata.presentation.layout == EpubLayout.REFLOWABLE) { - pendingLocator = locator setCurrent(resourcesSingle) } else { diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt index 08901f4ac6..2d2a952543 100755 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt @@ -300,6 +300,7 @@ class R2EpubPageFragment : Fragment() { val webView = requireNotNull(webView) val epubNavigator = requireNotNull(webView.navigator as? EpubNavigatorFragment) loadLocator(webView, epubNavigator.readingProgression, locator) + webView.listener.onProgressionChanged() } private suspend fun loadLocator(webView: R2WebView, readingProgression: ReadingProgression, locator: Locator) { From e092bb1f6736facc495b142736aaca340cad0a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 13 Apr 2022 11:14:12 +0200 Subject: [PATCH 19/59] Fix regression when loading a locator of an already loaded resource. --- .../src/main/assets/_scripts/src/utils.js | 4 +- .../assets/readium/scripts/readium-fixed.js | 2 +- .../readium/scripts/readium-reflowable.js | 2 +- .../navigator/epub/EpubNavigatorFragment.kt | 4 +- .../r2/navigator/pager/R2EpubPageFragment.kt | 37 +++++++++---------- 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/readium/navigator/src/main/assets/_scripts/src/utils.js b/readium/navigator/src/main/assets/_scripts/src/utils.js index 3fc1b1c9a2..879f9d2eb9 100644 --- a/readium/navigator/src/main/assets/_scripts/src/utils.js +++ b/readium/navigator/src/main/assets/_scripts/src/utils.js @@ -143,7 +143,7 @@ export function scrollToText(text) { } function scrollToRange(range) { - scrollToRect(range.getBoundingClientRect()); + return scrollToRect(range.getBoundingClientRect()); } function scrollToRect(rect) { @@ -155,6 +155,8 @@ function scrollToRect(rect) { rect.left + window.scrollX ); } + + return true; } export function scrollToStart() { diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js index 97fac15f7b..c4f9941e66 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUVBLFlBSkM7QUFLZkYsRUFBQUEsVUFBVSxFQUFFQSxVQUxHO0FBTWZnQixFQUFBQSxXQUFXLEVBQUVBLFdBTkU7QUFPZkwsRUFBQUEsYUFBYSxFQUFFQSxhQVBBO0FBUWZFLEVBQUFBLFdBQVcsRUFBRUEsV0FSRTtBQVNmL0IsRUFBQUEsV0FBVyxFQUFFQSxXQVRFO0FBVWZrRCxFQUFBQSxjQUFjLEVBQUVBLGNBVkQ7QUFZZjtBQUNBcWUsRUFBQUEsbUJBQW1CLEVBQUVBLG1CQWJOO0FBZWY7QUFDQU8sRUFBQUEsMkJBQTJCLEVBQUVsYSxpQkFoQmQ7QUFpQmZRLEVBQUFBLGNBQWMsRUFBRUEsY0FqQkQ7QUFtQmY7QUFDQXVZLEVBQUFBLHVCQUF1QixFQUFFQSx1QkFBdUJBO0FBcEJqQyxDQUFqQixFQXVCQTs7QUFDQWhqQixNQUFNLENBQUN3ZSxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0F4ZSxNQUFNLENBQUNzZSxlQUFQLEdBQXlCQSxlQUF6QjtBQUNBdGUsTUFBTSxDQUFDb1gsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBcFgsTUFBTSxDQUFDMlksdUJBQVAsR0FBaUNBLHVCQUFqQztBQUNBM1ksTUFBTSxDQUFDMmlCLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQTNpQixNQUFNLENBQUMwaUIsMkJBQVAsR0FBcUNBLDJCQUFyQztBQUNBMWlCLE1BQU0sQ0FBQzhpQixhQUFQLEdBQXVCQSxhQUF2QixDOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBOWlCLE1BQU0sQ0FBQ3VqQixPQUFQLENBQWU1RSxhQUFmLEdBQStCLElBQS9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvbWF0Y2gtcXVvdGUuanM/ZGQ2YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlLmpzP2ZkZWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXMuanM/NDAwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3V0aWxzLmpzPzAyNWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9yZWN0LmpzPzRkNWEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kZWNvcmF0b3IuanM/MWIwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2dlc3R1cmVzLmpzPzE0YzIiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9oaWdobGlnaHQuanM/OGRhOCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RvbS5qcz9jYmYwIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvc2VsZWN0aW9uLmpzPzU5YWMiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC5qcz9iNjM1Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXgtZml4ZWQuanM/ZDk5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JUTCgpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuZGlyLnRvTG93ZXJDYXNlKCkgPT0gXCJydGxcIjtcbn1cblxuLy8gU2Nyb2xsIHRvIHRoZSBnaXZlbiBUYWdJZCBpbiBkb2N1bWVudCBhbmQgc25hcC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0lkKGlkKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVG9SZWN0KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG4vLyBQb3NpdGlvbiBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCAtIDFdLCAwLTEwMCUuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbikge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1Bvc2l0aW9uIFwiICsgcG9zaXRpb24pO1xuICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gMSkge1xuICAgIHRocm93IFwic2Nyb2xsVG9Qb3NpdGlvbigpIG11c3QgYmUgZ2l2ZW4gYSBwb3NpdGlvbiBmcm9tIDAuMCB0byAgMS4wXCI7XG4gIH1cblxuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxIZWlnaHQgKiBwb3NpdGlvbjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcbiAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnRXaWR0aCAqIHBvc2l0aW9uICogZmFjdG9yO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgfVxufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiB0ZXh0IHNuaXBwZXQuXG4vL1xuLy8gVGhlIGV4cGVjdGVkIHRleHQgYXJndW1lbnQgaXMgYSBMb2NhdG9yIFRleHQgb2JqZWN0LCBhcyBkZWZpbmVkIGhlcmU6XG4vLyBodHRwczovL3JlYWRpdW0ub3JnL2FyY2hpdGVjdHVyZS9tb2RlbHMvbG9jYXRvcnMvXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9UZXh0KHRleHQpIHtcbiAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcih7IHRleHQgfSk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2Nyb2xsVG9SYW5nZShyYW5nZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JhbmdlKHJhbmdlKSB7XG4gIHNjcm9sbFRvUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmVjdChyZWN0KSB7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gd2luZG93LmlubmVySGVpZ2h0IC8gMjtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1N0YXJ0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1N0YXJ0XCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbmQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvRW5kXCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoICogZmFjdG9yXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0O1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSBsZWZ0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCAtIHBhZ2VXaWR0aDtcbiAgdmFyIG1pbk9mZnNldCA9IGlzUlRMKCkgPyAtKGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGgpIDogMDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWF4KG9mZnNldCwgbWluT2Zmc2V0KSk7XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgcmlnaHQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFJpZ2h0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCArIHBhZ2VXaWR0aDtcbiAgdmFyIG1heE9mZnNldCA9IGlzUlRMKCkgPyAwIDogZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWluKG9mZnNldCwgbWF4T2Zmc2V0KSk7XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGdpdmVuIGxlZnQgb2Zmc2V0LlxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBzY3JvbGwgcG9zaXRpb24gaXMgYWxyZWFkeSBjbG9zZSBlbm91Z2ggdG8gdGhlIGdpdmVuIG9mZnNldC5cbmZ1bmN0aW9uIHNjcm9sbFRvT2Zmc2V0KG9mZnNldCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb09mZnNldCBcIiArIG9mZnNldCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBcIkNhbGxlZCBzY3JvbGxUb09mZnNldCgpIHdpdGggc2Nyb2xsIG1vZGUgZW5hYmxlZC4gVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHBhZ2luYXRlZCBtb2RlLlwiO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICAvLyBJbiBzb21lIGNhc2UgdGhlIHNjcm9sbFggY2Fubm90IHJlYWNoIHRoZSBwb3NpdGlvbiByZXNwZWN0aW5nIHRvIGlubmVyV2lkdGhcbiAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50T2Zmc2V0IC0gb2Zmc2V0KSAvIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIGRpZmYgPiAwLjAxO1xufVxuXG4vLyBTbmFwIHRoZSBvZmZzZXQgdG8gdGhlIHNjcmVlbiB3aWR0aCAocGFnZSB3aWR0aCkuXG5mdW5jdGlvbiBzbmFwT2Zmc2V0KG9mZnNldCkge1xuICB2YXIgdmFsdWUgPSBvZmZzZXQgKyAoaXNSVEwoKSA/IC0xIDogMSk7XG4gIHJldHVybiB2YWx1ZSAtICh2YWx1ZSAlIHBhZ2VXaWR0aCk7XG59XG5cbi8vIFNuYXBzIHRoZSBjdXJyZW50IG9mZnNldCB0byB0aGUgcGFnZSB3aWR0aC5cbmZ1bmN0aW9uIHNuYXBDdXJyZW50T2Zmc2V0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzbmFwQ3VycmVudE9mZnNldFwiKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICAvLyBBZGRzIGhhbGYgYSBwYWdlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzbmFwIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgdmFyIGRlbHRhID0gZmFjdG9yICogKHBhZ2VXaWR0aCAvIDIpO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KGN1cnJlbnRPZmZzZXQgKyBkZWx0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUZyb21Mb2NhdG9yKGxvY2F0b3IpIHtcbiAgbGV0IHRleHQgPSBsb2NhdG9yLnRleHQ7XG4gIGlmICghdGV4dCB8fCAhdGV4dC5oaWdobGlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHZhciByb290O1xuICAgIGxldCBsb2NhdGlvbnMgPSBsb2NhdG9yLmxvY2F0aW9ucztcbiAgICBpZiAobG9jYXRpb25zICYmIGxvY2F0aW9ucy5jc3NTZWxlY3Rvcikge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb25zLmNzc1NlbGVjdG9yKTtcbiAgICB9XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDc3NTZWxlY3RvciB9IGZyb20gXCJjc3Mtc2VsZWN0b3ItZ2VuZXJhdG9yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcigpIHtcbiAgY29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBocmVmOiBcIiNcIixcbiAgICB0eXBlOiBcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiLFxuICAgIGxvY2F0aW9uczoge1xuICAgICAgY3NzU2VsZWN0b3I6IGdldENzc1NlbGVjdG9yKGVsZW1lbnQpLFxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiBlbGVtZW50LnRleHRDb250ZW50LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFbGVtZW50KHJvb3RFbGVtZW50KSB7XG4gIHZhciBmb3VuZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgY29uc3QgcG9zaXRpb24gPSBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihjaGlsZCwgdW5kZWZpbmVkKTtcbiAgICBpZiAocG9zaXRpb24gPT0gMCkge1xuICAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICBmb3VuZEVsZW1lbnQgPSBjaGlsZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgaWYgKCFmb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50KGZvdW5kRWxlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJvb3RFbGVtZW50O1xufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHJldHVybiB0cnVlO1xuXG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgIWRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGlmIChyZWN0LmxlZnQgPj0gcGFnZVdpZHRoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKHJlY3QubGVmdCA+PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIGZpeGVkIGxheW91dHMgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzRml4ZWRMYXlvdXQgPSB0cnVlO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEVsZW1lbnQiLCJocmVmIiwicm9vdEVsZW1lbnQiLCJlbGVtZW50UmVsYXRpdmVQb3NpdGlvbiIsInNob3VsZElnbm9yZUVsZW1lbnQiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n return scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n\n return true;\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFJZk8sRUFBQUEsWUFBWSxFQUFFQSxZQUpDO0FBS2ZGLEVBQUFBLFVBQVUsRUFBRUEsVUFMRztBQU1mZ0IsRUFBQUEsV0FBVyxFQUFFQSxXQU5FO0FBT2ZMLEVBQUFBLGFBQWEsRUFBRUEsYUFQQTtBQVFmRSxFQUFBQSxXQUFXLEVBQUVBLFdBUkU7QUFTZi9CLEVBQUFBLFdBQVcsRUFBRUEsV0FURTtBQVVma0QsRUFBQUEsY0FBYyxFQUFFQSxjQVZEO0FBWWY7QUFDQXFlLEVBQUFBLG1CQUFtQixFQUFFQSxtQkFiTjtBQWVmO0FBQ0FPLEVBQUFBLDJCQUEyQixFQUFFbGEsaUJBaEJkO0FBaUJmUSxFQUFBQSxjQUFjLEVBQUVBLGNBakJEO0FBbUJmO0FBQ0F1WSxFQUFBQSx1QkFBdUIsRUFBRUEsdUJBQXVCQTtBQXBCakMsQ0FBakIsRUF1QkE7O0FBQ0FoakIsTUFBTSxDQUFDd2UsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBeGUsTUFBTSxDQUFDc2UsZUFBUCxHQUF5QkEsZUFBekI7QUFDQXRlLE1BQU0sQ0FBQ29YLGdCQUFQLEdBQTBCQSxnQkFBMUI7QUFDQXBYLE1BQU0sQ0FBQzJZLHVCQUFQLEdBQWlDQSx1QkFBakM7QUFDQTNZLE1BQU0sQ0FBQzJpQixnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0EzaUIsTUFBTSxDQUFDMGlCLDJCQUFQLEdBQXFDQSwyQkFBckM7QUFDQTFpQixNQUFNLENBQUM4aUIsYUFBUCxHQUF1QkEsYUFBdkIsQzs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTlpQixNQUFNLENBQUN1akIsT0FBUCxDQUFlNUUsYUFBZixHQUErQixJQUEvQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LWZpeGVkLmpzP2Q5OWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcHJveFNlYXJjaCBmcm9tICdhcHByb3gtc3RyaW5nLW1hdGNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHByb3gtc3RyaW5nLW1hdGNoJykuTWF0Y2h9IFN0cmluZ01hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBNYXRjaFxuICogQHByb3Age251bWJlcn0gc3RhcnQgLSBTdGFydCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gZW5kIC0gRW5kIG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBzY29yZSAtXG4gKiAgIFNjb3JlIGZvciB0aGUgbWF0Y2ggYmV0d2VlbiAwIGFuZCAxLjAsIHdoZXJlIDEuMCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNoXG4gKiAgIGZvciB0aGUgcXVvdGUgYW5kIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoZXMgZm9yIGBzdHJgIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhFcnJvcnNcbiAqIEByZXR1cm4ge1N0cmluZ01hdGNoW119XG4gKi9cbmZ1bmN0aW9uIHNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycykge1xuICAvLyBEbyBhIGZhc3Qgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLiBUaGUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGxpYnJhcnlcbiAgLy8gZG9lc24ndCBjdXJyZW50bHkgaW5jb3Jwb3JhdGUgdGhpcyBvcHRpbWl6YXRpb24gaXRzZWxmLlxuICBsZXQgbWF0Y2hQb3MgPSAwO1xuICBsZXQgZXhhY3RNYXRjaGVzID0gW107XG4gIHdoaWxlIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICBtYXRjaFBvcyA9IHRleHQuaW5kZXhPZihzdHIsIG1hdGNoUG9zKTtcbiAgICBpZiAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgICBleGFjdE1hdGNoZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtYXRjaFBvcyxcbiAgICAgICAgZW5kOiBtYXRjaFBvcyArIHN0ci5sZW5ndGgsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgIH0pO1xuICAgICAgbWF0Y2hQb3MgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4YWN0TWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGV4YWN0TWF0Y2hlcztcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBubyBleGFjdCBtYXRjaGVzLCBkbyBhIG1vcmUgZXhwZW5zaXZlIHNlYXJjaCBmb3IgbWF0Y2hlc1xuICAvLyB3aXRoIGVycm9ycy5cbiAgcmV0dXJuIGFwcHJveFNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGB0ZXh0YCBhbmQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gdGV4dE1hdGNoU2NvcmUodGV4dCwgc3RyKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gYHNjb3JlTWF0Y2hgIHdpbGwgbmV2ZXIgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKi9cbiAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgc3RyLCBzdHIubGVuZ3RoKTtcblxuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgcmV0dXJuIDEgLSAobWF0Y2hlc1swXS5lcnJvcnMgLyBzdHIubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoIGZvciBgcXVvdGVgIGluIGB0ZXh0YC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBpZiBubyBtYXRjaCBleGNlZWRpbmcgdGhlIG1pbmltdW0gcXVhbGl0eSB0aHJlc2hvbGQgd2FzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRG9jdW1lbnQgdGV4dCB0byBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdW90ZSAtIFN0cmluZyB0byBmaW5kIHdpdGhpbiBgdGV4dGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IC1cbiAqICAgQ29udGV4dCBpbiB3aGljaCB0aGUgcXVvdGUgb3JpZ2luYWxseSBhcHBlYXJlZC4gVGhpcyBpcyB1c2VkIHRvIGNob29zZSB0aGVcbiAqICAgYmVzdCBtYXRjaC5cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF0gLSBFeHBlY3RlZCB0ZXh0IGJlZm9yZSB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF0gLSBFeHBlY3RlZCB0ZXh0IGFmdGVyIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge251bWJlcn0gW2NvbnRleHQuaGludF0gLSBFeHBlY3RlZCBvZmZzZXQgb2YgbWF0Y2ggd2l0aGluIHRleHRcbiAqIEByZXR1cm4ge01hdGNofG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1b3RlKHRleHQsIHF1b3RlLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKHF1b3RlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hvb3NlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gYWxsb3cgZm9yIHRoZSBpbml0aWFsIHNlYXJjaC5cbiAgLy8gVGhpcyBjaG9pY2UgaW52b2x2ZXMgYSB0cmFkZW9mZiBiZXR3ZWVuOlxuICAvL1xuICAvLyAgLSBSZWNhbGwgKHByb3BvcnRpb24gb2YgXCJnb29kXCIgbWF0Y2hlcyBmb3VuZClcbiAgLy8gIC0gUHJlY2lzaW9uIChwcm9wb3J0aW9uIG9mIG1hdGNoZXMgZm91bmQgd2hpY2ggYXJlIFwiZ29vZFwiKVxuICAvLyAgLSBDb3N0IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgb2YgcHJvY2Vzc2luZyB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgWzFdXG4gIC8vXG4gIC8vIFsxXSBTcGVjaWZpY2FsbHksIHRoZSBleHBlY3RlZC10aW1lIGNvbXBsZXhpdHkgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGlzXG4gIC8vICAgICBgTygobWF4RXJyb3JzIC8gMzIpICogdGV4dC5sZW5ndGgpYC4gU2VlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBkb2NzLlxuICBjb25zdCBtYXhFcnJvcnMgPSBNYXRoLm1pbigyNTYsIHF1b3RlLmxlbmd0aCAvIDIpO1xuXG4gIC8vIEZpbmQgY2xvc2VzdCBtYXRjaGVzIGZvciBgcXVvdGVgIGluIGB0ZXh0YCBiYXNlZCBvbiBlZGl0IGRpc3RhbmNlLlxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHF1b3RlLCBtYXhFcnJvcnMpO1xuXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgYSBtYXRjaCBjYW5kaWRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nTWF0Y2h9IG1hdGNoXG4gICAqL1xuICBjb25zdCBzY29yZU1hdGNoID0gbWF0Y2ggPT4ge1xuICAgIGNvbnN0IHF1b3RlV2VpZ2h0ID0gNTA7IC8vIFNpbWlsYXJpdHkgb2YgbWF0Y2hlZCB0ZXh0IHRvIHF1b3RlLlxuICAgIGNvbnN0IHByZWZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYmVmb3JlIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5wcmVmaXhgLlxuICAgIGNvbnN0IHN1ZmZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYWZ0ZXIgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnN1ZmZpeGAuXG4gICAgY29uc3QgcG9zV2VpZ2h0ID0gMjsgLy8gUHJveGltaXR5IHRvIGV4cGVjdGVkIGxvY2F0aW9uLiBVc2VkIGFzIGEgdGllLWJyZWFrZXIuXG5cbiAgICBjb25zdCBxdW90ZVNjb3JlID0gMSAtIG1hdGNoLmVycm9ycyAvIHF1b3RlLmxlbmd0aDtcblxuICAgIGNvbnN0IHByZWZpeFNjb3JlID0gY29udGV4dC5wcmVmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShNYXRoLm1heCgwLCBtYXRjaC5zdGFydCAtIGNvbnRleHQucHJlZml4Lmxlbmd0aCksIG1hdGNoLnN0YXJ0KSxcbiAgICAgICAgICBjb250ZXh0LnByZWZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcbiAgICBjb25zdCBzdWZmaXhTY29yZSA9IGNvbnRleHQuc3VmZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UobWF0Y2guZW5kLCBtYXRjaC5lbmQgKyBjb250ZXh0LnN1ZmZpeC5sZW5ndGgpLFxuICAgICAgICAgIGNvbnRleHQuc3VmZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuXG4gICAgbGV0IHBvc1Njb3JlID0gMS4wO1xuICAgIGlmICh0eXBlb2YgY29udGV4dC5oaW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMobWF0Y2guc3RhcnQgLSBjb250ZXh0LmhpbnQpO1xuICAgICAgcG9zU2NvcmUgPSAxLjAgLSBvZmZzZXQgLyB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTY29yZSA9XG4gICAgICBxdW90ZVdlaWdodCAqIHF1b3RlU2NvcmUgK1xuICAgICAgcHJlZml4V2VpZ2h0ICogcHJlZml4U2NvcmUgK1xuICAgICAgc3VmZml4V2VpZ2h0ICogc3VmZml4U2NvcmUgK1xuICAgICAgcG9zV2VpZ2h0ICogcG9zU2NvcmU7XG4gICAgY29uc3QgbWF4U2NvcmUgPSBxdW90ZVdlaWdodCArIHByZWZpeFdlaWdodCArIHN1ZmZpeFdlaWdodCArIHBvc1dlaWdodDtcbiAgICBjb25zdCBub3JtYWxpemVkU2NvcmUgPSByYXdTY29yZSAvIG1heFNjb3JlO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTY29yZTtcbiAgfTtcblxuICAvLyBSYW5rIG1hdGNoZXMgYmFzZWQgb24gc2ltaWxhcml0eSBvZiBhY3R1YWwgYW5kIGV4cGVjdGVkIHN1cnJvdW5kaW5nIHRleHRcbiAgLy8gYW5kIGFjdHVhbC9leHBlY3RlZCBvZmZzZXQgaW4gdGhlIGRvY3VtZW50IHRleHQuXG4gIGNvbnN0IHNjb3JlZE1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+ICh7XG4gICAgc3RhcnQ6IG0uc3RhcnQsXG4gICAgZW5kOiBtLmVuZCxcbiAgICBzY29yZTogc2NvcmVNYXRjaChtKSxcbiAgfSkpO1xuXG4gIC8vIENob29zZSBtYXRjaCB3aXRoIGhpZ2hlc3Qgc2NvcmUuXG4gIHNjb3JlZE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICByZXR1cm4gc2NvcmVkTWF0Y2hlc1swXTtcbn1cbiIsIi8qKlxuICogUmV0dXJuIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGV4dCBub2RlcyBjb250YWluZWQgaW4gYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBub2RlVGV4dExlbmd0aChub2RlKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIC8vIG5iLiBgdGV4dENvbnRlbnRgIGV4Y2x1ZGVzIHRleHQgaW4gY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAvLyB3aGVuIGNhbGxlZCBvbiBhIHBhcmVudCBlbGVtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0IHRoYXQgaGVyZS5cblxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobm9kZS50ZXh0Q29udGVudCkubGVuZ3RoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IG9mIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIHdoaWxlIChzaWJsaW5nKSB7XG4gICAgbGVuZ3RoICs9IG5vZGVUZXh0TGVuZ3RoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIG9yIG1vcmUgY2hhcmFjdGVyIG9mZnNldHMgd2l0aGluIGFuIGVsZW1lbnQgdG8gKHRleHQgbm9kZSwgcG9zaXRpb24pXG4gKiBwYWlycy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyW119IG9mZnNldHMgLSBPZmZzZXRzLCB3aGljaCBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfVtdfVxuICovXG5mdW5jdGlvbiByZXNvbHZlT2Zmc2V0cyhlbGVtZW50LCAuLi5vZmZzZXRzKSB7XG4gIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICBjb25zdCBub2RlSXRlciA9IC8qKiBAdHlwZSB7RG9jdW1lbnR9ICovIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgKS5jcmVhdGVOb2RlSXRlcmF0b3IoZWxlbWVudCwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgbGV0IHRleHROb2RlO1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICAvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgYG5leHRPZmZzZXRgdGggY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0XG4gIC8vIG9mIGBlbGVtZW50YC5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Tm9kZSkge1xuICAgIHRleHROb2RlID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAoY3VycmVudE5vZGUpO1xuICAgIGlmIChsZW5ndGggKyB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IG5leHRPZmZzZXQpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IG5leHRPZmZzZXQgLSBsZW5ndGggfSk7XG4gICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gICAgICBsZW5ndGggKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLy8gQm91bmRhcnkgY2FzZS5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0Tm9kZSAmJiBsZW5ndGggPT09IG5leHRPZmZzZXQpIHtcbiAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCB9KTtcbiAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICB9XG5cbiAgaWYgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgZXhjZWVkcyB0ZXh0IGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBsZXQgUkVTT0xWRV9GT1JXQVJEUyA9IDE7XG5leHBvcnQgbGV0IFJFU09MVkVfQkFDS1dBUkRTID0gMjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9mZnNldCB3aXRoaW4gdGhlIHRleHQgY29udGVudCBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoaXMgcG9zaXRpb24gY2FuIGJlIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZGVzY2VuZGFudCBub2RlIGluIHRoZSBjdXJyZW50XG4gKiBET00gc3VidHJlZSBvZiB0aGUgZWxlbWVudCB1c2luZyB0aGUgYHJlc29sdmVgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgdGV4dCBwb3NpdGlvbiBgb2Zmc2V0YCB3aXRoaW5cbiAgICogdGhlIHRleHQgY29udGVudCBvZiBgZWxlbWVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPZmZzZXQgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8qKiBFbGVtZW50IHRoYXQgYG9mZnNldGAgaXMgcmVsYXRpdmUgdG8uICovXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIC8qKiBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50J3MgYHRleHRDb250ZW50YC4gKi9cbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcG9zaXRpb24gd2l0aCBvZmZzZXQgcmVsYXRpdmUgdG8gYSBnaXZlbiBhbmNlc3RvclxuICAgKiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudCAtIEFuY2VzdG9yIG9mIGB0aGlzLmVsZW1lbnRgXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHJlbGF0aXZlVG8ocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuY29udGFpbnModGhpcy5lbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGN1cnJlbnQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgd2hpbGUgKGVsICE9PSBwYXJlbnQpIHtcbiAgICAgIG9mZnNldCArPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChlbCk7XG4gICAgICBlbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHBvc2l0aW9uIHRvIGEgc3BlY2lmaWMgdGV4dCBub2RlIGFuZCBvZmZzZXQgd2l0aGluIHRoYXQgbm9kZS5cbiAgICpcbiAgICogVGhyb3dzIGlmIGB0aGlzLm9mZnNldGAgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSW4gdGhlXG4gICAqIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaGFzIG5vIHRleHQgYW5kIGB0aGlzLm9mZnNldGAgaXMgMCwgdGhlIGBkaXJlY3Rpb25gXG4gICAqIG9wdGlvbiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucy5cbiAgICpcbiAgICogT2Zmc2V0cyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbm9kZXMgYXJlIHJlc29sdmVkIHRvIHRoZSBzdGFydCBvZiB0aGVcbiAgICogbm9kZSB0aGF0IGJlZ2lucyBhdCB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICBAcGFyYW0ge1JFU09MVkVfRk9SV0FSRFN8UkVTT0xWRV9CQUNLV0FSRFN9IFtvcHRpb25zLmRpcmVjdGlvbl0gLVxuICAgKiAgICAgU3BlY2lmaWVzIGluIHdoaWNoIGRpcmVjdGlvbiB0byBzZWFyY2ggZm9yIHRoZSBuZWFyZXN0IHRleHQgbm9kZSBpZlxuICAgKiAgICAgYHRoaXMub2Zmc2V0YCBpcyBgMGAgYW5kIGB0aGlzLmVsZW1lbnRgIGhhcyBubyB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkXG4gICAqICAgICBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfX1cbiAgICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAgICovXG4gIHJlc29sdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXNvbHZlT2Zmc2V0cyh0aGlzLmVsZW1lbnQsIHRoaXMub2Zmc2V0KVswXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMCAmJiBvcHRpb25zLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHR3ID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Um9vdE5vZGUoKSxcbiAgICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVFxuICAgICAgICApO1xuICAgICAgICB0dy5jdXJyZW50Tm9kZSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9yd2FyZHMgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUkVTT0xWRV9GT1JXQVJEUztcbiAgICAgICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7VGV4dHxudWxsfSAqLyAoXG4gICAgICAgICAgZm9yd2FyZHMgPyB0dy5uZXh0Tm9kZSgpIDogdHcucHJldmlvdXNOb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRleHQsIG9mZnNldDogZm9yd2FyZHMgPyAwIDogdGV4dC5kYXRhLmxlbmd0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgYG9mZnNldGB0aCBjaGFyYWN0ZXIgd2l0aGluXG4gICAqIGBub2RlYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21DaGFyT2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbi5mcm9tUG9pbnQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCBvZmZzZXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGlzIG5vdCBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIHN0YXJ0IG9yIGVuZCBwb2ludCAobm9kZSwgb2Zmc2V0KS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGV4dCBvciBFbGVtZW50IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIE9mZnNldCB3aXRoaW4gdGhlIG5vZGUuXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tUG9pbnQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IC8qKiBAdHlwZSB7VGV4dH0gKi8gKG5vZGUpLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBoYXMgbm8gcGFyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSArIG9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihub2RlLnBhcmVudEVsZW1lbnQsIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggYmVmb3JlIHRoZSBgb2Zmc2V0YHRoIGNoaWxkIG9mIGVsZW1lbnQuXG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgICAgIHRleHRPZmZzZXQgKz0gbm9kZVRleHRMZW5ndGgobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IGluIGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZ2lvbiBvZiBhIGRvY3VtZW50IGFzIGEgKHN0YXJ0LCBlbmQpIHBhaXIgb2YgYFRleHRQb3NpdGlvbmAgcG9pbnRzLlxuICpcbiAqIFJlcHJlc2VudGluZyBhIHJhbmdlIGluIHRoaXMgd2F5IGFsbG93cyBmb3IgY2hhbmdlcyBpbiB0aGUgRE9NIGNvbnRlbnQgb2YgdGhlXG4gKiByYW5nZSB3aGljaCBkb24ndCBhZmZlY3QgaXRzIHRleHQgY29udGVudCwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHRleHQgY29udGVudFxuICogb2YgdGhlIHJhbmdlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRSYW5nZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW1tdXRhYmxlIGBUZXh0UmFuZ2VgIGZyb20gYSBgc3RhcnRgIGFuZCBgZW5kYCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IHN0YXJ0XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gYVxuICAgKiBnaXZlbiBhbmNlc3Rvci4gU2VlIGBUZXh0UG9zaXRpb24ucmVsYXRpdmVUb2AuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgcmVsYXRpdmVUbyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlVG8oZWxlbWVudCksXG4gICAgICB0aGlzLmVuZC5yZWxhdGl2ZVRvKGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgVGV4dFJhbmdlYCB0byBhIERPTSByYW5nZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBET00gUmFuZ2Ugd2lsbCBhbHdheXMgc3RhcnQgYW5kIGVuZCBpbiBhIGBUZXh0YCBub2RlLlxuICAgKiBIZW5jZSBgVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkudG9SYW5nZSgpYCBjYW4gYmUgdXNlZCB0byBcInNocmlua1wiIGFcbiAgICogcmFuZ2UgdG8gdGhlIHRleHQgaXQgY29udGFpbnMuXG4gICAqXG4gICAqIE1heSB0aHJvdyBpZiB0aGUgYHN0YXJ0YCBvciBgZW5kYCBwb3NpdGlvbnMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cbiAgdG9SYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCA9PT0gdGhpcy5lbmQuZWxlbWVudCAmJlxuICAgICAgdGhpcy5zdGFydC5vZmZzZXQgPD0gdGhpcy5lbmQub2Zmc2V0XG4gICAgKSB7XG4gICAgICAvLyBGYXN0IHBhdGggZm9yIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGluIHNhbWUgZWxlbWVudC5cbiAgICAgIFtzdGFydCwgZW5kXSA9IHJlc29sdmVPZmZzZXRzKFxuICAgICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQsXG4gICAgICAgIHRoaXMuc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmVuZC5vZmZzZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5zdGFydC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0ZPUldBUkRTIH0pO1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9CQUNLV0FSRFMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gZXhpc3RpbmcgRE9NIGBSYW5nZWAgdG8gYSBgVGV4dFJhbmdlYFxuICAgKlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKiBAcmV0dXJuIHtUZXh0UmFuZ2V9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KFxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICByYW5nZS5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgYFRleHRSYW5nZWAgZnJvbSB0aGUgYHN0YXJ0YHRoIHRvIGBlbmRgdGggY2hhcmFjdGVycyBpbiBgcm9vdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgc3RhdGljIGZyb21PZmZzZXRzKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgc3RhcnQpLFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBlbmQpXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGNsYXNzZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBET00gYFJhbmdlYFxuICogb2JqZWN0cyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlbGVjdG9ycy4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhXG4gKiBzZXQgb2YgYW5jaG9yaW5nIGxpYnJhcmllcy4gSXQgc2VydmVzIHR3byBtYWluIHB1cnBvc2VzOlxuICpcbiAqICAxLiBQcm92aWRpbmcgYSBjb25zaXN0ZW50IGludGVyZmFjZSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFuY2hvcnMuXG4gKiAgMi4gSW5zdWxhdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIEFQSSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGFuY2hvcmluZ1xuICogICAgIGxpYnJhcmllcy5cbiAqL1xuXG5pbXBvcnQgeyBtYXRjaFF1b3RlIH0gZnJvbSAnLi9tYXRjaC1xdW90ZSc7XG5pbXBvcnQgeyBUZXh0UmFuZ2UsIFRleHRQb3NpdGlvbiB9IGZyb20gJy4vdGV4dC1yYW5nZSc7XG5pbXBvcnQgeyBub2RlRnJvbVhQYXRoLCB4cGF0aEZyb21Ob2RlIH0gZnJvbSAnLi94cGF0aCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuUmFuZ2VTZWxlY3Rvcn0gUmFuZ2VTZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFBvc2l0aW9uU2VsZWN0b3J9IFRleHRQb3NpdGlvblNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UXVvdGVTZWxlY3Rvcn0gVGV4dFF1b3RlU2VsZWN0b3JcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUmFuZ2VBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgcmFuZ2UpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhbmNob3IgZnJvbSBhIHNlcmlhbGl6ZWQgYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2VTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3Iuc3RhcnRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghc3RhcnRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgc3RhcnRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLmVuZENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFlbmRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZW5kQ29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5lbmRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpLnRvUmFuZ2UoKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7UmFuZ2VTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgLy8gXCJTaHJpbmtcIiB0aGUgcmFuZ2Ugc28gdGhhdCBpdCB0aWdodGx5IHdyYXBzIGl0cyB0ZXh0LiBUaGlzIGVuc3VyZXMgbW9yZVxuICAgIC8vIHByZWRpY3RhYmxlIG91dHB1dCBmb3IgYSBnaXZlbiB0ZXh0IHNlbGVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkUmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHRoaXMucmFuZ2UpLnRvUmFuZ2UoKTtcblxuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2Uobm9ybWFsaXplZFJhbmdlKTtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLnN0YXJ0LmVsZW1lbnQsIHRoaXMucm9vdCk7XG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2UuZW5kLmVsZW1lbnQsIHRoaXMucm9vdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JhbmdlU2VsZWN0b3InLFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzdGFydE9mZnNldDogdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIGVuZE9mZnNldDogdGV4dFJhbmdlLmVuZC5vZmZzZXQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRQb3NpdGlvblNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbkFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKFxuICAgICAgcm9vdCxcbiAgICAgIHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICB0ZXh0UmFuZ2UuZW5kLm9mZnNldFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvblNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHJvb3QsIHNlbGVjdG9yLnN0YXJ0LCBzZWxlY3Rvci5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvblNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRQb3NpdGlvblNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICB9O1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gVGV4dFJhbmdlLmZyb21PZmZzZXRzKHRoaXMucm9vdCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLnRvUmFuZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFF1b3RlTWF0Y2hPcHRpb25zXG4gKiBAcHJvcCB7bnVtYmVyfSBbaGludF0gLSBFeHBlY3RlZCBwb3NpdGlvbiBvZiBtYXRjaCBpbiB0ZXh0LiBTZWUgYG1hdGNoUXVvdGVgLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFF1b3RlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFF1b3RlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhhY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XVxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBleGFjdCwgY29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmV4YWN0ID0gZXhhY3Q7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgVGV4dFF1b3RlQW5jaG9yYCBmcm9tIGEgcmFuZ2UuXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgYHJhbmdlYCBkb2VzIG5vdCBjb250YWluIGFueSB0ZXh0IG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICAgIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBxdW90ZSB0byBjYXB0dXJlIGFzIGNvbnRleHQuIFdlIGN1cnJlbnRseVxuICAgIC8vIGFsd2F5cyB1c2UgYSBmaXhlZCBhbW91bnQsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhpcyBjb2RlIHdhcyBhd2FyZVxuICAgIC8vIG9mIGxvZ2ljYWwgYm91bmRhcmllcyBpbiB0aGUgZG9jdW1lbnQgKHBhcmFncmFwaCwgYXJ0aWNsZSBldGMuKSB0byBhdm9pZFxuICAgIC8vIGNhcHR1cmluZyB0ZXh0IHVucmVsYXRlZCB0byB0aGUgcXVvdGUuXG4gICAgLy9cbiAgICAvLyBJbiByZWd1bGFyIHByb3NlIHRoZSBpZGVhbCBjb250ZW50IHdvdWxkIG9mdGVuIGJlIHRoZSBzdXJyb3VuZGluZyBzZW50ZW5jZS5cbiAgICAvLyBUaGlzIGlzIGEgbmF0dXJhbCB1bml0IG9mIG1lYW5pbmcgd2hpY2ggZW5hYmxlcyBkaXNwbGF5aW5nIHF1b3RlcyBpblxuICAgIC8vIGNvbnRleHQgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBpcyBub3QgYXZhaWxhYmxlLiBXZSBjb3VsZCB1c2UgYEludGwuU2VnbWVudGVyYFxuICAgIC8vIGZvciB0aGlzIHdoZW4gYXZhaWxhYmxlLlxuICAgIGNvbnN0IGNvbnRleHRMZW4gPSAzMjtcblxuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCksIHtcbiAgICAgIHByZWZpeDogdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIGNvbnRleHRMZW4pLCBzdGFydCksXG4gICAgICBzdWZmaXg6IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgY29udGV4dExlbikpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRRdW90ZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHsgcHJlZml4LCBzdWZmaXggfSA9IHNlbGVjdG9yO1xuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHNlbGVjdG9yLmV4YWN0LCB7IHByZWZpeCwgc3VmZml4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRRdW90ZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRRdW90ZVNlbGVjdG9yJyxcbiAgICAgIGV4YWN0OiB0aGlzLmV4YWN0LFxuICAgICAgcHJlZml4OiB0aGlzLmNvbnRleHQucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLmNvbnRleHQuc3VmZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1JhbmdlKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnRvUG9zaXRpb25BbmNob3Iob3B0aW9ucykudG9SYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hRdW90ZSh0ZXh0LCB0aGlzLmV4YWN0LCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICBoaW50OiBvcHRpb25zLmhpbnQsXG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdW90ZSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IodGhpcy5yb290LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgVGV4dFF1b3RlQW5jaG9yIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzXCI7XG5cbi8vIENhdGNoIEpTIGVycm9ycyB0byBsb2cgdGhlbSBpbiB0aGUgYXBwLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwiZXJyb3JcIixcbiAgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgQW5kcm9pZC5sb2dFcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5maWxlbmFtZSwgZXZlbnQubGluZW5vKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8vIE5vdGlmeSBuYXRpdmUgY29kZSB0aGF0IHRoZSBwYWdlIGhhcyBsb2FkZWQuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gICAgICBzbmFwQ3VycmVudE9mZnNldCgpO1xuICAgIH0pO1xuICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8qKlxuICogSGF2aW5nIGFuIG9kZCBudW1iZXIgb2YgY29sdW1ucyB3aGVuIGRpc3BsYXlpbmcgdHdvIGNvbHVtbnMgcGVyIHNjcmVlbiBjYXVzZXMgc25hcHBpbmcgYW5kIHBhZ2VcbiAqIHR1cm5pbmcgaXNzdWVzLiBUbyBmaXggdGhpcywgd2UgaW5zZXJ0IGEgYmxhbmsgdmlydHVhbCBjb2x1bW4gYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpIHtcbiAgY29uc3QgaWQgPSBcInJlYWRpdW0tdmlydHVhbC1wYWdlXCI7XG4gIHZhciB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHx8IGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkgIT0gMikge1xuICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGNvbENvdW50ID0gZG9jdW1lbnRXaWR0aCAvIHBhZ2VXaWR0aDtcbiAgICB2YXIgaGFzT2RkQ29sQ291bnQgPSAoTWF0aC5yb3VuZChjb2xDb3VudCAqIDIpIC8gMikgJSAxID4gMC4xO1xuICAgIGlmIChoYXNPZGRDb2xDb3VudCkge1xuICAgICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2aXJ0dWFsQ29sLnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgICAgdmlydHVhbENvbC5zdHlsZS5icmVha0JlZm9yZSA9IFwiY29sdW1uXCI7XG4gICAgICAgIHZpcnR1YWxDb2wuaW5uZXJIVE1MID0gXCImIzgyMDM7XCI7IC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aXJ0dWFsQ29sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHZhciBwYWdlV2lkdGggPSAxO1xuXG5mdW5jdGlvbiBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCkge1xuICAvLyBXZSBjYW4ndCByZWx5IG9uIHdpbmRvdy5pbm5lcldpZHRoIGZvciB0aGUgcGFnZVdpZHRoIG9uIEFuZHJvaWQsIGJlY2F1c2UgaWYgdGhlXG4gIC8vIGRldmljZSBwaXhlbCByYXRpbyBpcyBub3QgYW4gaW50ZWdlciwgd2UgZ2V0IHJvdW5kaW5nIGlzc3VlcyBvZmZzZXR0aW5nIHRoZSBwYWdlcy5cbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3JlYWRpdW0tY3NzL2lzc3Vlcy85N1xuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcjItbmF2aWdhdG9yLWtvdGxpbi9pc3N1ZXMvMTQ2XG4gIHZhciB3aWR0aCA9IEFuZHJvaWQuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICBwYWdlV2lkdGggPSB3aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBzZXRQcm9wZXJ0eShcbiAgICBcIi0tUlNfX3ZpZXdwb3J0V2lkdGhcIixcbiAgICBcImNhbGMoXCIgKyB3aWR0aCArIFwicHggLyBcIiArIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICsgXCIpXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkge1xuICByZXR1cm4gcGFyc2VJbnQoXG4gICAgd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbi1jb3VudFwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1VU0VSX19zY3JvbGxcIilcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpID09IFwicmVhZGl1bS1zY3JvbGwtb25cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICByZXR1cm4gc2Nyb2xsVG9SZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SZWN0KHJlY3QpIHtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID1cbiAgICAgIHJlY3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvU3RhcnQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvU3RhcnRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0VuZCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9FbmRcIik7XG4gIGlmICghaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGggKiBmYWN0b3JcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgd2luZG93LnNjcm9sbFRvKDAsIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIGxlZnQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbExlZnQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYIC0gcGFnZVdpZHRoO1xuICB2YXIgbWluT2Zmc2V0ID0gaXNSVEwoKSA/IC0oZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aCkgOiAwO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5tYXgob2Zmc2V0LCBtaW5PZmZzZXQpKTtcbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSByaWdodC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsUmlnaHQoKSB7XG4gIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgdmFyIG9mZnNldCA9IHdpbmRvdy5zY3JvbGxYICsgcGFnZVdpZHRoO1xuICB2YXIgbWF4T2Zmc2V0ID0gaXNSVEwoKSA/IDAgOiBkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoO1xuICByZXR1cm4gc2Nyb2xsVG9PZmZzZXQoTWF0aC5taW4ob2Zmc2V0LCBtYXhPZmZzZXQpKTtcbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZ2l2ZW4gbGVmdCBvZmZzZXQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIHNjcm9sbCBwb3NpdGlvbiBpcyBhbHJlYWR5IGNsb3NlIGVub3VnaCB0byB0aGUgZ2l2ZW4gb2Zmc2V0LlxuZnVuY3Rpb24gc2Nyb2xsVG9PZmZzZXQob2Zmc2V0KSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvT2Zmc2V0IFwiICsgb2Zmc2V0KTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IFwiQ2FsbGVkIHNjcm9sbFRvT2Zmc2V0KCkgd2l0aCBzY3JvbGwgbW9kZSBlbmFibGVkLiBUaGlzIGNhbiBvbmx5IGJlIHVzZWQgaW4gcGFnaW5hdGVkIG1vZGUuXCI7XG4gIH1cblxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIC8vIEluIHNvbWUgY2FzZSB0aGUgc2Nyb2xsWCBjYW5ub3QgcmVhY2ggdGhlIHBvc2l0aW9uIHJlc3BlY3RpbmcgdG8gaW5uZXJXaWR0aFxuICB2YXIgZGlmZiA9IE1hdGguYWJzKGN1cnJlbnRPZmZzZXQgLSBvZmZzZXQpIC8gcGFnZVdpZHRoO1xuICByZXR1cm4gZGlmZiA+IDAuMDE7XG59XG5cbi8vIFNuYXAgdGhlIG9mZnNldCB0byB0aGUgc2NyZWVuIHdpZHRoIChwYWdlIHdpZHRoKS5cbmZ1bmN0aW9uIHNuYXBPZmZzZXQob2Zmc2V0KSB7XG4gIHZhciB2YWx1ZSA9IG9mZnNldCArIChpc1JUTCgpID8gLTEgOiAxKTtcbiAgcmV0dXJuIHZhbHVlIC0gKHZhbHVlICUgcGFnZVdpZHRoKTtcbn1cblxuLy8gU25hcHMgdGhlIGN1cnJlbnQgb2Zmc2V0IHRvIHRoZSBwYWdlIHdpZHRoLlxuZnVuY3Rpb24gc25hcEN1cnJlbnRPZmZzZXQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNuYXBDdXJyZW50T2Zmc2V0XCIpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIC8vIEFkZHMgaGFsZiBhIHBhZ2UgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNuYXAgdG8gdGhlIHByZXZpb3VzIHBhZ2UuXG4gIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICB2YXIgZGVsdGEgPSBmYWN0b3IgKiAocGFnZVdpZHRoIC8gMik7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoY3VycmVudE9mZnNldCArIGRlbHRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlRnJvbUxvY2F0b3IobG9jYXRvcikge1xuICBsZXQgdGV4dCA9IGxvY2F0b3IudGV4dDtcbiAgaWYgKCF0ZXh0IHx8ICF0ZXh0LmhpZ2hsaWdodCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIHJvb3Q7XG4gICAgbGV0IGxvY2F0aW9ucyA9IGxvY2F0b3IubG9jYXRpb25zO1xuICAgIGlmIChsb2NhdGlvbnMgJiYgbG9jYXRpb25zLmNzc1NlbGVjdG9yKSB7XG4gICAgICByb290ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihsb2NhdGlvbnMuY3NzU2VsZWN0b3IpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5ib2R5O1xuICAgIH1cblxuICAgIGxldCBhbmNob3IgPSBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuaGlnaGxpZ2h0LCB7XG4gICAgICBwcmVmaXg6IHRleHQuYmVmb3JlLFxuICAgICAgc3VmZml4OiB0ZXh0LmFmdGVyLFxuICAgIH0pO1xuICAgIHJldHVybiBhbmNob3IudG9SYW5nZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLy8vIFVzZXIgU2V0dGluZ3MuXG5cbi8vIEZvciBzZXR0aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSk7XG59XG5cbi8vIEZvciByZW1vdmluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydHkoa2V5KSB7XG4gIHZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIHJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcbn1cblxuLy8vIFRvb2xraXRcblxuZXhwb3J0IGZ1bmN0aW9uIGxvZygpIHtcbiAgdmFyIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oXCIgXCIpO1xuICBBbmRyb2lkLmxvZyhtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0Vycm9yKG1lc3NhZ2UpIHtcbiAgQW5kcm9pZC5sb2dFcnJvcihtZXNzYWdlLCBcIlwiLCAwKTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBkZWJ1ZyA9IGZhbHNlO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgRE9NUmVjdCBpbnRvIGEgSlNPTiBvYmplY3QgdW5kZXJzdGFuZGFibGUgYnkgdGhlIG5hdGl2ZSBzaWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYXRpdmVSZWN0KHJlY3QpIHtcbiAgY29uc3QgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBjb25zdCB3aWR0aCA9IHJlY3Qud2lkdGggKiBwaXhlbFJhdGlvO1xuICBjb25zdCBoZWlnaHQgPSByZWN0LmhlaWdodCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGxlZnQgPSByZWN0LmxlZnQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCB0b3AgPSByZWN0LnRvcCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQ7XG4gIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gIHJhbmdlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcblxuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZyhgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWApO1xuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgbG9nKFxuICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2coYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQge1xuICBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCxcbiAgcmVjdENvbnRhaW5zUG9pbnQsXG4gIHRvTmF0aXZlUmVjdCxcbn0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgbG9nLCBsb2dFcnJvciwgcmFuZ2VGcm9tTG9jYXRvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBzdHlsZXMgPSBuZXcgTWFwKCk7XG5sZXQgZ3JvdXBzID0gbmV3IE1hcCgpO1xudmFyIGxhc3RHcm91cElkID0gMDtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgc3VwcG9ydGVkIERlY29yYXRpb24gVGVtcGxhdGVzLlxuICpcbiAqIEVhY2ggdGVtcGxhdGUgb2JqZWN0IGlzIGluZGV4ZWQgYnkgdGhlIHN0eWxlIElELlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUZW1wbGF0ZXMobmV3U3R5bGVzKSB7XG4gIHZhciBzdHlsZXNoZWV0ID0gXCJcIjtcblxuICBmb3IgKGNvbnN0IFtpZCwgc3R5bGVdIG9mIE9iamVjdC5lbnRyaWVzKG5ld1N0eWxlcykpIHtcbiAgICBzdHlsZXMuc2V0KGlkLCBzdHlsZSk7XG4gICAgaWYgKHN0eWxlLnN0eWxlc2hlZXQpIHtcbiAgICAgIHN0eWxlc2hlZXQgKz0gc3R5bGUuc3R5bGVzaGVldCArIFwiXFxuXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlc2hlZXQpIHtcbiAgICBsZXQgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgIHN0eWxlRWxlbWVudC5pbm5lckhUTUwgPSBzdHlsZXNoZWV0O1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBEZWNvcmF0aW9uR3JvdXAgZm9yIHRoZSBnaXZlbiBncm91cCBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjb3JhdGlvbnMoZ3JvdXBOYW1lKSB7XG4gIHZhciBncm91cCA9IGdyb3Vwcy5nZXQoZ3JvdXBOYW1lKTtcbiAgaWYgKCFncm91cCkge1xuICAgIGxldCBpZCA9IFwicjItZGVjb3JhdGlvbi1cIiArIGxhc3RHcm91cElkKys7XG4gICAgZ3JvdXAgPSBEZWNvcmF0aW9uR3JvdXAoaWQsIGdyb3VwTmFtZSk7XG4gICAgZ3JvdXBzLnNldChncm91cE5hbWUsIGdyb3VwKTtcbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBjbGljayBldmVudHMgb24gYSBEZWNvcmF0aW9uLlxuICogUmV0dXJucyB3aGV0aGVyIGEgZGVjb3JhdGlvbiBtYXRjaGVkIHRoaXMgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkge1xuICBpZiAoZ3JvdXBzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kVGFyZ2V0KCkge1xuICAgIGZvciAoY29uc3QgW2dyb3VwLCBncm91cENvbnRlbnRdIG9mIGdyb3Vwcykge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwQ29udGVudC5pdGVtcy5yZXZlcnNlKCkpIHtcbiAgICAgICAgaWYgKCFpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBsZXQgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9KU09OKCk7XG4gICAgICAgICAgaWYgKHJlY3RDb250YWluc1BvaW50KHJlY3QsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFksIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cCwgaXRlbSwgZWxlbWVudCwgcmVjdCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCB0YXJnZXQgPSBmaW5kVGFyZ2V0KCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIEFuZHJvaWQub25EZWNvcmF0aW9uQWN0aXZhdGVkKFxuICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGlkOiB0YXJnZXQuaXRlbS5kZWNvcmF0aW9uLmlkLFxuICAgICAgZ3JvdXA6IHRhcmdldC5ncm91cCxcbiAgICAgIHJlY3Q6IHRvTmF0aXZlUmVjdCh0YXJnZXQuaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksXG4gICAgICBjbGljazogY2xpY2tFdmVudCxcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEZWNvcmF0aW9uR3JvdXAgb2JqZWN0IGZyb20gYSB1bmlxdWUgSFRNTCBJRCBhbmQgaXRzIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWNvcmF0aW9uR3JvdXAoZ3JvdXBJZCwgZ3JvdXBOYW1lKSB7XG4gIHZhciBpdGVtcyA9IFtdO1xuICB2YXIgbGFzdEl0ZW1JZCA9IDA7XG4gIHZhciBjb250YWluZXIgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGRlY29yYXRpb24gdG8gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkKGRlY29yYXRpb24pIHtcbiAgICBsZXQgaWQgPSBncm91cElkICsgXCItXCIgKyBsYXN0SXRlbUlkKys7XG5cbiAgICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKGRlY29yYXRpb24ubG9jYXRvcik7XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgbG9nKFwiQ2FuJ3QgbG9jYXRlIERPTSByYW5nZSBmb3IgZGVjb3JhdGlvblwiLCBkZWNvcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IHsgaWQsIGRlY29yYXRpb24sIHJhbmdlIH07XG4gICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICBsYXlvdXQoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZGVjb3JhdGlvbiB3aXRoIGdpdmVuIElEIGZyb20gdGhlIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlKGRlY29yYXRpb25JZCkge1xuICAgIGxldCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaS5kZWNvcmF0aW9uLmlkID09PSBkZWNvcmF0aW9uSWQpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGl0ZW1zW2luZGV4XTtcbiAgICBpdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBudWxsO1xuICAgIGlmIChpdGVtLmNvbnRhaW5lcikge1xuICAgICAgaXRlbS5jb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBpdGVtLmNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIHRoYXQgdGhlIGdpdmVuIGRlY29yYXRpb24gd2FzIG1vZGlmaWVkIGFuZCBuZWVkcyB0byBiZSB1cGRhdGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlKGRlY29yYXRpb24pIHtcbiAgICByZW1vdmUoZGVjb3JhdGlvbi5pZCk7XG4gICAgYWRkKGRlY29yYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGRlY29yYXRpb25zIGZyb20gdGhpcyBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZXMgdGhlIGRlY29yYXRpb24gZWxlbWVudHMuXG4gICAqXG4gICAqIFRvIGJlIGNhbGxlZCBhZnRlciByZWZsb3dpbmcgdGhlIHJlc291cmNlLCBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVlc3RMYXlvdXQoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBsYXlvdXQoaXRlbSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExheW91dHMgYSBzaW5nbGUgRGVjb3JhdGlvbiBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gbGF5b3V0KGl0ZW0pIHtcbiAgICBsZXQgZ3JvdXBDb250YWluZXIgPSByZXF1aXJlQ29udGFpbmVyKCk7XG5cbiAgICBsZXQgc3R5bGUgPSBzdHlsZXMuZ2V0KGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaWYgKCFzdHlsZSkge1xuICAgICAgbG9nRXJyb3IoYFVua25vd24gZGVjb3JhdGlvbiBzdHlsZTogJHtpdGVtLmRlY29yYXRpb24uc3R5bGV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW1Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgaXRlbS5pZCk7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlXCIsIGl0ZW0uZGVjb3JhdGlvbi5zdHlsZSk7XG4gICAgaXRlbUNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIGxldCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgbGV0IGNvbHVtbkNvdW50ID0gcGFyc2VJbnQoXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgXCJjb2x1bW4tY291bnRcIlxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IHBhZ2VXaWR0aCA9IHZpZXdwb3J0V2lkdGggLyAoY29sdW1uQ291bnQgfHwgMSk7XG4gICAgbGV0IHNjcm9sbGluZ0VsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICAgIGxldCB4T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCB5T2Zmc2V0ID0gc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7XG5cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkVsZW1lbnQoZWxlbWVudCwgcmVjdCwgYm91bmRpbmdSZWN0KSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXG4gICAgICBpZiAoc3R5bGUud2lkdGggPT09IFwid3JhcFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtyZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3ZpZXdwb3J0V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHZpZXdwb3J0V2lkdGgpICogdmlld3BvcnRXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcImJvdW5kc1wiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZGluZ1JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Ym91bmRpbmdSZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJwYWdlXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3BhZ2VXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gcGFnZVdpZHRoKSAqIHBhZ2VXaWR0aDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGJvdW5kaW5nUmVjdCA9IGl0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBsZXQgZWxlbWVudFRlbXBsYXRlO1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBpdGVtLmRlY29yYXRpb24uZWxlbWVudC50cmltKCk7XG4gICAgICBlbGVtZW50VGVtcGxhdGUgPSB0ZW1wbGF0ZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcihcbiAgICAgICAgYEludmFsaWQgZGVjb3JhdGlvbiBlbGVtZW50IFwiJHtpdGVtLmRlY29yYXRpb24uZWxlbWVudH1cIjogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3hlc1wiKSB7XG4gICAgICBsZXQgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IHRydWU7XG4gICAgICBsZXQgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICAgICAgaXRlbS5yYW5nZSxcbiAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgKTtcblxuICAgICAgY2xpZW50UmVjdHMgPSBjbGllbnRSZWN0cy5zb3J0KChyMSwgcjIpID0+IHtcbiAgICAgICAgaWYgKHIxLnRvcCA8IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChyMS50b3AgPiByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgIGxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIHBvc2l0aW9uRWxlbWVudChsaW5lLCBjbGllbnRSZWN0LCBib3VuZGluZ1JlY3QpO1xuICAgICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChsaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0eWxlLmxheW91dCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgY29uc3QgYm91bmRzID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGJvdW5kcy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIHBvc2l0aW9uRWxlbWVudChib3VuZHMsIGJvdW5kaW5nUmVjdCwgYm91bmRpbmdSZWN0KTtcblxuICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQoYm91bmRzKTtcbiAgICB9XG5cbiAgICBncm91cENvbnRhaW5lci5hcHBlbmQoaXRlbUNvbnRhaW5lcik7XG4gICAgaXRlbS5jb250YWluZXIgPSBpdGVtQ29udGFpbmVyO1xuICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgaXRlbUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtYWN0aXZhYmxlPScxJ11cIilcbiAgICApO1xuICAgIGlmIChpdGVtLmNsaWNrYWJsZUVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oaXRlbUNvbnRhaW5lci5jaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGdyb3VwIGNvbnRhaW5lciBlbGVtZW50LCBhZnRlciBtYWtpbmcgc3VyZSBpdCBleGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1aXJlQ29udGFpbmVyKCkge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGdyb3VwSWQpO1xuICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtZ3JvdXBcIiwgZ3JvdXBOYW1lKTtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ3JvdXAgY29udGFpbmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXJDb250YWluZXIoKSB7XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhZGQsIHJlbW92ZSwgdXBkYXRlLCBjbGVhciwgaXRlbXMsIHJlcXVlc3RMYXlvdXQgfTtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2lsbCByZWxheW91dCBhbGwgdGhlIGRlY29yYXRpb25zIHdoZW4gdGhlIGRvY3VtZW50IGJvZHkgaXMgcmVzaXplZC5cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgbGFzdFNpemUgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RTaXplLndpZHRoID09PSBib2R5LmNsaWVudFdpZHRoICYmXG4gICAgICAgIGxhc3RTaXplLmhlaWdodCA9PT0gYm9keS5jbGllbnRIZWlnaHRcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0U2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IGJvZHkuY2xpZW50V2lkdGgsXG4gICAgICAgIGhlaWdodDogYm9keS5jbGllbnRIZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAucmVxdWVzdExheW91dCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShib2R5KTtcbiAgfSxcbiAgZmFsc2Vcbik7XG4iLCIvKlxuICogQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4gKiBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2ssIGZhbHNlKTtcbn0pO1xuXG5mdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gIGlmICghd2luZG93LmdldFNlbGVjdGlvbigpLmlzQ29sbGFwc2VkKSB7XG4gICAgLy8gVGhlcmUncyBhbiBvbi1nb2luZyBzZWxlY3Rpb24sIHRoZSB0YXAgd2lsbCBkaXNtaXNzIGl0IHNvIHdlIGRvbid0IGZvcndhcmQgaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgbGV0IGNsaWNrRXZlbnQgPSB7XG4gICAgZGVmYXVsdFByZXZlbnRlZDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZCxcbiAgICB4OiBldmVudC5jbGllbnRYICogcGl4ZWxSYXRpbyxcbiAgICB5OiBldmVudC5jbGllbnRZICogcGl4ZWxSYXRpbyxcbiAgICB0YXJnZXRFbGVtZW50OiBldmVudC50YXJnZXQub3V0ZXJIVE1MLFxuICAgIGludGVyYWN0aXZlRWxlbWVudDogbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChldmVudC50YXJnZXQpLFxuICB9O1xuXG4gIGlmIChoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudChldmVudCwgY2xpY2tFdmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTZW5kIHRoZSB0YXAgZGF0YSBvdmVyIHRoZSBKUyBicmlkZ2UgZXZlbiBpZiBpdCdzIGJlZW4gaGFuZGxlZCB3aXRoaW4gdGhlIHdlYiB2aWV3LCBzbyB0aGF0XG4gIC8vIGl0IGNhbiBiZSBwcmVzZXJ2ZWQgYW5kIHVzZWQgYnkgdGhlIHRvb2xraXQgaWYgbmVlZGVkLlxuICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uVGFwKEpTT04uc3RyaW5naWZ5KGNsaWNrRXZlbnQpKTtcblxuICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG5cbi8vIFNlZS4gaHR0cHM6Ly9naXRodWIuY29tL0pheVBhbm96L2FyY2hpdGVjdHVyZS90cmVlL3RvdWNoLWhhbmRsaW5nL21pc2MvdG91Y2gtaGFuZGxpbmdcbmZ1bmN0aW9uIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudCkge1xuICB2YXIgaW50ZXJhY3RpdmVUYWdzID0gW1xuICAgIFwiYVwiLFxuICAgIFwiYXVkaW9cIixcbiAgICBcImJ1dHRvblwiLFxuICAgIFwiY2FudmFzXCIsXG4gICAgXCJkZXRhaWxzXCIsXG4gICAgXCJpbnB1dFwiLFxuICAgIFwibGFiZWxcIixcbiAgICBcIm9wdGlvblwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzdWJtaXRcIixcbiAgICBcInRleHRhcmVhXCIsXG4gICAgXCJ2aWRlb1wiLFxuICBdO1xuICBpZiAoaW50ZXJhY3RpdmVUYWdzLmluZGV4T2YoZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPSAtMSkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBlbGVtZW50IGlzIGVkaXRhYmxlIGJ5IHRoZSB1c2VyLlxuICBpZiAoXG4gICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKS50b0xvd2VyQ2FzZSgpICE9IFwiZmFsc2VcIlxuICApIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3MgcGFyZW50cyByZWN1cnNpdmVseSBiZWNhdXNlIHRoZSB0b3VjaCBtaWdodCBiZSBmb3IgZXhhbXBsZSBvbiBhbiA8ZW0+IGluc2lkZSBhIDxhPi5cbiAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgIHJldHVybiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vL1xuLy8gIGhpZ2hsaWdodC5qc1xuLy8gIHIyLW5hdmlnYXRvci1rb3RsaW5cbi8vXG4vLyAgT3JnYW5pemVkIGJ5IFRhZWh5dW4gS2ltIG9uIDYvMjcvMTkgZnJvbSByMi1uYXZpZ2F0b3ItanMuXG4vL1xuLy8gIENvcHlyaWdodCAyMDE5IFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHdoaWNoIGlzIGRldGFpbGVkXG4vLyAgaW4gdGhlIExJQ0VOU0UgZmlsZSBwcmVzZW50IGluIHRoZSBwcm9qZWN0IHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBzb3VyY2UgY29kZSBpcyBtYWludGFpbmVkLlxuLy9cblxuY29uc3QgUk9PVF9DTEFTU19SRURVQ0VfTU9USU9OID0gXCJyMi1yZWR1Y2UtbW90aW9uXCI7XG5jb25zdCBST09UX0NMQVNTX05PX0ZPT1ROT1RFUyA9IFwicjItbm8tcG9wdXAtZm9vbm90ZXNcIjtcbmNvbnN0IFBPUFVQX0RJQUxPR19DTEFTUyA9IFwicjItcG9wdXAtZGlhbG9nXCI7XG5jb25zdCBGT09UTk9URVNfQ09OVEFJTkVSX0NMQVNTID0gXCJyMi1mb290bm90ZS1jb250YWluZXJcIjtcbmNvbnN0IEZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNsb3NlXCI7XG5jb25zdCBGT09UTk9URV9GT1JDRV9TSE9XID0gXCJyMi1mb290bm90ZS1mb3JjZS1zaG93XCI7XG5jb25zdCBUVFNfSURfUFJFVklPVVMgPSBcInIyLXR0cy1wcmV2aW91c1wiO1xuY29uc3QgVFRTX0lEX05FWFQgPSBcInIyLXR0cy1uZXh0XCI7XG5jb25zdCBUVFNfSURfU0xJREVSID0gXCJyMi10dHMtc2xpZGVyXCI7XG5jb25zdCBUVFNfSURfQUNUSVZFX1dPUkQgPSBcInIyLXR0cy1hY3RpdmUtd29yZFwiO1xuY29uc3QgVFRTX0lEX0NPTlRBSU5FUiA9IFwicjItdHRzLXR4dFwiO1xuY29uc3QgVFRTX0lEX0lORk8gPSBcInIyLXR0cy1pbmZvXCI7XG5jb25zdCBUVFNfTkFWX0JVVFRPTl9DTEFTUyA9IFwicjItdHRzLWJ1dHRvblwiO1xuY29uc3QgVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UID0gXCJyMi10dHMtc3BlYWtpbmctZWxcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOID0gXCJyMi10dHMtc3BlYWtpbmctdHh0XCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9JTkpFQ1RFRF9QQVJFTlQgPSBcInIyLXR0cy1zcGVha2luZy10eHQtcGFyZW50XCI7XG5jb25zdCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUiA9IFwiUjJfSURfSElHSExJR0hUU19DT05UQUlORVJcIjtcbmNvbnN0IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9JRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9BUkVBXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUFcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXCI7XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5jb25zdCBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSA9IFtcbiAgUE9QVVBfRElBTE9HX0NMQVNTLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTixcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4sXG4gIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSLFxuICBDTEFTU19ISUdITElHSFRfQVJFQSxcbiAgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEsXG4gIFwicmVzaXplLXNlbnNvclwiLFxuXTtcbmNvbnN0IENMQVNTX1BBR0lOQVRFRCA9IFwicjItY3NzLXBhZ2luYXRlZFwiO1xuXG4vL2NvbnN0IElTX0RFViA9IChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldlwiKTtcbmNvbnN0IElTX0RFViA9IGZhbHNlO1xuY29uc3QgX2hpZ2hsaWdodHMgPSBbXTtcblxubGV0IF9oaWdobGlnaHRzQ29udGFpbmVyO1xubGV0IF9hbm5vdGF0aW9uQ29udGFpbmVyO1xubGV0IGxhc3RNb3VzZURvd25YID0gLTE7XG5sZXQgbGFzdE1vdXNlRG93blkgPSAtMTtcbmxldCBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSBmYWxzZTtcblxuY29uc3QgVVNFX1NWRyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjM7XG5jb25zdCBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC40NTtcblxuLy9jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUJVR19WSVNVQUxTID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IgPSB7XG4gIGJsdWU6IDEwMCxcbiAgZ3JlZW46IDUwLFxuICByZWQ6IDIzMCxcbn07XG5cbmNvbnN0IEFOTk9UQVRJT05fV0lEVEggPSAxNTtcblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKF93aW4sIGhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gIGlmIChcbiAgICBoaWdobGlnaHRCb3VuZGluZy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSA9PSBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLm91dGxpbmUgPSBcIm5vbmVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgXCJ0cmFuc3BhcmVudFwiLFxuICAgIFwiaW1wb3J0YW50XCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYXMsIGhpZ2hsaWdodCkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgaGlnaGxpZ2h0QXJlYXMpIHtcbiAgICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gICAgY29uc3Qgb3BhY2l0eSA9IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgaWYgKGlzU1ZHKSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGxcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBpc1NWRyA9IHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX1hNTF9OQU1FU1BBQ0U7XG4gIGNvbnN0IGlkID0gaXNTVkdcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlkKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCkgPT4ge1xuICAgICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICAgIH0pO1xuICAgIGlmIChoaWdobGlnaHQpIHtcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICAgIGlmIChpc1NWRykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbFwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGwtb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICAvLyAgICBfaGlnaGxpZ2h0cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgLy8gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGEuc2VsZWN0aW9uSW5mbykpXG4gIC8vICAgICAgICByZXR1cm4gYS5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGggPCBiLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aFxuICAvLyAgICB9KVxuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcInRvdWNoc3RhcnRcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHNpemUgPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LmlkLFxuICAgICAgICBzaXplOiBzaXplLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3VuZEhpZ2hsaWdodC5pZC5pbmNsdWRlcyhcIlIyX0FOTk9UQVRJT05fXCIpKTtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHggPSBldi5jbGllbnRYO1xuICBjb25zdCB5ID0gZXYuY2xpZW50WTtcbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZXVwXCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCB0b3VjaGVkUG9zaXRpb24gPSB7XG4gICAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICAgIGxlZnQ6IGZvdW5kUmVjdC5sZWZ0LFxuICAgICAgICB3aWR0aDogZm91bmRSZWN0LndpZHRoLFxuICAgICAgICB0b3A6IGZvdW5kUmVjdC50b3AsXG4gICAgICAgIGhlaWdodDogZm91bmRSZWN0LmhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQsXG4gICAgICAgIHBvc2l0aW9uOiB0b3VjaGVkUG9zaXRpb24sXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QxLmxlZnQgPCByZWN0Mi5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIubGVmdCA8IHJlY3QxLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIubGVmdCwgcmVjdDEucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0MS50b3AgPCByZWN0Mi5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLnRvcCA8IHJlY3QxLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLnRvcCwgcmVjdDEuYm90dG9tLCB0b2xlcmFuY2UpKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICBsZXQgdG9BZGQgPSBbXTtcbiAgICAgICAgbGV0IHRvUmVtb3ZlO1xuICAgICAgICBsZXQgdG9QcmVzZXJ2ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zdCB0b0NoZWNrID0gW107XG4gICAgICAgICAgdG9DaGVjay5wdXNoKHRvUHJlc2VydmUpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRvQ2hlY2ssIHRvQWRkKTtcbiAgICAgICAgICBjaGVja092ZXJsYXBzKHRvQ2hlY2spO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gdG9SZW1vdmU7XG4gICAgICAgIH0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShuZXdSZWN0cywgdG9BZGQpO1xuICAgICAgICByZXR1cm4gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhuZXdSZWN0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gY2hlY2tPdmVybGFwcyhyZWN0cykge1xuICBjb25zdCBzdGlsbE92ZXJsYXBpbmdSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJlY3QxIG9mIHJlY3RzKSB7XG4gICAgZm9yIChjb25zdCByZWN0MiBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhczEgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QxKSA+PSAwO1xuICAgICAgY29uc3QgaGFzMiA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDIpID49IDA7XG4gICAgICBpZiAoIWhhczEgfHwgIWhhczIpIHtcbiAgICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgICBpZiAoIWhhczEpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWhhczIpIHtcbiAgICAgICAgICAgIHN0aWxsT3ZlcmxhcGluZ1JlY3RzLnB1c2gocmVjdDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiBvdmVybGFwIC0tLVwiKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMSBUT1A6JHtyZWN0MS50b3B9IEJPVFRPTToke3JlY3QxLmJvdHRvbX0gTEVGVDoke3JlY3QxLmxlZnR9IFJJR0hUOiR7cmVjdDEucmlnaHR9IFdJRFRIOiR7cmVjdDEud2lkdGh9IEhFSUdIVDoke3JlY3QxLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGAjMiBUT1A6JHtyZWN0Mi50b3B9IEJPVFRPTToke3JlY3QyLmJvdHRvbX0gTEVGVDoke3JlY3QyLmxlZnR9IFJJR0hUOiR7cmVjdDIucmlnaHR9IFdJRFRIOiR7cmVjdDIud2lkdGh9IEhFSUdIVDoke3JlY3QyLmhlaWdodH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB4T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWChyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB4T3ZlcmxhcDogJHt4T3ZlcmxhcH1gKTtcbiAgICAgICAgICBjb25zdCB5T3ZlcmxhcCA9IGdldFJlY3RPdmVybGFwWShyZWN0MSwgcmVjdDIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGB5T3ZlcmxhcDogJHt5T3ZlcmxhcH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RoKSB7XG4gICAgY29uc29sZS5sb2coYENMSUVOVCBSRUNUOiBvdmVybGFwcyAke3N0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgdGlueVwiKTtcbiAgICAgIH1cbiAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBvc3NpYmx5Q29udGFpbmluZ1JlY3Qgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0ID09PSBwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFyZWN0c1RvS2VlcC5oYXMocG9zc2libHlDb250YWluaW5nUmVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVjdENvbnRhaW5zKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QsIHJlY3QsIHRvbGVyYW5jZSkpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBjb250YWluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgY29uc3QgcmVjdCA9IHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IGxlZnQgPSBNYXRoLm1pbihyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgcmlnaHQgPSBNYXRoLm1heChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCB0b3AgPSBNYXRoLm1pbihyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IGJvdHRvbSA9IE1hdGgubWF4KHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b20sXG4gICAgaGVpZ2h0OiBib3R0b20gLSB0b3AsXG4gICAgbGVmdCxcbiAgICByaWdodCxcbiAgICB0b3AsXG4gICAgd2lkdGg6IHJpZ2h0IC0gbGVmdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBDTElFTlQgUkVDVDogbWVyZ2luZyB0d28gaW50byBvbmUsIFZFUlRJQ0FMOiAke3JlY3RzTGluZVVwVmVydGljYWxseX0gSE9SSVpPTlRBTDogJHtyZWN0c0xpbmVVcEhvcml6b250YWxseX0gKCR7ZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c30pYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAocmFuZ2UsIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMpIHtcbiAgY29uc3QgcmFuZ2VDbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG4gIHJldHVybiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gICAgcmFuZ2VDbGllbnRSZWN0cyxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgY2xpZW50UmVjdHMsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBjb25zdCB0b2xlcmFuY2UgPSAxO1xuICBjb25zdCBvcmlnaW5hbFJlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmFuZ2VDbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgb3JpZ2luYWxSZWN0cy5wdXNoKHtcbiAgICAgIGJvdHRvbTogcmFuZ2VDbGllbnRSZWN0LmJvdHRvbSxcbiAgICAgIGhlaWdodDogcmFuZ2VDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQ2xpZW50UmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5yaWdodCxcbiAgICAgIHRvcDogcmFuZ2VDbGllbnRSZWN0LnRvcCxcbiAgICAgIHdpZHRoOiByYW5nZUNsaWVudFJlY3Qud2lkdGgsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUmVjdHMgPSBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgb3JpZ2luYWxSZWN0cyxcbiAgICB0b2xlcmFuY2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBjb25zdCBub0NvbnRhaW5lZFJlY3RzID0gcmVtb3ZlQ29udGFpbmVkUmVjdHMobWVyZ2VkUmVjdHMsIHRvbGVyYW5jZSk7XG4gIGNvbnN0IG5ld1JlY3RzID0gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhub0NvbnRhaW5lZFJlY3RzKTtcbiAgY29uc3QgbWluQXJlYSA9IDIgKiAyO1xuICBmb3IgKGxldCBqID0gbmV3UmVjdHMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICBjb25zdCByZWN0ID0gbmV3UmVjdHNbal07XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCAqIHJlY3QuaGVpZ2h0ID4gbWluQXJlYTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgaWYgKG5ld1JlY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY2hlY2tPdmVybGFwcyhuZXdSZWN0cyk7XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbmV3UmVjdHM7XG59XG5cbmZ1bmN0aW9uIGlzUGFnaW5hdGVkKGRvY3VtZW50KSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX1BBR0lOQVRFRClcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCkge1xuICBpZiAoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgaWYgKCFib2R5RXZlbnRMaXN0ZW5lcnNTZXQpIHtcbiAgICAgIGJvZHlFdmVudExpc3RlbmVyc1NldCA9IHRydWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vkb3duXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGxhc3RNb3VzZURvd25YID0gZXYuY2xpZW50WDtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWSA9IGV2LmNsaWVudFk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNldXBcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blggLSBldi5jbGllbnRYKSA8IDMgJiZcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25ZIC0gZXYuY2xpZW50WSkgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlbW92ZVwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBwcm9jZXNzTW91c2VFdmVudCh3aW4sIGV2KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJ0b3VjaGVuZFwiLFxuICAgICAgICBmdW5jdGlvbiB0b3VjaEVuZChlKSB7XG4gICAgICAgICAgcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBJRF9ISUdITElHSFRTX0NPTlRBSU5FUik7XG5cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChfaGlnaGxpZ2h0c0NvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gX2hpZ2hsaWdodHNDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGhpZGVBbGxoaWdobGlnaHRzKCkge1xuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzdHJveUFsbGhpZ2hsaWdodHMoKSB7XG4gIGhpZGVBbGxoaWdobGlnaHRzKCk7XG4gIF9oaWdobGlnaHRzLnNwbGljZSgwLCBfaGlnaGxpZ2h0cy5sZW5ndGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzdHJveUhpZ2hsaWdodChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBsZXQgX2RvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGhpZ2hsaWdodCAmJiBpID49IDAgJiYgaSA8IF9oaWdobGlnaHRzLmxlbmd0aCkge1xuICAgIF9oaWdobGlnaHRzLnNwbGljZShpLCAxKTtcbiAgfVxuICBjb25zdCBoaWdobGlnaHRDb250YWluZXIgPSBfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaGlnaGxpZ2h0Q29udGFpbmVyKSB7XG4gICAgaGlnaGxpZ2h0Q29udGFpbmVyLnJlbW92ZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2ZpVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChlbGVtZW50LCBjaGlsZCkge1xuICBsZXQgZm91bmQgPSAtMTtcbiAgbGV0IHRleHROb2RlSW5kZXggPSAtMTtcbiAgbGV0IHByZXZpb3VzV2FzRWxlbWVudCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBjb25zdCBpc1RleHQgPSBpc0NmaVRleHROb2RlKGNoaWxkTm9kZSk7XG4gICAgaWYgKGlzVGV4dCB8fCBwcmV2aW91c1dhc0VsZW1lbnQpIHtcbiAgICAgIHRleHROb2RlSW5kZXggKz0gMjtcbiAgICB9XG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgaWYgKGNoaWxkTm9kZSA9PT0gY2hpbGQpIHtcbiAgICAgICAgZm91bmQgPSB0ZXh0Tm9kZUluZGV4O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcHJldmlvdXNXYXNFbGVtZW50ID0gY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmZ1bmN0aW9uIGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChub2RlMSwgbm9kZTIpIHtcbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMSA9PT0gbm9kZTIpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUxLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMS5jb250YWlucyhub2RlMikpIHtcbiAgICByZXR1cm4gbm9kZTE7XG4gIH1cbiAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBub2RlMi5jb250YWlucyhub2RlMSkpIHtcbiAgICByZXR1cm4gbm9kZTI7XG4gIH1cbiAgY29uc3Qgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBsZXQgcGFyZW50ID0gbm9kZTEucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgY29uc3Qgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiA9IFtdO1xuICBwYXJlbnQgPSBub2RlMi5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBsZXQgY29tbW9uQW5jZXN0b3IgPSBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoXG4gICAgKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUxRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH1cbiAgKTtcbiAgaWYgKCFjb21tb25BbmNlc3Rvcikge1xuICAgIGNvbW1vbkFuY2VzdG9yID0gbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKChub2RlMkVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMkVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY29tbW9uQW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIGZ1bGxRdWFsaWZpZWRTZWxlY3Rvcihub2RlKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZU5hbWU7XG4gIH1cbiAgLy9yZXR1cm4gY3NzUGF0aChub2RlLCBqdXN0U2VsZWN0b3IpO1xuICByZXR1cm4gY3NzUGF0aChub2RlLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIENPTExBUFNFRC5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYXdUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuVGV4dCA9IHJhd1RleHQudHJpbSgpLnJlcGxhY2UoL1xcbi9nLCBcIiBcIikucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhblRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFRFWFQgRU1QVFkuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZUluZm8gPSBjb252ZXJ0UmFuZ2UocmFuZ2UsIGZ1bGxRdWFsaWZpZWRTZWxlY3RvciwgY29tcHV0ZUNGSSk7XG4gIGlmICghcmFuZ2VJbmZvKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gU0VMRUNUSU9OIFJBTkdFIElORk8gRkFJTD8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoSVNfREVWICYmIERFQlVHX1ZJU1VBTFMpIHtcbiAgICBjb25zdCByZXN0b3JlZFJhbmdlID0gY29udmVydFJhbmdlSW5mbyh3aW4uZG9jdW1lbnQsIHJhbmdlSW5mbyk7XG4gICAgaWYgKHJlc3RvcmVkUmFuZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCA9PT0gcmFuZ2Uuc3RhcnRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQgPT09IHJhbmdlLmVuZE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyID09PSByYW5nZS5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRUQgT0tBWSAoZGV2IGNoZWNrKS5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFIEZBSUwgKGRldiBjaGVjaykuXCIpO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJTRUxFQ1RJT05cIixcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIk9SREVSRUQgUkFOR0UgRlJPTSBTRUxFQ1RJT05cIixcbiAgICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlJFU1RPUkVEIFJBTkdFXCIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgIGdldENzc1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ0FOTk9UIFJFU1RPUkUgU0VMRUNUSU9OIFJBTkdFID8/IVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbyksXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiByYXdUZXh0LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoZWNrQmxhY2tsaXN0ZWQoZWwpIHtcbiAgbGV0IGJsYWNrbGlzdGVkSWQ7XG4gIGNvbnN0IGlkID0gZWwuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG4gIGlmIChpZCAmJiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSS5pbmRleE9mKGlkKSA+PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIElEOiBcIiArIGlkKTtcbiAgICBibGFja2xpc3RlZElkID0gaWQ7XG4gIH1cbiAgbGV0IGJsYWNrbGlzdGVkQ2xhc3M7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBfYmxhY2tsaXN0SWRDbGFzc0ZvckNGSSkge1xuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoaXRlbSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBDTEFTUzogXCIgKyBpdGVtKTtcbiAgICAgIGJsYWNrbGlzdGVkQ2xhc3MgPSBpdGVtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChibGFja2xpc3RlZElkIHx8IGJsYWNrbGlzdGVkQ2xhc3MpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY3NzUGF0aChub2RlLCBvcHRpbWl6ZWQpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBzdGVwcyA9IFtdO1xuICBsZXQgY29udGV4dE5vZGUgPSBub2RlO1xuICB3aGlsZSAoY29udGV4dE5vZGUpIHtcbiAgICBjb25zdCBzdGVwID0gX2Nzc1BhdGhTdGVwKGNvbnRleHROb2RlLCAhIW9wdGltaXplZCwgY29udGV4dE5vZGUgPT09IG5vZGUpO1xuICAgIGlmICghc3RlcCkge1xuICAgICAgYnJlYWs7IC8vIEVycm9yIC0gYmFpbCBvdXQgZWFybHkuXG4gICAgfVxuICAgIHN0ZXBzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgaWYgKHN0ZXAub3B0aW1pemVkKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29udGV4dE5vZGUgPSBjb250ZXh0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG4gIHN0ZXBzLnJldmVyc2UoKTtcbiAgcmV0dXJuIHN0ZXBzLmpvaW4oXCIgPiBcIik7XG59XG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4vLyBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vYmxpbmsvKy9tYXN0ZXIvU291cmNlL2RldnRvb2xzL2Zyb250X2VuZC9jb21wb25lbnRzL0RPTVByZXNlbnRhdGlvblV0aWxzLmpzIzMxNlxuZnVuY3Rpb24gX2Nzc1BhdGhTdGVwKG5vZGUsIG9wdGltaXplZCwgaXNUYXJnZXROb2RlKSB7XG4gIGZ1bmN0aW9uIHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMobmQpIHtcbiAgICBjb25zdCBjbGFzc0F0dHJpYnV0ZSA9IG5kLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIGlmICghY2xhc3NBdHRyaWJ1dGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3NBdHRyaWJ1dGVcbiAgICAgIC5zcGxpdCgvXFxzKy9nKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLm1hcCgobm0pID0+IHtcbiAgICAgICAgLy8gVGhlIHByZWZpeCBpcyByZXF1aXJlZCB0byBzdG9yZSBcIl9fcHJvdG9fX1wiIGluIGEgb2JqZWN0LWJhc2VkIG1hcC5cbiAgICAgICAgcmV0dXJuIFwiJFwiICsgbm07XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlkU2VsZWN0b3IoaWRkKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZCk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRlbnQpIHtcbiAgICBpZiAoaXNDU1NJZGVudGlmaWVyKGlkZW50KSkge1xuICAgICAgcmV0dXJuIGlkZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEVzY2FwZUZpcnN0ID0gL14oPzpbMC05XXwtWzAtOS1dPykvLnRlc3QoaWRlbnQpO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlkZW50Lmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGlkZW50LnJlcGxhY2UoLy4vZywgZnVuY3Rpb24gKGMsIGlpKSB7XG4gICAgICByZXR1cm4gKHNob3VsZEVzY2FwZUZpcnN0ICYmIGlpID09PSAwKSB8fCAhaXNDU1NJZGVudENoYXIoYylcbiAgICAgICAgPyBlc2NhcGVBc2NpaUNoYXIoYywgaWkgPT09IGxhc3RJbmRleClcbiAgICAgICAgOiBjO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlQXNjaWlDaGFyKGMsIGlzTGFzdCkge1xuICAgIHJldHVybiBcIlxcXFxcIiArIHRvSGV4Qnl0ZShjKSArIChpc0xhc3QgPyBcIlwiIDogXCIgXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9IZXhCeXRlKGMpIHtcbiAgICBsZXQgaGV4Qnl0ZSA9IGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gICAgaWYgKGhleEJ5dGUubGVuZ3RoID09PSAxKSB7XG4gICAgICBoZXhCeXRlID0gXCIwXCIgKyBoZXhCeXRlO1xuICAgIH1cbiAgICByZXR1cm4gaGV4Qnl0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRDaGFyKGMpIHtcbiAgICBpZiAoL1thLXpBLVowLTlfLV0vLnRlc3QoYykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApID49IDB4YTA7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50aWZpZXIodmFsdWUpIHtcbiAgICByZXR1cm4gL14tP1thLXpBLVpfXVthLXpBLVowLTlfLV0qJC8udGVzdCh2YWx1ZSk7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGxvd2VyQ2FzZU5hbWUgPVxuICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBlbGVtZW50ID0gbm9kZTtcblxuICBjb25zdCBpZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cbiAgaWYgKG9wdGltaXplZCkge1xuICAgIGlmIChpZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogaWRTZWxlY3RvcihpZCksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImJvZHlcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJoZWFkXCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaHRtbFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBsb3dlckNhc2VOYW1lLCAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBub2RlTmFtZSA9IGxvd2VyQ2FzZU5hbWU7IC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7XG4gIGlmIChpZCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUgKyBpZFNlbGVjdG9yKGlkKSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlO1xuXG4gIGlmICghcGFyZW50IHx8IHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhlbGVtZW50KTtcblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICBpZiAocHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgfVxuICB9KTtcblxuICBsZXQgbmVlZHNDbGFzc05hbWVzID0gZmFsc2U7XG4gIGxldCBuZWVkc050aENoaWxkID0gZmFsc2U7XG4gIGxldCBvd25JbmRleCA9IC0xO1xuICBsZXQgZWxlbWVudEluZGV4ID0gLTE7XG4gIGNvbnN0IHNpYmxpbmdzID0gcGFyZW50LmNoaWxkcmVuO1xuXG4gIGZvciAoXG4gICAgbGV0IGkgPSAwO1xuICAgIChvd25JbmRleCA9PT0gLTEgfHwgIW5lZWRzTnRoQ2hpbGQpICYmIGkgPCBzaWJsaW5ncy5sZW5ndGg7XG4gICAgKytpXG4gICkge1xuICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICBpZiAoc2libGluZy5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBlbGVtZW50SW5kZXggKz0gMTtcbiAgICBpZiAoc2libGluZyA9PT0gbm9kZSkge1xuICAgICAgb3duSW5kZXggPSBlbGVtZW50SW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHNpYmxpbmcubm9kZU5hbWVJbkNvcnJlY3RDYXNlKClcbiAgICBjb25zdCBzaWJsaW5nTmFtZSA9XG4gICAgICAoc2libGluZy5sb2NhbE5hbWUgJiYgc2libGluZy5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIHNpYmxpbmcubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc2libGluZ05hbWUgIT09IG5vZGVOYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbmVlZHNDbGFzc05hbWVzID0gdHJ1ZTtcblxuICAgIGNvbnN0IG93bkNsYXNzTmFtZXMgPSBbXTtcbiAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBvd25DbGFzc05hbWVzLnB1c2goYXJySXRlbSk7XG4gICAgfSk7XG4gICAgbGV0IG93bkNsYXNzTmFtZUNvdW50ID0gb3duQ2xhc3NOYW1lcy5sZW5ndGg7XG5cbiAgICBpZiAob3duQ2xhc3NOYW1lQ291bnQgPT09IDApIHtcbiAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfID0gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhzaWJsaW5nKTtcbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXlfLmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIGlmIChzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICAgIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc2libGluZ0NsYXNzIG9mIHNpYmxpbmdDbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIGNvbnN0IGluZCA9IG93bkNsYXNzTmFtZXMuaW5kZXhPZihzaWJsaW5nQ2xhc3MpO1xuICAgICAgaWYgKGluZCA8IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG93bkNsYXNzTmFtZXMuc3BsaWNlKGluZCwgMSk7IC8vIGRlbGV0ZSBvd25DbGFzc05hbWVzW3NpYmxpbmdDbGFzc107XG5cbiAgICAgIGlmICghLS1vd25DbGFzc05hbWVDb3VudCkge1xuICAgICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJlc3VsdCA9IG5vZGVOYW1lO1xuICBpZiAoXG4gICAgaXNUYXJnZXROb2RlICYmXG4gICAgbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIilcbiAgKSB7XG4gICAgcmVzdWx0ICs9ICdbdHlwZT1cIicgKyBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgKyAnXCJdJztcbiAgfVxuICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgIHJlc3VsdCArPSBcIjpudGgtY2hpbGQoXCIgKyAob3duSW5kZXggKyAxKSArIFwiKVwiO1xuICB9IGVsc2UgaWYgKG5lZWRzQ2xhc3NOYW1lcykge1xuICAgIGZvciAoY29uc3QgcHJlZml4ZWROYW1lIG9mIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICByZXN1bHQgKz0gXCIuXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQocHJlZml4ZWROYW1lLnN1YnN0cigxKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvcHRpbWl6ZWQ6IGZhbHNlLFxuICAgIHZhbHVlOiByZXN1bHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVDRkkobm9kZSkge1xuICAvLyBUT0RPOiBoYW5kbGUgY2hhcmFjdGVyIHBvc2l0aW9uIGluc2lkZSB0ZXh0IG5vZGVcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBjZmkgPSBcIlwiO1xuXG4gIGxldCBjdXJyZW50RWxlbWVudCA9IG5vZGU7XG4gIHdoaWxlIChcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlICYmXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgKSB7XG4gICAgY29uc3QgYmxhY2tsaXN0ZWQgPSBjaGVja0JsYWNrbGlzdGVkKGN1cnJlbnRFbGVtZW50KTtcbiAgICBpZiAoIWJsYWNrbGlzdGVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZS5jaGlsZHJlbjtcbiAgICAgIGxldCBjdXJyZW50RWxlbWVudEluZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50ID09PSBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuW2ldKSB7XG4gICAgICAgICAgY3VycmVudEVsZW1lbnRJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50RWxlbWVudEluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXggPSAoY3VycmVudEVsZW1lbnRJbmRleCArIDEpICogMjtcbiAgICAgICAgY2ZpID1cbiAgICAgICAgICBjZmlJbmRleCArXG4gICAgICAgICAgKGN1cnJlbnRFbGVtZW50LmlkID8gXCJbXCIgKyBjdXJyZW50RWxlbWVudC5pZCArIFwiXVwiIDogXCJcIikgK1xuICAgICAgICAgIChjZmkubGVuZ3RoID8gXCIvXCIgKyBjZmkgOiBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIFwiL1wiICsgY2ZpO1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlSGlnaGxpZ2h0KGxvY2F0aW9ucywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbiwgdHlwZSkge1xuICBjb25zdCByYW5nZUluZm8gPSBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb25zKTtcbiAgY29uc3QgdW5pcXVlU3RyID0gYCR7cmFuZ2VJbmZvLmNmaX0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5zdGFydE9mZnNldH0ke3JhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLmVuZE9mZnNldH1gO1xuXG4gIGNvbnN0IGhhc2ggPSByZXF1aXJlKFwiaGFzaC5qc1wiKTtcbiAgY29uc3Qgc2hhMjU2SGV4ID0gaGFzaC5zaGEyNTYoKS51cGRhdGUodW5pcXVlU3RyKS5kaWdlc3QoXCJoZXhcIik7XG5cbiAgdmFyIGlkO1xuICBpZiAodHlwZSA9PSBJRF9ISUdITElHSFRTX0NPTlRBSU5FUikge1xuICAgIGlkID0gXCJSMl9ISUdITElHSFRfXCIgKyBzaGEyNTZIZXg7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBcIlIyX0FOTk9UQVRJT05fXCIgKyBzaGEyNTZIZXg7XG4gIH1cblxuICBkZXN0cm95SGlnaGxpZ2h0KGlkKTtcblxuICBjb25zdCBoaWdobGlnaHQgPSB7XG4gICAgY29sb3I6IGNvbG9yID8gY29sb3IgOiBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgaWQsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIHJhbmdlSW5mbyxcbiAgfTtcbiAgX2hpZ2hsaWdodHMucHVzaChoaWdobGlnaHQpO1xuICBjcmVhdGVIaWdobGlnaHREb20oXG4gICAgd2luZG93LFxuICAgIGhpZ2hsaWdodCxcbiAgICB0eXBlID09IElEX0FOTk9UQVRJT05fQ09OVEFJTkVSID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uKSB7XG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIHNlbGVjdGlvbkluZm8sXG4gICAgY29sb3IsXG4gICAgcG9pbnRlckludGVyYWN0aW9uLFxuICAgIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uKGlkKSB7XG4gIGxldCBpID0gLTE7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChpID09IF9oaWdobGlnaHRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gIHZhciBsb2NhdGlvbnMgPSB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24oaGlnaGxpZ2h0LnJhbmdlSW5mbyksXG4gIH07XG5cbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgbG9jYXRpb25zLFxuICAgIGhpZ2hsaWdodC5jb2xvcixcbiAgICB0cnVlLFxuICAgIElEX0FOTk9UQVRJT05fQ09OVEFJTkVSXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodERvbSh3aW4sIGhpZ2hsaWdodCwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2NhbGUgPVxuICAgIDEgL1xuICAgICh3aW4uUkVBRElVTTIgJiYgd2luLlJFQURJVU0yLmlzRml4ZWRMYXlvdXRcbiAgICAgID8gd2luLlJFQURJVU0yLmZ4bFZpZXdwb3J0U2NhbGVcbiAgICAgIDogMSk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuXG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBoaWdobGlnaHRzQ29udGFpbmVyID0gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpO1xuICBjb25zdCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBoaWdobGlnaHQuaWQpO1xuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUik7XG5cbiAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgaGlnaGxpZ2h0UGFyZW50LnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBpZiAoaGlnaGxpZ2h0LnBvaW50ZXJJbnRlcmFjdGlvbikge1xuICAgIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIsIFwiMVwiKTtcbiAgfVxuXG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgLy9jb25zdCB1c2VTVkcgPSBVU0VfU1ZHO1xuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgbGV0IGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnO1xuICBjb25zdCByb3VuZGVkQ29ybmVyID0gMztcbiAgY29uc3QgdW5kZXJsaW5lVGhpY2tuZXNzID0gMjtcbiAgY29uc3Qgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgPSAzO1xuICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gIGxldCBleHRyYSA9IFwiXCI7XG4gIGNvbnN0IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCA9XG4gICAgZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGhpZ2hsaWdodC5pZCk7XG5cbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBsZXQgYW5ub3RhdGlvbk9mZnNldDtcblxuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPVxuICAgICAgcGFyc2VJbnQoXG4gICAgICAgIChyYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLSB4T2Zmc2V0KSAvIHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICApICsgMTtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICAgIGFubm90YXRpb25PZmZzZXQgPSBwYXJzZUludChcbiAgICAgIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAvIHdpbmRvdy5pbm5lcldpZHRoICsgMVxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAodXNlU1ZHKSB7XG4gICAgICBjb25zdCBib3JkZXJUaGlja25lc3MgPSAwO1xuICAgICAgaWYgKCFoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdSZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgXCJyZWN0XCJcbiAgICAgICk7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgZmlsbDogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pICFpbXBvcnRhbnQ7IGZpbGwtb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50OyBzdHJva2Utd2lkdGg6IDA7YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNjYWxlID0gc2NhbGU7XG5cbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnhcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwicnlcIiwgYCR7cm91bmRlZENvcm5lciAqIHNjYWxlfWApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QubGVmdCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInlcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QudG9wIC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmhlaWdodCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC53aWR0aCArIGJvcmRlclRoaWNrbmVzcyAqIDIpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdSZWN0KTtcbiAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCA+IHJvdW5kZWRDb3JuZXIgPyByb3VuZGVkQ29ybmVyIDogMDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgbGluZU9mZnNldCkgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAtXG4gICAgICAgICAgICAgIGxpbmVPZmZzZXQpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgeSA9XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC1cbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgICAgaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkdMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICAgIFwibGluZVwiXG4gICAgICAgICk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogYnV0dDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICAgIH07IHN0cm9rZTogcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSkgIWltcG9ydGFudDsgc3Ryb2tlLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudGBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2NhbGUgPSBzY2FsZTtcblxuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGgpICpcbiAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9IGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgeSA9IChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArIGxpbmVPZmZzZXQpICogc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICBjb25zdCByZ2IgPSBNYXRoLnJvdW5kKDB4ZmZmZmZmICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIGNvbnN0IHIgPSByZ2IgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAocmdiID4+IDgpICYgMjU1O1xuICAgICAgICBjb25zdCBiID0gcmdiICYgMjU1O1xuICAgICAgICBleHRyYSA9IGBvdXRsaW5lLWNvbG9yOiByZ2IoJHtyfSwgJHtnfSwgJHtifSk7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICAgIGV4dHJhICs9IGBib3JkZXItYm90dG9tOiAke3VuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlfXB4IHNvbGlkIHJnYmEoJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5yZWRcbiAgICAgICAgICB9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnRgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICBoaWdobGlnaHRBcmVhLnNjYWxlID0gc2NhbGU7XG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAqL1xuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC50b3AgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWEpO1xuICAgICAgaWYgKCFERUJVR19WSVNVQUxTICYmIGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIC8vaWYgKGRyYXdTdHJpa2VUaHJvdWdoKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFMaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDtgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS53aWR0aCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3Qud2lkdGggKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5oZWlnaHQgPSBgJHtcbiAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmxlZnQgPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmxlZnQgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS50b3AgPSBgJHtcbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5oZWlnaHQgLyAyIC1cbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYUxpbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHVzZVNWRyAmJiBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZykge1xuICAgIGNvbnN0IGhpZ2hsaWdodEFyZWFTVkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX1hNTF9OQU1FU1BBQ0UsIFwic3ZnXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc2V0QXR0cmlidXRlKFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpO1xuICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYVNWRyk7XG4gIH1cblxuICBjb25zdCBoaWdobGlnaHRCb3VuZGluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgYm9yZGVyLXJhZGl1czogJHtyb3VuZGVkQ29ybmVyfXB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudDsgJHtleHRyYX1gXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSk7XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnNjYWxlID0gc2NhbGU7XG5cbiAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXG4gICAgICBcInN0eWxlXCIsXG4gICAgICBgb3V0bGluZS1jb2xvcjogbWFnZW50YTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YFxuICAgICk7XG4gIH1cblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5yZWN0ID0ge1xuICAgICAgaGVpZ2h0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgIHRvcDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgIHdpZHRoOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9O1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LndpZHRoICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC50b3AgKiBzY2FsZX1weGA7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRCb3VuZGluZyk7XG4gIGhpZ2hsaWdodHNDb250YWluZXIuYXBwZW5kKGhpZ2hsaWdodFBhcmVudCk7XG5cbiAgcmV0dXJuIGhpZ2hsaWdodFBhcmVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlKHJhbmdlLCBnZXRDc3NTZWxlY3RvciwgY29tcHV0ZUVsZW1lbnRDRkkpIHtcbiAgY29uc3Qgc3RhcnRJc0VsZW1lbnQgPSByYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lclxuICAgIDogcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFzdGFydENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgaWYgKHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50XG4gICk7XG4gIGNvbnN0IGVuZElzRWxlbWVudCA9IHJhbmdlLmVuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnQgPSBlbmRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lclxuICAgIDogcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGVcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFlbmRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBlbmRJc0VsZW1lbnRcbiAgICA/IC0xXG4gICAgOiBBcnJheS5mcm9tKGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihyYW5nZS5lbmRDb250YWluZXIpO1xuICBpZiAoZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IDwgLTEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBjb21tb25FbGVtZW50QW5jZXN0b3IgPSBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQoXG4gICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICk7XG4gIGlmICghY29tbW9uRWxlbWVudEFuY2VzdG9yKSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gTk8gUkFOR0UgQ09NTU9OIEFOQ0VTVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpIHtcbiAgICBjb25zdCByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCA9XG4gICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICAgICAgPyByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lclxuICAgICAgICA6IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgJiZcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICkge1xuICAgICAgaWYgKGNvbW1vbkVsZW1lbnRBbmNlc3RvciAhPT0gcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCI+Pj4+Pj4gQ09NTU9OIEFOQ0VTVE9SIENPTlRBSU5FUiBESUZGPz8hXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3Rvcihjb21tb25FbGVtZW50QW5jZXN0b3IpKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IocmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgcm9vdEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShjb21tb25FbGVtZW50QW5jZXN0b3IpO1xuICBjb25zdCBzdGFydEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShzdGFydENvbnRhaW5lckVsZW1lbnQpO1xuICBjb25zdCBlbmRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGxldCBjZmk7XG4gIGlmIChyb290RWxlbWVudENmaSAmJiBzdGFydEVsZW1lbnRDZmkgJiYgZW5kRWxlbWVudENmaSkge1xuICAgIGxldCBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmk7XG4gICAgaWYgKCFzdGFydElzRWxlbWVudCkge1xuICAgICAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBzdGFydEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5zdGFydE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0IDwgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2Uuc3RhcnRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5zdGFydE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPSBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmk7XG4gICAgaWYgKCFlbmRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgICApO1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIGVuZEVsZW1lbnRDZmkgK1xuICAgICAgICBcIi9cIiArXG4gICAgICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA+PSAwICYmXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldCA8IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2UuZW5kT2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLmVuZE9mZnNldCArIDEpICogMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjZmlUZXh0Tm9kZUluZGV4ID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIGNmaVRleHROb2RlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4T2ZMYXN0RWxlbWVudCA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXNbXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgZW5kRWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNmaSA9XG4gICAgICByb290RWxlbWVudENmaSArXG4gICAgICBcIixcIiArXG4gICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIikgK1xuICAgICAgXCIsXCIgK1xuICAgICAgZW5kRWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogcmFuZ2UuZW5kT2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiByYW5nZS5zdGFydE9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCh3aW4sIGlkKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFjbGllbnRSZWN0cykgcmV0dXJuO1xuXG4gIHZhciB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gIHZhciBtYXhIZWlnaHQgPSB0b3BDbGllbnRSZWN0LmhlaWdodDtcbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKGNsaWVudFJlY3QudG9wIDwgdG9wQ2xpZW50UmVjdC50b3ApIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0O1xuICAgIGlmIChjbGllbnRSZWN0LmhlaWdodCA+IG1heEhlaWdodCkgbWF4SGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICB2YXIgbmV3VG9wID0gdG9wQ2xpZW50UmVjdC50b3A7XG5cbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgZG8ge1xuICAgICAgdmFyIGJvdW5kaW5nQXJlYXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuICAgICAgICBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcbiAgICAgICk7XG4gICAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICAgIC8vZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGJvdW5kaW5nQXJlYXMuc25hcHNob3RMZW5ndGg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBib3VuZGluZ0FyZWFzLmxlbmd0aCB8IDA7XG4gICAgICAgIGkgPCBsZW47XG4gICAgICAgIGkgPSAoaSArIDEpIHwgMFxuICAgICAgKSB7XG4gICAgICAgIHZhciBib3VuZGluZ0FyZWEgPSBib3VuZGluZ0FyZWFzW2ldO1xuICAgICAgICBpZiAoTWF0aC5hYnMoYm91bmRpbmdBcmVhLnJlY3QudG9wIC0gKG5ld1RvcCAtIHlPZmZzZXQpKSA8IDMpIHtcbiAgICAgICAgICBuZXdUb3AgKz0gYm91bmRpbmdBcmVhLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKGZvdW5kKTtcbiAgfVxuXG4gIHRvcENsaWVudFJlY3QudG9wID0gbmV3VG9wO1xuICB0b3BDbGllbnRSZWN0LmhlaWdodCA9IG1heEhlaWdodDtcblxuICByZXR1cm4gdG9wQ2xpZW50UmVjdDtcbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG5cbiAgcmV0dXJuIGNsaWVudFJlY3RzO1xufVxuXG5mdW5jdGlvbiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBwYXJ0aWFsQ2ZpOiByYW5nZUluZm8uY2ZpLFxuICAgIGRvbVJhbmdlOiB7XG4gICAgICBzdGFydDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uZW5kT2Zmc2V0LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgY2ZpOiBsb2NhdGlvbi5wYXJ0aWFsQ2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgdmFyIHNpemUgPSB7XG4gICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgIGxlZnQ6IGNsaWVudFJlY3RzWzBdLmxlZnQsXG4gICAgd2lkdGg6IGNsaWVudFJlY3RzWzBdLndpZHRoLFxuICAgIHRvcDogY2xpZW50UmVjdHNbMF0udG9wLFxuICAgIGhlaWdodDogY2xpZW50UmVjdHNbMF0uaGVpZ2h0LFxuICB9O1xuXG4gIHJldHVybiBzaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgY29uc3QgY2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdmFyIGhhbmRsZUJvdW5kcyA9IHtcbiAgICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0LFxuICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICB0b3A6IGNsaWVudFJlY3QudG9wLFxuICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCb3VuZHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U2Nyb2xsTW9kZShmbGFnKSB7XG4gIGlmICghZmxhZykge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX1BBR0lOQVRFRCk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfVxufVxuXG4vKlxuIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7IC8vIElFID49IDk7IG90aGVyIGJyb3dzZXJzXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgLy9hbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTsgLy9oZXJlIHlvdSBkcmF3IHlvdXIgb3duIG1lbnVcbiAgICAgICAgICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy9sZXQgZ2V0Q3NzU2VsZWN0b3IgPSBmdWxsUXVhbGlmaWVkU2VsZWN0b3I7XG4gICAgICAgICAgICBcblx0XHRcdGxldCBzdHIgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRsZXQgc2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvKCk7XG5cdFx0XHRsZXQgcG9zID0gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8se3JlZDoxMCxncmVlbjo1MCxibHVlOjIzMH0sdHJ1ZSk7XG5cdFx0XHRsZXQgcmV0MiA9IGNyZWF0ZUFubm90YXRpb24ocG9zLmlkKTtcblx0XHRcdFxuICB9LCBmYWxzZSk7XG4gICAgfSBlbHNlIHsgLy8gSUUgPCA5XG4gICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbmNvbnRleHRtZW51JywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBhbGVydChcIllvdSd2ZSB0cmllZCB0byBvcGVuIGNvbnRleHQgbWVudVwiKTtcbiAgICAgICAgICAgIHdpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4qL1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMiBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgaXNTY3JvbGxNb2RlRW5hYmxlZCwgcGFnZVdpZHRoIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGdldENzc1NlbGVjdG9yIH0gZnJvbSBcImNzcy1zZWxlY3Rvci1nZW5lcmF0b3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaXJzdFZpc2libGVMb2NhdG9yKCkge1xuICBjb25zdCBlbGVtZW50ID0gZmluZEVsZW1lbnQoZG9jdW1lbnQuYm9keSk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhyZWY6IFwiI1wiLFxuICAgIHR5cGU6IFwiYXBwbGljYXRpb24veGh0bWwreG1sXCIsXG4gICAgbG9jYXRpb25zOiB7XG4gICAgICBjc3NTZWxlY3RvcjogZ2V0Q3NzU2VsZWN0b3IoZWxlbWVudCksXG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IGVsZW1lbnQudGV4dENvbnRlbnQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEVsZW1lbnQocm9vdEVsZW1lbnQpIHtcbiAgdmFyIGZvdW5kRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgZm9yICh2YXIgaSA9IHJvb3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgY2hpbGQgPSByb290RWxlbWVudC5jaGlsZHJlbltpXTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IGVsZW1lbnRSZWxhdGl2ZVBvc2l0aW9uKGNoaWxkLCB1bmRlZmluZWQpO1xuICAgIGlmIChwb3NpdGlvbiA9PSAwKSB7XG4gICAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIGZvdW5kRWxlbWVudCA9IGNoaWxkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPCAwKSB7XG4gICAgICBpZiAoIWZvdW5kRWxlbWVudCkge1xuICAgICAgICBmb3VuZEVsZW1lbnQgPSBjaGlsZDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmluZEVsZW1lbnQoZm91bmRFbGVtZW50KTtcbiAgfVxuICByZXR1cm4gcm9vdEVsZW1lbnQ7XG59XG5cbi8vIFNlZSBjb21wdXRlVmlzaWJpbGl0eV8oKSBpbiByMi1uYXZpZ2F0b3ItanNcbmZ1bmN0aW9uIGVsZW1lbnRSZWxhdGl2ZVBvc2l0aW9uKGVsZW1lbnQsIGRvbVJlY3QgLyogbnVsbGFibGUgKi8pIHtcbiAgaWYgKHJlYWRpdW0uaXNGaXhlZExheW91dCkgcmV0dXJuIHRydWU7XG5cbiAgaWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCAhZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3QgcmVjdCA9IGRvbVJlY3QgfHwgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJlY3QubGVmdCA+PSBwYWdlV2lkdGgpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAocmVjdC5sZWZ0ID49IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZElnbm9yZUVsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCBlbFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgaWYgKGVsU3R5bGUpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKTtcbiAgICBpZiAoZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBsb2dFcnJvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyB0b05hdGl2ZVJlY3QgfSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBUZXh0UmFuZ2UgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZVwiO1xuXG4vLyBQb2x5ZmlsbCBmb3IgQW5kcm9pZCBBUEkgMjZcbmltcG9ydCBtYXRjaEFsbCBmcm9tIFwic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbFwiO1xubWF0Y2hBbGwuc2hpbSgpO1xuXG5jb25zdCBkZWJ1ZyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICBjb25zdCB0ZXh0ID0gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldFNlbGVjdGlvblJlY3QoKTtcbiAgcmV0dXJuIHsgdGV4dCwgcmVjdCB9O1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIGxldCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICByZXR1cm4gdG9OYXRpdmVSZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBoaWdobGlnaHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5IaWdobGlnaHQgPSBoaWdobGlnaHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhbkhpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7XG4gIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8oZG9jdW1lbnQuYm9keSk7XG4gIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgY29uc3Qgc25pcHBldExlbmd0aCA9IDIwMDtcblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGJlZm9yZSB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgZmlyc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGJlZm9yZSA9IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBzbmlwcGV0TGVuZ3RoKSwgc3RhcnQpO1xuICBsZXQgZmlyc3RXb3JkU3RhcnQgPSBiZWZvcmUuc2VhcmNoKC9cXFB7TH1cXHB7TH0vZ3UpO1xuICBpZiAoZmlyc3RXb3JkU3RhcnQgIT09IC0xKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlLnNsaWNlKGZpcnN0V29yZFN0YXJ0ICsgMSk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGFmdGVyIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBsYXN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBhZnRlciA9IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgc25pcHBldExlbmd0aCkpO1xuICBsZXQgbGFzdFdvcmRFbmQgPSBBcnJheS5mcm9tKGFmdGVyLm1hdGNoQWxsKC9cXHB7TH1cXFB7TH0vZ3UpKS5wb3AoKTtcbiAgaWYgKGxhc3RXb3JkRW5kICE9PSB1bmRlZmluZWQgJiYgbGFzdFdvcmRFbmQuaW5kZXggPiAxKSB7XG4gICAgYWZ0ZXIgPSBhZnRlci5zbGljZSgwLCBsYXN0V29yZEVuZC5pbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGlnaGxpZ2h0LCBiZWZvcmUsIGFmdGVyIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBCYXNlIHNjcmlwdCB1c2VkIGJ5IGJvdGggcmVmbG93YWJsZSBhbmQgZml4ZWQgbGF5b3V0IHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9nZXN0dXJlc1wiO1xuaW1wb3J0IHtcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb0VuZCxcbiAgc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9UZXh0LFxuICBzZXRQcm9wZXJ0eSxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUFubm90YXRpb24sXG4gIGNyZWF0ZUhpZ2hsaWdodCxcbiAgZGVzdHJveUhpZ2hsaWdodCxcbiAgZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8sXG4gIGdldFNlbGVjdGlvblJlY3QsXG4gIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCxcbiAgc2V0U2Nyb2xsTW9kZSxcbn0gZnJvbSBcIi4vaGlnaGxpZ2h0XCI7XG5pbXBvcnQgeyBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvciB9IGZyb20gXCIuL2RvbVwiO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGVjb3JhdGlvbnMsIHJlZ2lzdGVyVGVtcGxhdGVzIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbi8vIFB1YmxpYyBBUEkgdXNlZCBieSB0aGUgbmF2aWdhdG9yLlxud2luZG93LnJlYWRpdW0gPSB7XG4gIC8vIHV0aWxzXG4gIHNjcm9sbFRvSWQ6IHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb246IHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvVGV4dDogc2Nyb2xsVG9UZXh0LFxuICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodDogc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvU3RhcnQ6IHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvRW5kOiBzY3JvbGxUb0VuZCxcbiAgc2V0UHJvcGVydHk6IHNldFByb3BlcnR5LFxuICByZW1vdmVQcm9wZXJ0eTogcmVtb3ZlUHJvcGVydHksXG5cbiAgLy8gc2VsZWN0aW9uXG4gIGdldEN1cnJlbnRTZWxlY3Rpb246IGdldEN1cnJlbnRTZWxlY3Rpb24sXG5cbiAgLy8gZGVjb3JhdGlvblxuICByZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXM6IHJlZ2lzdGVyVGVtcGxhdGVzLFxuICBnZXREZWNvcmF0aW9uczogZ2V0RGVjb3JhdGlvbnMsXG5cbiAgLy8gRE9NXG4gIGZpbmRGaXJzdFZpc2libGVMb2NhdG9yOiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcixcbn07XG5cbi8vIExlZ2FjeSBoaWdobGlnaHRzIEFQSS5cbndpbmRvdy5jcmVhdGVBbm5vdGF0aW9uID0gY3JlYXRlQW5ub3RhdGlvbjtcbndpbmRvdy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG53aW5kb3cuZGVzdHJveUhpZ2hsaWdodCA9IGRlc3Ryb3lIaWdobGlnaHQ7XG53aW5kb3cuZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbztcbndpbmRvdy5nZXRTZWxlY3Rpb25SZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdDtcbndpbmRvdy5yZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQgPSByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQ7XG53aW5kb3cuc2V0U2Nyb2xsTW9kZSA9IHNldFNjcm9sbE1vZGU7XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBTY3JpcHQgdXNlZCBmb3IgZml4ZWQgbGF5b3V0cyByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vaW5kZXhcIjtcblxud2luZG93LnJlYWRpdW0uaXNGaXhlZExheW91dCA9IHRydWU7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwibG9jYXRpb25zIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IiLCJmaW5kRWxlbWVudCIsImhyZWYiLCJyb290RWxlbWVudCIsImVsZW1lbnRSZWxhdGl2ZVBvc2l0aW9uIiwic2hvdWxkSWdub3JlRWxlbWVudCIsImRvbVJlY3QiLCJyZWFkaXVtIiwiZWxTdHlsZSIsImRpc3BsYXkiLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHLHlCQUF5QjtBQUMzSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxrQkFBa0IsZ0RBQWdEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0JBQWdCO0FBQy9DO0FBQ0EsMkJBQTJCLGlDQUFpQztBQUM1RDtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBLHdCQUF3QjtBQUN4Qix1QkFBdUI7QUFDdkIseUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsaUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjtBQUN0QixtQ0FBbUMsT0FBTztBQUMxQywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsR0FBRztBQUN6Qjs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DLHNCQUFzQjtBQUMxRDs7QUFFQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0IsOEJBQThCLFlBQVk7QUFDMUMsd0VBQXdFLFlBQVk7QUFDcEY7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz80ZWE4Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz83NGM5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/YTYyMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzAxZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NjY2MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NmY5MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz81YTAxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/NDI2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz81YWVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzYzOTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz84ZDcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/ZWFhNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzhlMDkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz8xMzA0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz82NzlhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz84NzVlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZTg1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2IzN2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzP2EwODciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9iODZjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz9iMjE4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzQyNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzFkZTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85OTYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz8wOGE4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZjM5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz9iYWU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzP2UzYTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz84OTU0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz80YmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz82OTRmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz9lZDNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzPzU5OGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9hODA4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz9kNGYxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/Y2E0MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz82ZDczIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzYyZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/NzhjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/NjBhNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz9lNWExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/OGYyNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NjEwMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/YzRkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzP2VkYzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzP2U3ODEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9hODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzP2NmYjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/Yjk1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz83NzM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzP2NlNzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/ZmQyYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTNiNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/NzQ3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz84YTM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2Q4MmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/OGRmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz9lMGI2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js index b59df64363..1923c212b7 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SSxDQUFDeGlCLFlBQUwsQ0FDRSxTQURGLEVBRUUsOEZBRkY7QUFJQXBFLEVBQUFBLFFBQVEsQ0FBQzZtQixJQUFULENBQWNyaUIsV0FBZCxDQUEwQm9pQixJQUExQjtBQUNELENBVEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1yZWZsb3dhYmxlLmpzPzM5MjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFwcHJveFNlYXJjaCBmcm9tICdhcHByb3gtc3RyaW5nLW1hdGNoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHByb3gtc3RyaW5nLW1hdGNoJykuTWF0Y2h9IFN0cmluZ01hdGNoXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBNYXRjaFxuICogQHByb3Age251bWJlcn0gc3RhcnQgLSBTdGFydCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gZW5kIC0gRW5kIG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBzY29yZSAtXG4gKiAgIFNjb3JlIGZvciB0aGUgbWF0Y2ggYmV0d2VlbiAwIGFuZCAxLjAsIHdoZXJlIDEuMCBpbmRpY2F0ZXMgYSBwZXJmZWN0IG1hdGNoXG4gKiAgIGZvciB0aGUgcXVvdGUgYW5kIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoZXMgZm9yIGBzdHJgIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhFcnJvcnNcbiAqIEByZXR1cm4ge1N0cmluZ01hdGNoW119XG4gKi9cbmZ1bmN0aW9uIHNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycykge1xuICAvLyBEbyBhIGZhc3Qgc2VhcmNoIGZvciBleGFjdCBtYXRjaGVzLiBUaGUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGxpYnJhcnlcbiAgLy8gZG9lc24ndCBjdXJyZW50bHkgaW5jb3Jwb3JhdGUgdGhpcyBvcHRpbWl6YXRpb24gaXRzZWxmLlxuICBsZXQgbWF0Y2hQb3MgPSAwO1xuICBsZXQgZXhhY3RNYXRjaGVzID0gW107XG4gIHdoaWxlIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICBtYXRjaFBvcyA9IHRleHQuaW5kZXhPZihzdHIsIG1hdGNoUG9zKTtcbiAgICBpZiAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgICBleGFjdE1hdGNoZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtYXRjaFBvcyxcbiAgICAgICAgZW5kOiBtYXRjaFBvcyArIHN0ci5sZW5ndGgsXG4gICAgICAgIGVycm9yczogMCxcbiAgICAgIH0pO1xuICAgICAgbWF0Y2hQb3MgKz0gMTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4YWN0TWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGV4YWN0TWF0Y2hlcztcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBubyBleGFjdCBtYXRjaGVzLCBkbyBhIG1vcmUgZXhwZW5zaXZlIHNlYXJjaCBmb3IgbWF0Y2hlc1xuICAvLyB3aXRoIGVycm9ycy5cbiAgcmV0dXJuIGFwcHJveFNlYXJjaCh0ZXh0LCBzdHIsIG1heEVycm9ycyk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIGB0ZXh0YCBhbmQgYHN0cmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gdGV4dE1hdGNoU2NvcmUodGV4dCwgc3RyKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gYHNjb3JlTWF0Y2hgIHdpbGwgbmV2ZXIgcGFzcyBhbiBlbXB0eSBzdHJpbmcgKi9cbiAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgdGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMC4wO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgc3RyLCBzdHIubGVuZ3RoKTtcblxuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgcmV0dXJuIDEgLSAobWF0Y2hlc1swXS5lcnJvcnMgLyBzdHIubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBiZXN0IGFwcHJveGltYXRlIG1hdGNoIGZvciBgcXVvdGVgIGluIGB0ZXh0YC5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCBpZiBubyBtYXRjaCBleGNlZWRpbmcgdGhlIG1pbmltdW0gcXVhbGl0eSB0aHJlc2hvbGQgd2FzIGZvdW5kLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gRG9jdW1lbnQgdGV4dCB0byBzZWFyY2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdW90ZSAtIFN0cmluZyB0byBmaW5kIHdpdGhpbiBgdGV4dGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IC1cbiAqICAgQ29udGV4dCBpbiB3aGljaCB0aGUgcXVvdGUgb3JpZ2luYWxseSBhcHBlYXJlZC4gVGhpcyBpcyB1c2VkIHRvIGNob29zZSB0aGVcbiAqICAgYmVzdCBtYXRjaC5cbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF0gLSBFeHBlY3RlZCB0ZXh0IGJlZm9yZSB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF0gLSBFeHBlY3RlZCB0ZXh0IGFmdGVyIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge251bWJlcn0gW2NvbnRleHQuaGludF0gLSBFeHBlY3RlZCBvZmZzZXQgb2YgbWF0Y2ggd2l0aGluIHRleHRcbiAqIEByZXR1cm4ge01hdGNofG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1b3RlKHRleHQsIHF1b3RlLCBjb250ZXh0ID0ge30pIHtcbiAgaWYgKHF1b3RlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2hvb3NlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcnJvcnMgdG8gYWxsb3cgZm9yIHRoZSBpbml0aWFsIHNlYXJjaC5cbiAgLy8gVGhpcyBjaG9pY2UgaW52b2x2ZXMgYSB0cmFkZW9mZiBiZXR3ZWVuOlxuICAvL1xuICAvLyAgLSBSZWNhbGwgKHByb3BvcnRpb24gb2YgXCJnb29kXCIgbWF0Y2hlcyBmb3VuZClcbiAgLy8gIC0gUHJlY2lzaW9uIChwcm9wb3J0aW9uIG9mIG1hdGNoZXMgZm91bmQgd2hpY2ggYXJlIFwiZ29vZFwiKVxuICAvLyAgLSBDb3N0IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBhbmQgb2YgcHJvY2Vzc2luZyB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgWzFdXG4gIC8vXG4gIC8vIFsxXSBTcGVjaWZpY2FsbHksIHRoZSBleHBlY3RlZC10aW1lIGNvbXBsZXhpdHkgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGlzXG4gIC8vICAgICBgTygobWF4RXJyb3JzIC8gMzIpICogdGV4dC5sZW5ndGgpYC4gU2VlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBkb2NzLlxuICBjb25zdCBtYXhFcnJvcnMgPSBNYXRoLm1pbigyNTYsIHF1b3RlLmxlbmd0aCAvIDIpO1xuXG4gIC8vIEZpbmQgY2xvc2VzdCBtYXRjaGVzIGZvciBgcXVvdGVgIGluIGB0ZXh0YCBiYXNlZCBvbiBlZGl0IGRpc3RhbmNlLlxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHF1b3RlLCBtYXhFcnJvcnMpO1xuXG4gIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgYSBtYXRjaCBjYW5kaWRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nTWF0Y2h9IG1hdGNoXG4gICAqL1xuICBjb25zdCBzY29yZU1hdGNoID0gbWF0Y2ggPT4ge1xuICAgIGNvbnN0IHF1b3RlV2VpZ2h0ID0gNTA7IC8vIFNpbWlsYXJpdHkgb2YgbWF0Y2hlZCB0ZXh0IHRvIHF1b3RlLlxuICAgIGNvbnN0IHByZWZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYmVmb3JlIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5wcmVmaXhgLlxuICAgIGNvbnN0IHN1ZmZpeFdlaWdodCA9IDIwOyAvLyBTaW1pbGFyaXR5IG9mIHRleHQgYWZ0ZXIgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnN1ZmZpeGAuXG4gICAgY29uc3QgcG9zV2VpZ2h0ID0gMjsgLy8gUHJveGltaXR5IHRvIGV4cGVjdGVkIGxvY2F0aW9uLiBVc2VkIGFzIGEgdGllLWJyZWFrZXIuXG5cbiAgICBjb25zdCBxdW90ZVNjb3JlID0gMSAtIG1hdGNoLmVycm9ycyAvIHF1b3RlLmxlbmd0aDtcblxuICAgIGNvbnN0IHByZWZpeFNjb3JlID0gY29udGV4dC5wcmVmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShNYXRoLm1heCgwLCBtYXRjaC5zdGFydCAtIGNvbnRleHQucHJlZml4Lmxlbmd0aCksIG1hdGNoLnN0YXJ0KSxcbiAgICAgICAgICBjb250ZXh0LnByZWZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcbiAgICBjb25zdCBzdWZmaXhTY29yZSA9IGNvbnRleHQuc3VmZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UobWF0Y2guZW5kLCBtYXRjaC5lbmQgKyBjb250ZXh0LnN1ZmZpeC5sZW5ndGgpLFxuICAgICAgICAgIGNvbnRleHQuc3VmZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuXG4gICAgbGV0IHBvc1Njb3JlID0gMS4wO1xuICAgIGlmICh0eXBlb2YgY29udGV4dC5oaW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5hYnMobWF0Y2guc3RhcnQgLSBjb250ZXh0LmhpbnQpO1xuICAgICAgcG9zU2NvcmUgPSAxLjAgLSBvZmZzZXQgLyB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdTY29yZSA9XG4gICAgICBxdW90ZVdlaWdodCAqIHF1b3RlU2NvcmUgK1xuICAgICAgcHJlZml4V2VpZ2h0ICogcHJlZml4U2NvcmUgK1xuICAgICAgc3VmZml4V2VpZ2h0ICogc3VmZml4U2NvcmUgK1xuICAgICAgcG9zV2VpZ2h0ICogcG9zU2NvcmU7XG4gICAgY29uc3QgbWF4U2NvcmUgPSBxdW90ZVdlaWdodCArIHByZWZpeFdlaWdodCArIHN1ZmZpeFdlaWdodCArIHBvc1dlaWdodDtcbiAgICBjb25zdCBub3JtYWxpemVkU2NvcmUgPSByYXdTY29yZSAvIG1heFNjb3JlO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRTY29yZTtcbiAgfTtcblxuICAvLyBSYW5rIG1hdGNoZXMgYmFzZWQgb24gc2ltaWxhcml0eSBvZiBhY3R1YWwgYW5kIGV4cGVjdGVkIHN1cnJvdW5kaW5nIHRleHRcbiAgLy8gYW5kIGFjdHVhbC9leHBlY3RlZCBvZmZzZXQgaW4gdGhlIGRvY3VtZW50IHRleHQuXG4gIGNvbnN0IHNjb3JlZE1hdGNoZXMgPSBtYXRjaGVzLm1hcChtID0+ICh7XG4gICAgc3RhcnQ6IG0uc3RhcnQsXG4gICAgZW5kOiBtLmVuZCxcbiAgICBzY29yZTogc2NvcmVNYXRjaChtKSxcbiAgfSkpO1xuXG4gIC8vIENob29zZSBtYXRjaCB3aXRoIGhpZ2hlc3Qgc2NvcmUuXG4gIHNjb3JlZE1hdGNoZXMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICByZXR1cm4gc2NvcmVkTWF0Y2hlc1swXTtcbn1cbiIsIi8qKlxuICogUmV0dXJuIHRoZSBjb21iaW5lZCBsZW5ndGggb2YgdGV4dCBub2RlcyBjb250YWluZWQgaW4gYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBub2RlVGV4dExlbmd0aChub2RlKSB7XG4gIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgIC8vIG5iLiBgdGV4dENvbnRlbnRgIGV4Y2x1ZGVzIHRleHQgaW4gY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXG4gICAgICAvLyB3aGVuIGNhbGxlZCBvbiBhIHBhcmVudCBlbGVtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHN1YnRyYWN0IHRoYXQgaGVyZS5cblxuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAobm9kZS50ZXh0Q29udGVudCkubGVuZ3RoO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSB0ZXh0IG9mIGFsbCBwcmV2aW91cyBzaWJsaW5ncyBvZiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgbGV0IHNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIHdoaWxlIChzaWJsaW5nKSB7XG4gICAgbGVuZ3RoICs9IG5vZGVUZXh0TGVuZ3RoKHNpYmxpbmcpO1xuICAgIHNpYmxpbmcgPSBzaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25lIG9yIG1vcmUgY2hhcmFjdGVyIG9mZnNldHMgd2l0aGluIGFuIGVsZW1lbnQgdG8gKHRleHQgbm9kZSwgcG9zaXRpb24pXG4gKiBwYWlycy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyW119IG9mZnNldHMgLSBPZmZzZXRzLCB3aGljaCBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfVtdfVxuICovXG5mdW5jdGlvbiByZXNvbHZlT2Zmc2V0cyhlbGVtZW50LCAuLi5vZmZzZXRzKSB7XG4gIGxldCBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICBjb25zdCBub2RlSXRlciA9IC8qKiBAdHlwZSB7RG9jdW1lbnR9ICovIChcbiAgICBlbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgKS5jcmVhdGVOb2RlSXRlcmF0b3IoZWxlbWVudCwgTm9kZUZpbHRlci5TSE9XX1RFWFQpO1xuICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgbGV0IHRleHROb2RlO1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICAvLyBGaW5kIHRoZSB0ZXh0IG5vZGUgY29udGFpbmluZyB0aGUgYG5leHRPZmZzZXRgdGggY2hhcmFjdGVyIGZyb20gdGhlIHN0YXJ0XG4gIC8vIG9mIGBlbGVtZW50YC5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Tm9kZSkge1xuICAgIHRleHROb2RlID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAoY3VycmVudE5vZGUpO1xuICAgIGlmIChsZW5ndGggKyB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCA+IG5leHRPZmZzZXQpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IG5leHRPZmZzZXQgLSBsZW5ndGggfSk7XG4gICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gICAgICBsZW5ndGggKz0gdGV4dE5vZGUuZGF0YS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgLy8gQm91bmRhcnkgY2FzZS5cbiAgd2hpbGUgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0Tm9kZSAmJiBsZW5ndGggPT09IG5leHRPZmZzZXQpIHtcbiAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCB9KTtcbiAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0cy5zaGlmdCgpO1xuICB9XG5cbiAgaWYgKG5leHRPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPZmZzZXQgZXhjZWVkcyB0ZXh0IGxlbmd0aCcpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBsZXQgUkVTT0xWRV9GT1JXQVJEUyA9IDE7XG5leHBvcnQgbGV0IFJFU09MVkVfQkFDS1dBUkRTID0gMjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIG9mZnNldCB3aXRoaW4gdGhlIHRleHQgY29udGVudCBvZiBhbiBlbGVtZW50LlxuICpcbiAqIFRoaXMgcG9zaXRpb24gY2FuIGJlIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZGVzY2VuZGFudCBub2RlIGluIHRoZSBjdXJyZW50XG4gKiBET00gc3VidHJlZSBvZiB0aGUgZWxlbWVudCB1c2luZyB0aGUgYHJlc29sdmVgIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgdGV4dCBwb3NpdGlvbiBgb2Zmc2V0YCB3aXRoaW5cbiAgICogdGhlIHRleHQgY29udGVudCBvZiBgZWxlbWVudGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBvZmZzZXQpIHtcbiAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPZmZzZXQgaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8qKiBFbGVtZW50IHRoYXQgYG9mZnNldGAgaXMgcmVsYXRpdmUgdG8uICovXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgIC8qKiBDaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBlbGVtZW50J3MgYHRleHRDb250ZW50YC4gKi9cbiAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcG9zaXRpb24gd2l0aCBvZmZzZXQgcmVsYXRpdmUgdG8gYSBnaXZlbiBhbmNlc3RvclxuICAgKiBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBhcmVudCAtIEFuY2VzdG9yIG9mIGB0aGlzLmVsZW1lbnRgXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHJlbGF0aXZlVG8ocGFyZW50KSB7XG4gICAgaWYgKCFwYXJlbnQuY29udGFpbnModGhpcy5lbGVtZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgaXMgbm90IGFuIGFuY2VzdG9yIG9mIGN1cnJlbnQgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgd2hpbGUgKGVsICE9PSBwYXJlbnQpIHtcbiAgICAgIG9mZnNldCArPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChlbCk7XG4gICAgICBlbCA9IC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKGVsLCBvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIHBvc2l0aW9uIHRvIGEgc3BlY2lmaWMgdGV4dCBub2RlIGFuZCBvZmZzZXQgd2l0aGluIHRoYXQgbm9kZS5cbiAgICpcbiAgICogVGhyb3dzIGlmIGB0aGlzLm9mZnNldGAgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbGVtZW50J3MgdGV4dC4gSW4gdGhlXG4gICAqIGNhc2Ugd2hlcmUgdGhlIGVsZW1lbnQgaGFzIG5vIHRleHQgYW5kIGB0aGlzLm9mZnNldGAgaXMgMCwgdGhlIGBkaXJlY3Rpb25gXG4gICAqIG9wdGlvbiBkZXRlcm1pbmVzIHdoYXQgaGFwcGVucy5cbiAgICpcbiAgICogT2Zmc2V0cyBhdCB0aGUgYm91bmRhcnkgYmV0d2VlbiB0d28gbm9kZXMgYXJlIHJlc29sdmVkIHRvIHRoZSBzdGFydCBvZiB0aGVcbiAgICogbm9kZSB0aGF0IGJlZ2lucyBhdCB0aGUgYm91bmRhcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogICBAcGFyYW0ge1JFU09MVkVfRk9SV0FSRFN8UkVTT0xWRV9CQUNLV0FSRFN9IFtvcHRpb25zLmRpcmVjdGlvbl0gLVxuICAgKiAgICAgU3BlY2lmaWVzIGluIHdoaWNoIGRpcmVjdGlvbiB0byBzZWFyY2ggZm9yIHRoZSBuZWFyZXN0IHRleHQgbm9kZSBpZlxuICAgKiAgICAgYHRoaXMub2Zmc2V0YCBpcyBgMGAgYW5kIGB0aGlzLmVsZW1lbnRgIGhhcyBubyB0ZXh0LiBJZiBub3Qgc3BlY2lmaWVkXG4gICAqICAgICBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAqIEByZXR1cm4ge3sgbm9kZTogVGV4dCwgb2Zmc2V0OiBudW1iZXIgfX1cbiAgICogQHRocm93cyB7UmFuZ2VFcnJvcn1cbiAgICovXG4gIHJlc29sdmUob3B0aW9ucyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXNvbHZlT2Zmc2V0cyh0aGlzLmVsZW1lbnQsIHRoaXMub2Zmc2V0KVswXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMCAmJiBvcHRpb25zLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHR3ID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuZ2V0Um9vdE5vZGUoKSxcbiAgICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVFxuICAgICAgICApO1xuICAgICAgICB0dy5jdXJyZW50Tm9kZSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgZm9yd2FyZHMgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUkVTT0xWRV9GT1JXQVJEUztcbiAgICAgICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7VGV4dHxudWxsfSAqLyAoXG4gICAgICAgICAgZm9yd2FyZHMgPyB0dy5uZXh0Tm9kZSgpIDogdHcucHJldmlvdXNOb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5vZGU6IHRleHQsIG9mZnNldDogZm9yd2FyZHMgPyAwIDogdGV4dC5kYXRhLmxlbmd0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCB0aGF0IHJlZmVycyB0byB0aGUgYG9mZnNldGB0aCBjaGFyYWN0ZXIgd2l0aGluXG4gICAqIGBub2RlYC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21DaGFyT2Zmc2V0KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERTpcbiAgICAgICAgcmV0dXJuIFRleHRQb3NpdGlvbi5mcm9tUG9pbnQobm9kZSwgb2Zmc2V0KTtcbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCBvZmZzZXQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlIGlzIG5vdCBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBgVGV4dFBvc2l0aW9uYCByZXByZXNlbnRpbmcgdGhlIHJhbmdlIHN0YXJ0IG9yIGVuZCBwb2ludCAobm9kZSwgb2Zmc2V0KS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGV4dCBvciBFbGVtZW50IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIE9mZnNldCB3aXRoaW4gdGhlIG5vZGUuXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tUG9pbnQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IC8qKiBAdHlwZSB7VGV4dH0gKi8gKG5vZGUpLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBoYXMgbm8gcGFyZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXQgPSBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSArIG9mZnNldDtcblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihub2RlLnBhcmVudEVsZW1lbnQsIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggYmVmb3JlIHRoZSBgb2Zmc2V0YHRoIGNoaWxkIG9mIGVsZW1lbnQuXG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgICAgIHRleHRPZmZzZXQgKz0gbm9kZVRleHRMZW5ndGgobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKC8qKiBAdHlwZSB7RWxlbWVudH0gKi8gKG5vZGUpLCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUG9pbnQgaXMgbm90IGluIGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlZ2lvbiBvZiBhIGRvY3VtZW50IGFzIGEgKHN0YXJ0LCBlbmQpIHBhaXIgb2YgYFRleHRQb3NpdGlvbmAgcG9pbnRzLlxuICpcbiAqIFJlcHJlc2VudGluZyBhIHJhbmdlIGluIHRoaXMgd2F5IGFsbG93cyBmb3IgY2hhbmdlcyBpbiB0aGUgRE9NIGNvbnRlbnQgb2YgdGhlXG4gKiByYW5nZSB3aGljaCBkb24ndCBhZmZlY3QgaXRzIHRleHQgY29udGVudCwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIHRleHQgY29udGVudFxuICogb2YgdGhlIHJhbmdlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRSYW5nZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYW4gaW1tdXRhYmxlIGBUZXh0UmFuZ2VgIGZyb20gYSBgc3RhcnRgIGFuZCBgZW5kYCBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IHN0YXJ0XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gYVxuICAgKiBnaXZlbiBhbmNlc3Rvci4gU2VlIGBUZXh0UG9zaXRpb24ucmVsYXRpdmVUb2AuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICAgKi9cbiAgcmVsYXRpdmVUbyhlbGVtZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICB0aGlzLnN0YXJ0LnJlbGF0aXZlVG8oZWxlbWVudCksXG4gICAgICB0aGlzLmVuZC5yZWxhdGl2ZVRvKGVsZW1lbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBgVGV4dFJhbmdlYCB0byBhIERPTSByYW5nZS5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBET00gUmFuZ2Ugd2lsbCBhbHdheXMgc3RhcnQgYW5kIGVuZCBpbiBhIGBUZXh0YCBub2RlLlxuICAgKiBIZW5jZSBgVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkudG9SYW5nZSgpYCBjYW4gYmUgdXNlZCB0byBcInNocmlua1wiIGFcbiAgICogcmFuZ2UgdG8gdGhlIHRleHQgaXQgY29udGFpbnMuXG4gICAqXG4gICAqIE1heSB0aHJvdyBpZiB0aGUgYHN0YXJ0YCBvciBgZW5kYCBwb3NpdGlvbnMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGEgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cbiAgdG9SYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQ7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCA9PT0gdGhpcy5lbmQuZWxlbWVudCAmJlxuICAgICAgdGhpcy5zdGFydC5vZmZzZXQgPD0gdGhpcy5lbmQub2Zmc2V0XG4gICAgKSB7XG4gICAgICAvLyBGYXN0IHBhdGggZm9yIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIGluIHNhbWUgZWxlbWVudC5cbiAgICAgIFtzdGFydCwgZW5kXSA9IHJlc29sdmVPZmZzZXRzKFxuICAgICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQsXG4gICAgICAgIHRoaXMuc3RhcnQub2Zmc2V0LFxuICAgICAgICB0aGlzLmVuZC5vZmZzZXRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5zdGFydC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0ZPUldBUkRTIH0pO1xuICAgICAgZW5kID0gdGhpcy5lbmQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9CQUNLV0FSRFMgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgIHJhbmdlLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gZXhpc3RpbmcgRE9NIGBSYW5nZWAgdG8gYSBgVGV4dFJhbmdlYFxuICAgKlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKiBAcmV0dXJuIHtUZXh0UmFuZ2V9XG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KFxuICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICByYW5nZS5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgYFRleHRSYW5nZWAgZnJvbSB0aGUgYHN0YXJ0YHRoIHRvIGBlbmRgdGggY2hhcmFjdGVycyBpbiBgcm9vdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgc3RhdGljIGZyb21PZmZzZXRzKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgc3RhcnQpLFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBlbmQpXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGNsYXNzZXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBET00gYFJhbmdlYFxuICogb2JqZWN0cyBhbmQgZGlmZmVyZW50IHR5cGVzIG9mIHNlbGVjdG9ycy4gSXQgaXMgbW9zdGx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhXG4gKiBzZXQgb2YgYW5jaG9yaW5nIGxpYnJhcmllcy4gSXQgc2VydmVzIHR3byBtYWluIHB1cnBvc2VzOlxuICpcbiAqICAxLiBQcm92aWRpbmcgYSBjb25zaXN0ZW50IGludGVyZmFjZSBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFuY2hvcnMuXG4gKiAgMi4gSW5zdWxhdGluZyB0aGUgcmVzdCBvZiB0aGUgY29kZSBmcm9tIEFQSSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGFuY2hvcmluZ1xuICogICAgIGxpYnJhcmllcy5cbiAqL1xuXG5pbXBvcnQgeyBtYXRjaFF1b3RlIH0gZnJvbSAnLi9tYXRjaC1xdW90ZSc7XG5pbXBvcnQgeyBUZXh0UmFuZ2UsIFRleHRQb3NpdGlvbiB9IGZyb20gJy4vdGV4dC1yYW5nZSc7XG5pbXBvcnQgeyBub2RlRnJvbVhQYXRoLCB4cGF0aEZyb21Ob2RlIH0gZnJvbSAnLi94cGF0aCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuUmFuZ2VTZWxlY3Rvcn0gUmFuZ2VTZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFBvc2l0aW9uU2VsZWN0b3J9IFRleHRQb3NpdGlvblNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UXVvdGVTZWxlY3Rvcn0gVGV4dFF1b3RlU2VsZWN0b3JcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUmFuZ2VBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgcmFuZ2UpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlIC0gIEEgcmFuZ2UgZGVzY3JpYmluZyB0aGUgYW5jaG9yLlxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhbmNob3IgZnJvbSBhIHNlcmlhbGl6ZWQgYFJhbmdlU2VsZWN0b3JgIHNlbGVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSAgQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7UmFuZ2VTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3Iuc3RhcnRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghc3RhcnRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgc3RhcnRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLmVuZENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFlbmRDb250YWluZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJlc29sdmUgZW5kQ29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmRQb3MgPSBUZXh0UG9zaXRpb24uZnJvbUNoYXJPZmZzZXQoXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5lbmRPZmZzZXRcbiAgICApO1xuXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MpLnRvUmFuZ2UoKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7UmFuZ2VTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgLy8gXCJTaHJpbmtcIiB0aGUgcmFuZ2Ugc28gdGhhdCBpdCB0aWdodGx5IHdyYXBzIGl0cyB0ZXh0LiBUaGlzIGVuc3VyZXMgbW9yZVxuICAgIC8vIHByZWRpY3RhYmxlIG91dHB1dCBmb3IgYSBnaXZlbiB0ZXh0IHNlbGVjdGlvbi5cbiAgICBjb25zdCBub3JtYWxpemVkUmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHRoaXMucmFuZ2UpLnRvUmFuZ2UoKTtcblxuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2Uobm9ybWFsaXplZFJhbmdlKTtcbiAgICBjb25zdCBzdGFydENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLnN0YXJ0LmVsZW1lbnQsIHRoaXMucm9vdCk7XG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2UuZW5kLmVsZW1lbnQsIHRoaXMucm9vdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1JhbmdlU2VsZWN0b3InLFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzdGFydE9mZnNldDogdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIGVuZE9mZnNldDogdGV4dFJhbmdlLmVuZC5vZmZzZXQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRQb3NpdGlvblNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRQb3NpdGlvbkFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKFxuICAgICAgcm9vdCxcbiAgICAgIHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICB0ZXh0UmFuZ2UuZW5kLm9mZnNldFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvblNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHJvb3QsIHNlbGVjdG9yLnN0YXJ0LCBzZWxlY3Rvci5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvblNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRQb3NpdGlvblNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICB9O1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gVGV4dFJhbmdlLmZyb21PZmZzZXRzKHRoaXMucm9vdCwgdGhpcy5zdGFydCwgdGhpcy5lbmQpLnRvUmFuZ2UoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIFF1b3RlTWF0Y2hPcHRpb25zXG4gKiBAcHJvcCB7bnVtYmVyfSBbaGludF0gLSBFeHBlY3RlZCBwb3NpdGlvbiBvZiBtYXRjaCBpbiB0ZXh0LiBTZWUgYG1hdGNoUXVvdGVgLlxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFF1b3RlU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFF1b3RlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhhY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XVxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBleGFjdCwgY29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmV4YWN0ID0gZXhhY3Q7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgVGV4dFF1b3RlQW5jaG9yYCBmcm9tIGEgcmFuZ2UuXG4gICAqXG4gICAqIFdpbGwgdGhyb3cgaWYgYHJhbmdlYCBkb2VzIG5vdCBjb250YWluIGFueSB0ZXh0IG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChyb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKHJvb3QpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICAgIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gICAgLy8gTnVtYmVyIG9mIGNoYXJhY3RlcnMgYXJvdW5kIHRoZSBxdW90ZSB0byBjYXB0dXJlIGFzIGNvbnRleHQuIFdlIGN1cnJlbnRseVxuICAgIC8vIGFsd2F5cyB1c2UgYSBmaXhlZCBhbW91bnQsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhpcyBjb2RlIHdhcyBhd2FyZVxuICAgIC8vIG9mIGxvZ2ljYWwgYm91bmRhcmllcyBpbiB0aGUgZG9jdW1lbnQgKHBhcmFncmFwaCwgYXJ0aWNsZSBldGMuKSB0byBhdm9pZFxuICAgIC8vIGNhcHR1cmluZyB0ZXh0IHVucmVsYXRlZCB0byB0aGUgcXVvdGUuXG4gICAgLy9cbiAgICAvLyBJbiByZWd1bGFyIHByb3NlIHRoZSBpZGVhbCBjb250ZW50IHdvdWxkIG9mdGVuIGJlIHRoZSBzdXJyb3VuZGluZyBzZW50ZW5jZS5cbiAgICAvLyBUaGlzIGlzIGEgbmF0dXJhbCB1bml0IG9mIG1lYW5pbmcgd2hpY2ggZW5hYmxlcyBkaXNwbGF5aW5nIHF1b3RlcyBpblxuICAgIC8vIGNvbnRleHQgZXZlbiB3aGVuIHRoZSBkb2N1bWVudCBpcyBub3QgYXZhaWxhYmxlLiBXZSBjb3VsZCB1c2UgYEludGwuU2VnbWVudGVyYFxuICAgIC8vIGZvciB0aGlzIHdoZW4gYXZhaWxhYmxlLlxuICAgIGNvbnN0IGNvbnRleHRMZW4gPSAzMjtcblxuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCksIHtcbiAgICAgIHByZWZpeDogdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIGNvbnRleHRMZW4pLCBzdGFydCksXG4gICAgICBzdWZmaXg6IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgY29udGV4dExlbikpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1RleHRRdW90ZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHsgcHJlZml4LCBzdWZmaXggfSA9IHNlbGVjdG9yO1xuICAgIHJldHVybiBuZXcgVGV4dFF1b3RlQW5jaG9yKHJvb3QsIHNlbGVjdG9yLmV4YWN0LCB7IHByZWZpeCwgc3VmZml4IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1RleHRRdW90ZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ1RleHRRdW90ZVNlbGVjdG9yJyxcbiAgICAgIGV4YWN0OiB0aGlzLmV4YWN0LFxuICAgICAgcHJlZml4OiB0aGlzLmNvbnRleHQucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLmNvbnRleHQuc3VmZml4LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1JhbmdlKG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnRvUG9zaXRpb25BbmNob3Iob3B0aW9ucykudG9SYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0aGlzLnJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IG1hdGNoID0gbWF0Y2hRdW90ZSh0ZXh0LCB0aGlzLmV4YWN0LCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQsXG4gICAgICBoaW50OiBvcHRpb25zLmhpbnQsXG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdRdW90ZSBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IodGhpcy5yb290LCBtYXRjaC5zdGFydCwgbWF0Y2guZW5kKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgVGV4dFF1b3RlQW5jaG9yIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzXCI7XG5cbi8vIENhdGNoIEpTIGVycm9ycyB0byBsb2cgdGhlbSBpbiB0aGUgYXBwLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwiZXJyb3JcIixcbiAgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgQW5kcm9pZC5sb2dFcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5maWxlbmFtZSwgZXZlbnQubGluZW5vKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8vIE5vdGlmeSBuYXRpdmUgY29kZSB0aGF0IHRoZSBwYWdlIGhhcyBsb2FkZWQuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkpO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gICAgICBzbmFwQ3VycmVudE9mZnNldCgpO1xuICAgIH0pO1xuICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgfSxcbiAgZmFsc2Vcbik7XG5cbi8qKlxuICogSGF2aW5nIGFuIG9kZCBudW1iZXIgb2YgY29sdW1ucyB3aGVuIGRpc3BsYXlpbmcgdHdvIGNvbHVtbnMgcGVyIHNjcmVlbiBjYXVzZXMgc25hcHBpbmcgYW5kIHBhZ2VcbiAqIHR1cm5pbmcgaXNzdWVzLiBUbyBmaXggdGhpcywgd2UgaW5zZXJ0IGEgYmxhbmsgdmlydHVhbCBjb2x1bW4gYXQgdGhlIGVuZCBvZiB0aGUgcmVzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpIHtcbiAgY29uc3QgaWQgPSBcInJlYWRpdW0tdmlydHVhbC1wYWdlXCI7XG4gIHZhciB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHx8IGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkgIT0gMikge1xuICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGNvbENvdW50ID0gZG9jdW1lbnRXaWR0aCAvIHBhZ2VXaWR0aDtcbiAgICB2YXIgaGFzT2RkQ29sQ291bnQgPSAoTWF0aC5yb3VuZChjb2xDb3VudCAqIDIpIC8gMikgJSAxID4gMC4xO1xuICAgIGlmIChoYXNPZGRDb2xDb3VudCkge1xuICAgICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB2aXJ0dWFsQ29sLnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgICAgdmlydHVhbENvbC5zdHlsZS5icmVha0JlZm9yZSA9IFwiY29sdW1uXCI7XG4gICAgICAgIHZpcnR1YWxDb2wuaW5uZXJIVE1MID0gXCImIzgyMDM7XCI7IC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2aXJ0dWFsQ29sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHZhciBwYWdlV2lkdGggPSAxO1xuXG5mdW5jdGlvbiBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCkge1xuICAvLyBXZSBjYW4ndCByZWx5IG9uIHdpbmRvdy5pbm5lcldpZHRoIGZvciB0aGUgcGFnZVdpZHRoIG9uIEFuZHJvaWQsIGJlY2F1c2UgaWYgdGhlXG4gIC8vIGRldmljZSBwaXhlbCByYXRpbyBpcyBub3QgYW4gaW50ZWdlciwgd2UgZ2V0IHJvdW5kaW5nIGlzc3VlcyBvZmZzZXR0aW5nIHRoZSBwYWdlcy5cbiAgLy9cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3JlYWRpdW0tY3NzL2lzc3Vlcy85N1xuICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcjItbmF2aWdhdG9yLWtvdGxpbi9pc3N1ZXMvMTQ2XG4gIHZhciB3aWR0aCA9IEFuZHJvaWQuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICBwYWdlV2lkdGggPSB3aWR0aCAvIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBzZXRQcm9wZXJ0eShcbiAgICBcIi0tUlNfX3ZpZXdwb3J0V2lkdGhcIixcbiAgICBcImNhbGMoXCIgKyB3aWR0aCArIFwicHggLyBcIiArIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICsgXCIpXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkNvdW50UGVyU2NyZWVuKCkge1xuICByZXR1cm4gcGFyc2VJbnQoXG4gICAgd2luZG93XG4gICAgICAuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbi1jb3VudFwiKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxNb2RlRW5hYmxlZCgpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1VU0VSX19zY3JvbGxcIilcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpID09IFwicmVhZGl1bS1zY3JvbGwtb25cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEwoKSB7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmRpci50b0xvd2VyQ2FzZSgpID09IFwicnRsXCI7XG59XG5cbi8vIFNjcm9sbCB0byB0aGUgZ2l2ZW4gVGFnSWQgaW4gZG9jdW1lbnQgYW5kIHNuYXAuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9JZChpZCkge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbn1cblxuLy8gUG9zaXRpb24gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAgLSAxXSwgMC0xMDAlLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9Qb3NpdGlvbiBcIiArIHBvc2l0aW9uKTtcbiAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+IDEpIHtcbiAgICB0aHJvdyBcInNjcm9sbFRvUG9zaXRpb24oKSBtdXN0IGJlIGdpdmVuIGEgcG9zaXRpb24gZnJvbSAwLjAgdG8gIDEuMFwiO1xuICB9XG5cbiAgbGV0IG9mZnNldDtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIG9mZnNldCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0ICogcG9zaXRpb247XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBvZmZzZXQ7XG4gICAgLy8gd2luZG93LnNjcm9sbFRvKDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIG9mZnNldCA9IGRvY3VtZW50V2lkdGggKiBwb3NpdGlvbiAqIGZhY3RvcjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KG9mZnNldCk7XG4gIH1cbn1cblxuLy8gU2Nyb2xscyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgZ2l2ZW4gdGV4dCBzbmlwcGV0LlxuLy9cbi8vIFRoZSBleHBlY3RlZCB0ZXh0IGFyZ3VtZW50IGlzIGEgTG9jYXRvciBUZXh0IG9iamVjdCwgYXMgZGVmaW5lZCBoZXJlOlxuLy8gaHR0cHM6Ly9yZWFkaXVtLm9yZy9hcmNoaXRlY3R1cmUvbW9kZWxzL2xvY2F0b3JzL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvVGV4dCh0ZXh0KSB7XG4gIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoeyB0ZXh0IH0pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNjcm9sbFRvUmFuZ2UocmFuZ2UpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9SYW5nZShyYW5nZSkge1xuICBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Q3NzU2VsZWN0b3IgfSBmcm9tIFwiY3NzLXNlbGVjdG9yLWdlbmVyYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IoKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaHJlZjogXCIjXCIsXG4gICAgdHlwZTogXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIixcbiAgICBsb2NhdGlvbnM6IHtcbiAgICAgIGNzc1NlbGVjdG9yOiBnZXRDc3NTZWxlY3RvcihlbGVtZW50KSxcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogZWxlbWVudC50ZXh0Q29udGVudCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kRWxlbWVudChyb290RWxlbWVudCkge1xuICB2YXIgZm91bmRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZWxlbWVudFJlbGF0aXZlUG9zaXRpb24oY2hpbGQsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHBvc2l0aW9uID09IDApIHtcbiAgICAgIGlmICghc2hvdWxkSWdub3JlRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICAgIGlmICghZm91bmRFbGVtZW50KSB7XG4gICAgICAgIGZvdW5kRWxlbWVudCA9IGNoaWxkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudCkge1xuICAgIHJldHVybiBmaW5kRWxlbWVudChmb3VuZEVsZW1lbnQpO1xuICB9XG4gIHJldHVybiByb290RWxlbWVudDtcbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gZWxlbWVudFJlbGF0aXZlUG9zaXRpb24oZWxlbWVudCwgZG9tUmVjdCAvKiBudWxsYWJsZSAqLykge1xuICBpZiAocmVhZGl1bS5pc0ZpeGVkTGF5b3V0KSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8ICFkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCByZWN0ID0gZG9tUmVjdCB8fCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocmVjdC5sZWZ0ID49IHBhZ2VXaWR0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChyZWN0LmxlZnQgPj0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSWdub3JlRWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENhbm5vdCBiZSByZWxpZWQgdXBvbiwgYmVjYXVzZSB3ZWIgYnJvd3NlciBlbmdpbmUgcmVwb3J0cyBpbnZpc2libGUgd2hlbiBvdXQgb2YgdmlldyBpblxuICAgIC8vIHNjcm9sbGVkIGNvbHVtbnMhXG4gICAgLy8gY29uc3QgdmlzaWJpbGl0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2liaWxpdHlcIik7XG4gICAgLy8gaWYgKHZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIH1cbiAgICBjb25zdCBvcGFjaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3BhY2l0eVwiKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gXCIwXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGxvZ0Vycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IHRvTmF0aXZlUmVjdCB9IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IFRleHRSYW5nZSB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlXCI7XG5cbi8vIFBvbHlmaWxsIGZvciBBbmRyb2lkIEFQSSAyNlxuaW1wb3J0IG1hdGNoQWxsIGZyb20gXCJzdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsXCI7XG5tYXRjaEFsbC5zaGltKCk7XG5cbmNvbnN0IGRlYnVnID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb24oKSB7XG4gIGNvbnN0IHRleHQgPSBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdCgpO1xuICByZXR1cm4geyB0ZXh0LCByZWN0IH07XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIHJldHVybiB0b05hdGl2ZVJlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhbkhpZ2hsaWdodCA9IGhpZ2hsaWdodFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxuL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDtcbiAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhkb2N1bWVudC5ib2R5KTtcbiAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICBjb25zdCBzbmlwcGV0TGVuZ3RoID0gMjAwO1xuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYmVmb3JlIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBmaXJzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYmVmb3JlID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIHNuaXBwZXRMZW5ndGgpLCBzdGFydCk7XG4gIGxldCBmaXJzdFdvcmRTdGFydCA9IGJlZm9yZS5zZWFyY2goL1xcUHtMfVxccHtMfS9ndSk7XG4gIGlmIChmaXJzdFdvcmRTdGFydCAhPT0gLTEpIHtcbiAgICBiZWZvcmUgPSBiZWZvcmUuc2xpY2UoZmlyc3RXb3JkU3RhcnQgKyAxKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYWZ0ZXIgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGxhc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGFmdGVyID0gdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBzbmlwcGV0TGVuZ3RoKSk7XG4gIGxldCBsYXN0V29yZEVuZCA9IEFycmF5LmZyb20oYWZ0ZXIubWF0Y2hBbGwoL1xccHtMfVxcUHtMfS9ndSkpLnBvcCgpO1xuICBpZiAobGFzdFdvcmRFbmQgIT09IHVuZGVmaW5lZCAmJiBsYXN0V29yZEVuZC5pbmRleCA+IDEpIHtcbiAgICBhZnRlciA9IGFmdGVyLnNsaWNlKDAsIGxhc3RXb3JkRW5kLmluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4geyBoaWdobGlnaHQsIGJlZm9yZSwgYWZ0ZXIgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIEJhc2Ugc2NyaXB0IHVzZWQgYnkgYm90aCByZWZsb3dhYmxlIGFuZCBmaXhlZCBsYXlvdXQgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2dlc3R1cmVzXCI7XG5pbXBvcnQge1xuICByZW1vdmVQcm9wZXJ0eSxcbiAgc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvRW5kLFxuICBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb1RleHQsXG4gIHNldFByb3BlcnR5LFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5ub3RhdGlvbixcbiAgY3JlYXRlSGlnaGxpZ2h0LFxuICBkZXN0cm95SGlnaGxpZ2h0LFxuICBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbyxcbiAgZ2V0U2VsZWN0aW9uUmVjdCxcbiAgcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElELFxuICBzZXRTY3JvbGxNb2RlLFxufSBmcm9tIFwiLi9oaWdobGlnaHRcIjtcbmltcG9ydCB7IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yIH0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXREZWNvcmF0aW9ucywgcmVnaXN0ZXJUZW1wbGF0ZXMgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxuLy8gUHVibGljIEFQSSB1c2VkIGJ5IHRoZSBuYXZpZ2F0b3IuXG53aW5kb3cucmVhZGl1bSA9IHtcbiAgLy8gdXRpbHNcbiAgc2Nyb2xsVG9JZDogc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbjogc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9UZXh0OiBzY3JvbGxUb1RleHQsXG4gIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0OiBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9TdGFydDogc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9FbmQ6IHNjcm9sbFRvRW5kLFxuICBzZXRQcm9wZXJ0eTogc2V0UHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnR5OiByZW1vdmVQcm9wZXJ0eSxcblxuICAvLyBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbjogZ2V0Q3VycmVudFNlbGVjdGlvbixcblxuICAvLyBkZWNvcmF0aW9uXG4gIHJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlczogcmVnaXN0ZXJUZW1wbGF0ZXMsXG4gIGdldERlY29yYXRpb25zOiBnZXREZWNvcmF0aW9ucyxcblxuICAvLyBET01cbiAgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3I6IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yLFxufTtcblxuLy8gTGVnYWN5IGhpZ2hsaWdodHMgQVBJLlxud2luZG93LmNyZWF0ZUFubm90YXRpb24gPSBjcmVhdGVBbm5vdGF0aW9uO1xud2luZG93LmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbndpbmRvdy5kZXN0cm95SGlnaGxpZ2h0ID0gZGVzdHJveUhpZ2hsaWdodDtcbndpbmRvdy5nZXRDdXJyZW50U2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvO1xud2luZG93LmdldFNlbGVjdGlvblJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0O1xud2luZG93LnJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCA9IHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRDtcbndpbmRvdy5zZXRTY3JvbGxNb2RlID0gc2V0U2Nyb2xsTW9kZTtcbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIFNjcmlwdCB1c2VkIGZvciByZWZsb3dhYmxlIHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9pbmRleFwiO1xuXG53aW5kb3cucmVhZGl1bS5pc1JlZmxvd2FibGUgPSB0cnVlO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFNldHVwcyB0aGUgYHZpZXdwb3J0YCBtZXRhIHRhZyB0byBkaXNhYmxlIHpvb21pbmcuXG4gIGxldCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpO1xuICBtZXRhLnNldEF0dHJpYnV0ZShcbiAgICBcImNvbnRlbnRcIixcbiAgICBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCBzaHJpbmstdG8tZml0PW5vXCJcbiAgKTtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChtZXRhKTtcbn0pO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEVsZW1lbnQiLCJocmVmIiwicm9vdEVsZW1lbnQiLCJlbGVtZW50UmVsYXRpdmVQb3NpdGlvbiIsInNob3VsZElnbm9yZUVsZW1lbnQiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyIsImlzUmVmbG93YWJsZSIsIm1ldGEiLCJoZWFkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n return scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n\n return true;\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNBd2lCLEVBQUFBLElBQUksQ0FBQ3hpQixZQUFMLENBQ0UsU0FERixFQUVFLDhGQUZGO0FBSUFwRSxFQUFBQSxRQUFRLENBQUM2bUIsSUFBVCxDQUFjcmlCLFdBQWQsQ0FBMEJvaUIsSUFBMUI7QUFDRCxDQVREIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvbWF0Y2gtcXVvdGUuanM/ZGQ2YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlLmpzP2ZkZWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXMuanM/NDAwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3V0aWxzLmpzPzAyNWUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9yZWN0LmpzPzRkNWEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kZWNvcmF0b3IuanM/MWIwNCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2dlc3R1cmVzLmpzPzE0YzIiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9oaWdobGlnaHQuanM/OGRhOCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RvbS5qcz9jYmYwIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvc2VsZWN0aW9uLmpzPzU5YWMiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC5qcz9iNjM1Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXgtcmVmbG93YWJsZS5qcz8zOTI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmVjdChyZWN0KSB7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gd2luZG93LmlubmVySGVpZ2h0IC8gMjtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1N0YXJ0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1N0YXJ0XCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbmQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvRW5kXCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoICogZmFjdG9yXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0O1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSBsZWZ0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCAtIHBhZ2VXaWR0aDtcbiAgdmFyIG1pbk9mZnNldCA9IGlzUlRMKCkgPyAtKGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGgpIDogMDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWF4KG9mZnNldCwgbWluT2Zmc2V0KSk7XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgcmlnaHQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFJpZ2h0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCArIHBhZ2VXaWR0aDtcbiAgdmFyIG1heE9mZnNldCA9IGlzUlRMKCkgPyAwIDogZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWluKG9mZnNldCwgbWF4T2Zmc2V0KSk7XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGdpdmVuIGxlZnQgb2Zmc2V0LlxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBzY3JvbGwgcG9zaXRpb24gaXMgYWxyZWFkeSBjbG9zZSBlbm91Z2ggdG8gdGhlIGdpdmVuIG9mZnNldC5cbmZ1bmN0aW9uIHNjcm9sbFRvT2Zmc2V0KG9mZnNldCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb09mZnNldCBcIiArIG9mZnNldCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBcIkNhbGxlZCBzY3JvbGxUb09mZnNldCgpIHdpdGggc2Nyb2xsIG1vZGUgZW5hYmxlZC4gVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHBhZ2luYXRlZCBtb2RlLlwiO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICAvLyBJbiBzb21lIGNhc2UgdGhlIHNjcm9sbFggY2Fubm90IHJlYWNoIHRoZSBwb3NpdGlvbiByZXNwZWN0aW5nIHRvIGlubmVyV2lkdGhcbiAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50T2Zmc2V0IC0gb2Zmc2V0KSAvIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIGRpZmYgPiAwLjAxO1xufVxuXG4vLyBTbmFwIHRoZSBvZmZzZXQgdG8gdGhlIHNjcmVlbiB3aWR0aCAocGFnZSB3aWR0aCkuXG5mdW5jdGlvbiBzbmFwT2Zmc2V0KG9mZnNldCkge1xuICB2YXIgdmFsdWUgPSBvZmZzZXQgKyAoaXNSVEwoKSA/IC0xIDogMSk7XG4gIHJldHVybiB2YWx1ZSAtICh2YWx1ZSAlIHBhZ2VXaWR0aCk7XG59XG5cbi8vIFNuYXBzIHRoZSBjdXJyZW50IG9mZnNldCB0byB0aGUgcGFnZSB3aWR0aC5cbmZ1bmN0aW9uIHNuYXBDdXJyZW50T2Zmc2V0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzbmFwQ3VycmVudE9mZnNldFwiKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICAvLyBBZGRzIGhhbGYgYSBwYWdlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzbmFwIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgdmFyIGRlbHRhID0gZmFjdG9yICogKHBhZ2VXaWR0aCAvIDIpO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KGN1cnJlbnRPZmZzZXQgKyBkZWx0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUZyb21Mb2NhdG9yKGxvY2F0b3IpIHtcbiAgbGV0IHRleHQgPSBsb2NhdG9yLnRleHQ7XG4gIGlmICghdGV4dCB8fCAhdGV4dC5oaWdobGlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHZhciByb290O1xuICAgIGxldCBsb2NhdGlvbnMgPSBsb2NhdG9yLmxvY2F0aW9ucztcbiAgICBpZiAobG9jYXRpb25zICYmIGxvY2F0aW9ucy5jc3NTZWxlY3Rvcikge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb25zLmNzc1NlbGVjdG9yKTtcbiAgICB9XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDc3NTZWxlY3RvciB9IGZyb20gXCJjc3Mtc2VsZWN0b3ItZ2VuZXJhdG9yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcigpIHtcbiAgY29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBocmVmOiBcIiNcIixcbiAgICB0eXBlOiBcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiLFxuICAgIGxvY2F0aW9uczoge1xuICAgICAgY3NzU2VsZWN0b3I6IGdldENzc1NlbGVjdG9yKGVsZW1lbnQpLFxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiBlbGVtZW50LnRleHRDb250ZW50LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFbGVtZW50KHJvb3RFbGVtZW50KSB7XG4gIHZhciBmb3VuZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgY29uc3QgcG9zaXRpb24gPSBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihjaGlsZCwgdW5kZWZpbmVkKTtcbiAgICBpZiAocG9zaXRpb24gPT0gMCkge1xuICAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICBmb3VuZEVsZW1lbnQgPSBjaGlsZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgaWYgKCFmb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50KGZvdW5kRWxlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJvb3RFbGVtZW50O1xufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHJldHVybiB0cnVlO1xuXG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgIWRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGlmIChyZWN0LmxlZnQgPj0gcGFnZVdpZHRoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKHJlY3QubGVmdCA+PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIHJlZmxvd2FibGUgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzUmVmbG93YWJsZSA9IHRydWU7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgLy8gU2V0dXBzIHRoZSBgdmlld3BvcnRgIG1ldGEgdGFnIHRvIGRpc2FibGUgem9vbWluZy5cbiAgbGV0IG1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidmlld3BvcnRcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFxuICAgIFwiY29udGVudFwiLFxuICAgIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHNocmluay10by1maXQ9bm9cIlxuICApO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGEpO1xufSk7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwibG9jYXRpb25zIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IiLCJmaW5kRWxlbWVudCIsImhyZWYiLCJyb290RWxlbWVudCIsImVsZW1lbnRSZWxhdGl2ZVBvc2l0aW9uIiwic2hvdWxkSWdub3JlRWxlbWVudCIsImRvbVJlY3QiLCJyZWFkaXVtIiwiZWxTdHlsZSIsImRpc3BsYXkiLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzIiwiaXNSZWZsb3dhYmxlIiwibWV0YSIsImhlYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMxLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHLHlCQUF5QjtBQUMzSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxrQkFBa0IsZ0RBQWdEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0JBQWdCO0FBQy9DO0FBQ0EsMkJBQTJCLGlDQUFpQztBQUM1RDtBQUNBLHdCQUF3Qix1QkFBdUI7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBLHdCQUF3QjtBQUN4Qix1QkFBdUI7QUFDdkIseUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsaUVBQWlFO0FBQ2pFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQjtBQUN0QixtQ0FBbUMsT0FBTztBQUMxQywyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsR0FBRztBQUN6Qjs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DLHNCQUFzQjtBQUMxRDs7QUFFQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0IsOEJBQThCLFlBQVk7QUFDMUMsd0VBQXdFLFlBQVk7QUFDcEY7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QixVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQWlELG9CQUFvQixDQUF1SSxDQUFDLGtCQUFrQixZQUFZLE9BQU8sY0FBYyxhQUFhLGtCQUFrQixrQ0FBa0Msc0JBQXNCLGVBQWUsc0NBQXNDLEtBQUssdUlBQXVJLElBQUksK0JBQStCLHVCQUF1QixZQUFZLDRFQUE0RSxjQUFjLG9GQUFvRixTQUFTLFNBQVMscUJBQXFCLFlBQVksS0FBSyxtQkFBbUIsS0FBSyxtQkFBbUIsd0NBQXdDLFVBQVUsdUNBQXVDLE1BQU0sY0FBYyxXQUFXLCtCQUErQixZQUFZLFlBQVkscUNBQXFDLFFBQVEsMENBQTBDLGNBQWMsSUFBSSxJQUFJLGFBQWEsK0RBQStELHVCQUF1QixFQUFFLDhEQUE4RCw0RkFBNEYsZUFBZSx3Q0FBd0MsU0FBUyxHQUFHLFNBQVMsWUFBWSxhQUFhLGNBQWMsbUNBQW1DLEVBQUUsa0ZBQWtGLGdCQUFnQixhQUFhLCtFQUErRSxjQUFjLCtIQUErSCxxQ0FBcUMsc0NBQXNDLEVBQUUsUUFBUSxhQUFhLHdEQUF3RCxTQUFTLGVBQWUsNEdBQTRHLFNBQVMsR0FBRyxTQUFTLGtPQUFrTyxjQUFjLDJCQUEyQixjQUFjLHFEQUFxRCxjQUFjLHVDQUF1QyxjQUFjLDJFQUEyRSxtQkFBbUIseUJBQXlCLDRCQUE0QixnQkFBZ0Isc1RBQXNULHVCQUF1QixZQUFZLEVBQUUsdVZBQXVWLGNBQWMsb0RBQW9ELGlCQUFpQixtQkFBbUIsd0VBQXdFLGNBQWMsc0JBQXNCLGNBQWMsbUJBQW1CLDRCQUE0QixtQ0FBbUMsYUFBYSxxS0FBcUssdUJBQXVCLHdDQUF3QywrQ0FBK0Msb0JBQW9CLHNLQUFzSyxHQUFHLDRCQUE0QixrQkFBa0Isa0RBQWtELHdEQUF3RCxnQkFBZ0Isd0JBQXdCLDhDQUE4QyxJQUFJLFdBQVcsUUFBUSxLQUFLLFlBQVksNkJBQTZCLFNBQVMsZ0JBQWdCLDZCQUE2QixTQUFTLFVBQVUscUJBQXFCLGlCQUFpQiw4QkFBOEIsWUFBWSx3QkFBd0IsNklBQTZJLHNCQUFzQixpQ0FBaUMsWUFBWSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsWUFBWSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWSxXQUFXLEVBQUUsWUFBWSxjQUFjLDJDQUEyQyxnQ0FBZ0MsY0FBYyw0RkFBNEYsS0FBSyxJQUFJLGNBQWMsdUNBQXVDLEtBQUssbUJBQW1CLFlBQVksRUFBRSxvQ0FBb0MsY0FBYyxxQkFBcUIsTUFBTSxzREFBc0QsNkJBQTZCLElBQUksSUFBSSxTQUFTLGNBQWMsbUNBQW1DLGNBQWMsa0NBQWtDLDBDQUEwQyxjQUFjLG9DQUFvQyxNQUFNLG1GQUFtRixrQkFBa0IsRUFBRSxlQUFlLElBQUksSUFBSSxTQUFTLGlCQUFpQixzQ0FBc0MsR0FBRyxFQUFFLFdBQVcsZUFBZSxLQUFLLHdCQUF3QixpREFBaUQsU0FBUyxxQkFBcUIsaUJBQWlCLGtCQUFrQixlQUFlLFVBQVUsY0FBYyxLQUFLLGVBQWUsdUJBQXVCLHVCQUF1Qix5QkFBeUIsZ0JBQWdCLG1DQUFtQyx3RUFBd0UsRUFBRSxRQUFRLFdBQVcsaUJBQWlCLFFBQVEsc0lBQXNJLHdDQUF3QyxHQUFHLGlCQUFpQixFQUFFLDBDQUEwQyxJQUFJLFNBQVMscUJBQXFCLDJDQUEyQyxtQkFBbUIsbUJBQW1CLHVCQUF1QixtQkFBbUIsc0JBQXNCLG1CQUFtQix1QkFBdUIsb0JBQW9CLElBQUksdURBQXVELGNBQWMsc0VBQXNFLGVBQWUsRUFBRSxlQUFlLHlFQUF5RSxrQ0FBa0MsUUFBUSxZQUFZLHVCQUF1QixzQkFBc0IsNkJBQTZCLHdEQUF3RCxNQUFNLGlCQUFpQix3QkFBd0IsbUJBQW1CLE1BQU0sbUVBQW1FLFlBQVksYUFBYSxrQkFBa0Isb0JBQW9CLDBCQUEwQixXQUFXLHNCQUFzQixhQUFhLHFCQUFxQixpQkFBaUIsZ0NBQWdDLGVBQWUsTUFBTSxrRUFBa0UsaUJBQWlCLG1CQUFtQixNQUFNLHlCQUF5QixrQkFBa0IsOENBQThDLG9CQUFvQix5QkFBeUIsdUJBQXVCLG9CQUFvQiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz80ZWE4Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz83NGM5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/YTYyMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzAxZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NjY2MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NmY5MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz81YTAxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/NDI2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz81YWVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzYzOTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz84ZDcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/ZWFhNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzhlMDkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz8xMzA0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz82NzlhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz84NzVlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZTg1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2IzN2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzP2EwODciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9iODZjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz9iMjE4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzQyNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzFkZTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85OTYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz8wOGE4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZjM5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz9iYWU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzP2UzYTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz84OTU0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz80YmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz82OTRmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz9lZDNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzPzU5OGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9hODA4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz9kNGYxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/Y2E0MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz82ZDczIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzYyZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/NzhjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/NjBhNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz9lNWExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/OGYyNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NjEwMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/YzRkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzP2VkYzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzP2U3ODEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9hODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzP2NmYjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/Yjk1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz83NzM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzP2NlNzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/ZmQyYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTNiNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/NzQ3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz84YTM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2Q4MmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/OGRmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz9lMGI2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index 4432bbc075..867873518d 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -296,7 +296,9 @@ class EpubNavigatorFragment private constructor( if (resourcePager.currentItem != index) { pendingLocator = locator resourcePager.currentItem = index - } else if (resource is PageResource.EpubReflowable) { + } + + if (resource is PageResource.EpubReflowable) { currentFragment?.loadLocator(locator) } } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt index 2d2a952543..f87377482b 100755 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt @@ -316,26 +316,25 @@ class R2EpubPageFragment : Fragment() { return } - var progression = locator.locations.progression - if (progression != null) { - // We need to reverse the progression with RTL because the Web View - // always scrolls from left to right, no matter the reading direction. - progression = - if (webView.scrollMode || readingProgression == ReadingProgression.LTR) progression - else 1 - progression - - if (webView.scrollMode) { - webView.scrollToPosition(progression) - - } else { - // Figure out the target web view "page" from the requested - // progression. - var item = (progression * webView.numPages).roundToInt() - if (readingProgression == ReadingProgression.RTL && item > 0) { - item -= 1 - } - webView.setCurrentItem(item, false) + var progression = locator.locations.progression ?: 0.0 + + // We need to reverse the progression with RTL because the Web View + // always scrolls from left to right, no matter the reading direction. + progression = + if (webView.scrollMode || readingProgression == ReadingProgression.LTR) progression + else 1 - progression + + if (webView.scrollMode) { + webView.scrollToPosition(progression) + + } else { + // Figure out the target web view "page" from the requested + // progression. + var item = (progression * webView.numPages).roundToInt() + if (readingProgression == ReadingProgression.RTL && item > 0) { + item -= 1 } + webView.setCurrentItem(item, false) } } From 2c79cdd7190b82fbeda8ac7ef935f32b7263422f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 16 Jun 2022 17:31:54 +0200 Subject: [PATCH 20/59] Refactor the reader options menu and remove the old TTS implementation --- .../r2/testapp/reader/BaseReaderFragment.kt | 1 - .../r2/testapp/reader/EpubReaderFragment.kt | 58 +- .../r2/testapp/reader/ReaderViewModel.kt | 1 - .../r2/testapp/tts/ScreenReaderContract.kt | 37 -- .../r2/testapp/tts/ScreenReaderEngine.kt | 513 ------------------ .../r2/testapp/tts/ScreenReaderFragment.kt | 162 ------ test-app/src/main/res/menu/menu_epub.xml | 41 -- test-app/src/main/res/menu/menu_reader.xml | 30 +- 8 files changed, 35 insertions(+), 808 deletions(-) delete mode 100644 test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderContract.kt delete mode 100644 test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderEngine.kt delete mode 100644 test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderFragment.kt delete mode 100644 test-app/src/main/res/menu/menu_epub.xml diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt index 0eda739549..3fc4161695 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt @@ -20,7 +20,6 @@ import org.readium.r2.testapp.R * * Provides common menu items and saves last location on stop. */ -@OptIn(ExperimentalDecorator::class) abstract class BaseReaderFragment : Fragment() { protected abstract val model: ReaderViewModel diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt index eb202d1995..e838265175 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt @@ -37,8 +37,6 @@ import org.readium.r2.shared.publication.Publication import org.readium.r2.testapp.R import org.readium.r2.testapp.epub.UserSettings import org.readium.r2.testapp.search.SearchFragment -import org.readium.r2.testapp.tts.ScreenReaderContract -import org.readium.r2.testapp.tts.ScreenReaderFragment import org.readium.r2.testapp.utils.extensions.toDataUrl @OptIn(ExperimentalDecorator::class) @@ -49,12 +47,11 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene private lateinit var publication: Publication private lateinit var navigatorFragment: EpubNavigatorFragment - private lateinit var menuScreenReader: MenuItem + private lateinit var menuTts: MenuItem private lateinit var menuSearch: MenuItem lateinit var menuSearchView: SearchView private lateinit var userSettings: UserSettings - private var isScreenReaderVisible = false private var isSearchViewIconified = true // Accessibility @@ -64,7 +61,6 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene val activity = requireActivity() if (savedInstanceState != null) { - isScreenReaderVisible = savedInstanceState.getBoolean(IS_SCREEN_READER_VISIBLE_KEY) isSearchViewIconified = savedInstanceState.getBoolean(IS_SEARCH_VIEW_ICONIFIED) } @@ -100,17 +96,6 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene } ) - childFragmentManager.setFragmentResultListener( - ScreenReaderContract.REQUEST_KEY, - this, - FragmentResultListener { _, result -> - val locator = ScreenReaderContract.parseResult(result).locator - if (locator.href != navigator.currentLocator.value.href) { - navigator.go(locator) - } - } - ) - setHasOptionsMenu(true) super.onCreate(savedInstanceState) @@ -175,11 +160,14 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) { super.onCreateOptionsMenu(menu, menuInflater) - menuInflater.inflate(R.menu.menu_epub, menu) - menuScreenReader = menu.findItem(R.id.screen_reader) - menuSearch = menu.findItem(R.id.search) - menuSearchView = menuSearch.actionView as SearchView + menuTts = menu.findItem(R.id.tts).apply { + isVisible = true + } + menuSearch = menu.findItem(R.id.search).apply { + isVisible = true + menuSearchView = actionView as SearchView + } connectSearch() if (!isSearchViewIconified) menuSearch.expandActionView() @@ -187,7 +175,6 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - outState.putBoolean(IS_SCREEN_READER_VISIBLE_KEY, isScreenReaderVisible) outState.putBoolean(IS_SEARCH_VIEW_ICONIFIED, isSearchViewIconified) } @@ -256,14 +243,6 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene true } - R.id.screen_reader -> { - if (isScreenReaderVisible) { - closeScreenReaderFragment() - } else { - showScreenReaderFragment() - } - true - } else -> false } } @@ -277,29 +256,8 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene } } - private fun showScreenReaderFragment() { - menuScreenReader.title = resources.getString(R.string.epubactivity_read_aloud_stop) - isScreenReaderVisible = true - val arguments = ScreenReaderContract.createArguments(navigator.currentLocator.value) - childFragmentManager.commit { - add(R.id.fragment_reader_container, ScreenReaderFragment::class.java, arguments) - hide(navigatorFragment) - addToBackStack(null) - } - } - - private fun closeScreenReaderFragment() { - menuScreenReader.title = resources.getString(R.string.epubactivity_read_aloud_start) - isScreenReaderVisible = false - childFragmentManager.popBackStack() - } - companion object { - private const val SEARCH_FRAGMENT_TAG = "search" - - private const val IS_SCREEN_READER_VISIBLE_KEY = "isScreenReaderVisible" - private const val IS_SEARCH_VIEW_ICONIFIED = "isSearchViewIconified" } } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index ac557fa269..232d4ca1e3 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -213,7 +213,6 @@ class ReaderViewModel( object OpenOutlineRequested : Event() object OpenDrmManagementRequested : Event() object StartNewSearch : Event() - class OpeningError(val exception: Exception) : Event() class Failure(val error: UserException) : Event() } diff --git a/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderContract.kt b/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderContract.kt deleted file mode 100644 index 02a61cd84d..0000000000 --- a/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderContract.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2021 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.testapp.tts - -import android.os.Bundle -import org.readium.r2.shared.publication.Locator - -object ScreenReaderContract { - - private const val LOCATOR_KEY = "locator" - - val REQUEST_KEY: String = ScreenReaderContract::class.java.name - - data class Arguments(val locator: Locator) - - fun createArguments(locator: Locator): Bundle = - Bundle().apply { putParcelable(LOCATOR_KEY, locator) } - - fun parseArguments(result: Bundle): Arguments { - val locator = requireNotNull(result.getParcelable(LOCATOR_KEY)) - return Arguments(locator) - } - - data class Result(val locator: Locator) - - fun createResult(locator: Locator): Bundle = - Bundle().apply { putParcelable(LOCATOR_KEY, locator) } - - fun parseResult(result: Bundle): Result { - val destination = requireNotNull(result.getParcelable(LOCATOR_KEY)) - return Result(destination) - } -} \ No newline at end of file diff --git a/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderEngine.kt b/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderEngine.kt deleted file mode 100644 index b762c8caa9..0000000000 --- a/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderEngine.kt +++ /dev/null @@ -1,513 +0,0 @@ -/* - * Copyright 2021 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.testapp.tts - -import android.content.Context -import android.os.Handler -import android.os.Looper -import android.speech.tts.TextToSpeech -import android.speech.tts.UtteranceProgressListener -import android.widget.Toast -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withContext -import org.jsoup.Jsoup -import org.jsoup.select.Elements -import org.readium.r2.shared.publication.Link -import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.publication.toLocator -import org.readium.r2.testapp.BuildConfig.DEBUG -import timber.log.Timber -import java.io.IOException -import java.util.* - -/** - * ScreenReader - * - * Basic screen reader engine that uses Android's TextToSpeech - */ - -class ScreenReaderEngine(val context: Context, val publication: Publication) { - - interface Listener { - - fun onPlayTextChanged(text: String) - - fun onPlayStateChanged(playing: Boolean) - - fun onEndReached() - } - - private var listeners: MutableList = mutableListOf() - - fun addListener(listener: Listener) { - listeners.add(listener) - } - - fun removeListener(listener: Listener) { - listeners.remove(listener) - } - - // To avoid lifecycle issues, all `notify` functions will be called on the UI thread and - // dispatch events to every listener attached at this time. - private fun notifyPlayTextChanged(text: String) { - for (listener in listeners) { - listener.onPlayTextChanged(text) - } - } - - private fun notifyPlayStateChanged(playing: Boolean) { - for (listener in listeners) { - listener.onPlayStateChanged(playing) - } - } - - private fun notifyEndReached() { - for (listener in listeners) { - listener.onEndReached() - } - } - - private enum class PlaySentence(val value: Int) { - SAME(0), - NEXT(1), - PREV(-1) - } - - var isPaused: Boolean = false - - private var initialized = false - - private var pendingStartReadingResource = false - - private val items = publication.readingOrder - - private var resourceIndex = 0 - set(value) { - when { - value >= items.size -> { - field = items.size - 1 - currentUtterance = 0 - } - value < 0 -> { - field = 0 - currentUtterance = 0 - } - else -> { - field = value - } - } - } - - private var utterances = mutableListOf() - - var currentUtterance: Int = 0 - get() = if (field != -1) field else 0 - set(value) { - field = when { - value == -1 -> 0 - value == 0 -> 0 - value > utterances.size - 1 -> utterances.size - 1 - value < 0 -> 0 - else -> value - } - if (DEBUG) Timber.d("Current utterance index: $currentUtterance") - } - - private var textToSpeech: TextToSpeech = - TextToSpeech(context, - TextToSpeech.OnInitListener { status -> - initialized = (status != TextToSpeech.ERROR) - onPrepared() - }) - - private fun onPrepared() { - if (DEBUG) Timber.d("textToSpeech initialization status: $initialized") - if (!initialized) { - Toast.makeText( - context.applicationContext, "There was an error with the TTS initialization", - Toast.LENGTH_LONG - ).show() - } - - if (pendingStartReadingResource) { - pendingStartReadingResource = false - startReadingResource() - } - } - - val currentLocator: Locator - get() = requireNotNull(publication.locatorFromLink(publication.readingOrder[resourceIndex])) - - /** - * - Update the resource index. - * - Mark [textToSpeech] as reading. - * - Stop [textToSpeech] if it is reading. - * - Start [textToSpeech] setup. - * - * @param resource: Int - The index of the resource we want read. - */ - fun goTo(resource: Int) { - resourceIndex = resource - isPaused = false - - if (textToSpeech.isSpeaking) { - textToSpeech.stop() - } - startReadingResource() - } - - fun previousResource() { - resourceIndex-- - isPaused = false - - if (textToSpeech.isSpeaking) { - textToSpeech.stop() - } - startReadingResource() - } - - fun nextResource() { - resourceIndex++ - isPaused = false - - if (textToSpeech.isSpeaking) { - textToSpeech.stop() - } - startReadingResource() - } - - private fun setTTSLanguage() { - val language = textToSpeech.setLanguage(Locale(publication.metadata.languages.firstOrNull() ?: "")) - - if (language == TextToSpeech.LANG_MISSING_DATA || language == TextToSpeech.LANG_NOT_SUPPORTED) { - Toast.makeText( - context.applicationContext, "There was an error with the TTS language, switching " - + "to EN-US", Toast.LENGTH_LONG - ).show() - textToSpeech.language = Locale.US - } - } - - /** - * Inner function that sets the utterances variable. - * - * @return: Boolean - Whether utterances was able to be filled or not. - */ - private suspend fun setUtterances(): Boolean { - //Load resource as sentences - utterances = mutableListOf() - splitResourceAndAddToUtterances(items[resourceIndex]) - return utterances.size != 0 - } - - /** - * Call the core setup functions to set the language, the utterances and the callbacks. - * - * @return: Boolean - Whether executing the function was successful or not. - */ - private suspend fun configure(): Boolean { - setTTSLanguage() - - return withContext(Dispatchers.Default) { setUtterances() } - && flushUtterancesQueue() - && setTTSCallbacks() - } - - /** - * Set the TTS callbacks. - * - * @return: Boolean - Whether setting the callbacks was successful or not. - */ - private fun setTTSCallbacks(): Boolean { - val res = textToSpeech.setOnUtteranceProgressListener(object : UtteranceProgressListener() { - /** - * Called when an utterance "starts" as perceived by the caller. This will - * be soon before audio is played back in the case of a [TextToSpeech.speak] - * or before the first bytes of a file are written to the file system in the case - * of [TextToSpeech.synthesizeToFile]. - * - * @param utteranceId The utterance ID of the utterance. - */ - override fun onStart(utteranceId: String?) { - Handler(Looper.getMainLooper()).post { - currentUtterance = utteranceId!!.toInt() - notifyPlayTextChanged(utterances[currentUtterance]) - } - } - - /** - * Called when an utterance has successfully completed processing. - * All audio will have been played back by this point for audible output, and all - * output will have been written to disk for file synthesis requests. - * - * This request is guaranteed to be called after [.onStart]. - * - * @param utteranceId The utterance ID of the utterance. - */ - override fun onDone(utteranceId: String?) { - Handler(Looper.getMainLooper()).post { - if (utteranceId.equals((utterances.size - 1).toString())) { - if (items.size - 1 == resourceIndex) { - stopReading() - Handler(Looper.getMainLooper()).post { - notifyPlayStateChanged(false) - } - } else { - nextResource() - } - } - } - } - - /** - * Called when an error has occurred during processing. This can be called - * at any point in the synthesis process. Note that there might be calls - * to [.onStart] for specified utteranceId but there will never - * be a call to both [.onDone] and [.onError] for - * the same utterance. - * - * @param utteranceId The utterance ID of the utterance. - */ - override fun onError(utteranceId: String?) { - if (DEBUG) Timber - .e("Error saying: ${utterances[utteranceId!!.toInt()]}") - } - }) - - if (res == TextToSpeech.ERROR) { - if (DEBUG) Timber.e("TTS failed to set callbacks") - return false - } - - return true - } - - /** - * Stop reading and destroy the [textToSpeech]. - */ - fun shutdown() { - initialized = false - stopReading() - textToSpeech.shutdown() - } - - /** - * Set [isPaused] to false and add the [utterances] to the [textToSpeech] queue if [configure] worked - * successfully - */ - private fun startReadingResource() { - if (!initialized) { - pendingStartReadingResource = true - return - } - - isPaused = false - notifyPlayStateChanged(true) - - if (runBlocking { configure() }) { - if (currentUtterance >= utterances.size) { - if (DEBUG) Timber - .e("Invalid currentUtterance value: $currentUtterance . Expected less than $utterances.size") - currentUtterance = 0 - } - val index = currentUtterance - for (i in index until utterances.size) { - addToUtterancesQueue(utterances[i], i) - } - } else if ((items.size - 1) > resourceIndex) { - nextResource() - } else { - Handler(Looper.getMainLooper()).post { - notifyPlayStateChanged(false) - notifyEndReached() - } - } - } - - /** - * Stop text to speech and set [isPaused] to true so that subsequent playing of TTS will not automatically - * start playing. - */ - fun pauseReading() { - isPaused = true - textToSpeech.stop() - notifyPlayStateChanged(false) - } - - /** - * Stop text to speech and set [isPaused] to false so that subsequent playing of TTS will automatically - * start playing. - */ - fun stopReading() { - isPaused = false - textToSpeech.stop() - notifyPlayStateChanged(false) - } - - /** - * Allow to resume playing from the start of the current track while still being in a completely black box. - * - * @return Boolean - Whether resuming playing from the start of the current track was successful. - */ - fun resumeReading() { - playSentence(PlaySentence.SAME) - notifyPlayStateChanged(true) - } - - /** - * Allow to go the next sentence while still being in a completely black box. - * - * @return Boolean - Whether moving to the next sentence was successful. - */ - fun nextSentence(): Boolean { - return playSentence(PlaySentence.NEXT) - } - - /** - * Allow to go the previous sentence while still being in a completely black box. - * - * @return Boolean - Whether moving to the previous sentence was successful. - */ - fun previousSentence(): Boolean { - return playSentence(PlaySentence.PREV) - } - - /** - * The entry point for the hosting activity to adjust speech speed. Input is considered valid and within arbitrary - * set boundaries. The update is not instantaneous and [TextToSpeech] needs to be paused and resumed for it to work. - * - * Print an exception if [textToSpeech.setSpeechRate(speed)] fails. - * - * @param speed: Float - The speech speed we wish to use with Android's [TextToSpeech]. - */ - fun setSpeechSpeed(speed: Float, restart: Boolean): Boolean { - try { - if (textToSpeech.setSpeechRate(speed) == TextToSpeech.ERROR) - throw Exception("Failed to update speech speed") - - if (restart) { - pauseReading() - resumeReading() - } - } catch (e: Exception) { - if (DEBUG) Timber.e(e.toString()) - return false - } - - return true - } - - /** - * Reorder the text to speech queue (after flushing it) according to the current track and the argument value. - * - * @param playSentence: [PlaySentence] - The track to play (relative to the current track). - * - * @return Boolean - Whether the function was executed successfully. - */ - private fun playSentence(playSentence: PlaySentence): Boolean { - isPaused = false - val index = currentUtterance + playSentence.value - - if (index >= utterances.size || index < 0) - return false - - if (!flushUtterancesQueue()) - return false - - for (i in index until utterances.size) { - if (!addToUtterancesQueue(utterances[i], i)) { - return false - } - } - return true - } - - /** - * Helper function that manages adding an utterance to the Text To Speech for us. - * - * @return: Boolean - Whether adding the utterance to the Text To Speech queue was successful. - */ - private fun addToUtterancesQueue(utterance: String, index: Int): Boolean { - if (textToSpeech.speak(utterance, TextToSpeech.QUEUE_ADD, null, index.toString()) == TextToSpeech.ERROR) { - if (DEBUG) Timber - .e("Error while adding utterance: $utterance to the TTS queue") - return false - } - - return true - } - - /** - * Helper function that manages flushing the Text To Speech for us. - * - * @return: Boolean - Whether flushing the Text To Speech queue was successful. - */ - private fun flushUtterancesQueue(): Boolean { - if (textToSpeech.speak("", TextToSpeech.QUEUE_FLUSH, null, null) == TextToSpeech.ERROR) { - if (DEBUG) Timber.e("Error while flushing TTS queue.") - return false - } - - return true - } - - /** - * Split all the paragraphs of the resource into sentences. The sentences are then added to the [utterances] list. - * - * @param elements: Elements - The list of elements (paragraphs) - */ - private fun splitParagraphAndAddToUtterances(elements: Elements) { - val elementSize = elements.size - var index = 0 - for (i in 0 until elementSize) { - - val element = elements.eq(i) - - if (element.`is`("p") || element.`is`("h1") || element.`is`("h2") - || element.`is`("h3") || element.`is`("div") || element.`is`("span") - ) { - - //val sentences = element.text().split(Regex("(?<=\\. |(,{1}))")) - val sentences = element.text().split(Regex("(?<=\\.)")) - - for (sentence in sentences) { - var sentenceCleaned = sentence - if (sentenceCleaned.isNotEmpty()) { - if (sentenceCleaned.first() == ' ') sentenceCleaned = sentenceCleaned.removeRange(0, 1) - if (sentenceCleaned.last() == ' ') sentenceCleaned = - sentenceCleaned.removeRange(sentenceCleaned.length - 1, sentenceCleaned.length) - utterances.add(sentenceCleaned) - index++ - } - } - } - } - } - - /** - * Fetch a resource and get short sentences from it. - * - * @param link: String - A link to the html resource to fetch, containing the text to be voiced. - * - * @return: Boolean - Whether the function executed successfully. - */ - private suspend fun splitResourceAndAddToUtterances(link: Link): Boolean { - return try { - val resource = publication.get(link).readAsString(charset = null).getOrThrow() - val document = Jsoup.parse(resource) - val elements = document.select("*") - splitParagraphAndAddToUtterances(elements) - true - - } catch (e: IOException) { - if (DEBUG) Timber.e(e.toString()) - false - } - } -} diff --git a/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderFragment.kt deleted file mode 100644 index 4bffed970f..0000000000 --- a/test-app/src/main/java/org/readium/r2/testapp/tts/ScreenReaderFragment.kt +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright 2021 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.testapp.tts - -import android.content.Context -import android.content.SharedPreferences -import android.os.Bundle -import android.util.TypedValue -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.Toast -import androidx.core.widget.TextViewCompat -import androidx.fragment.app.Fragment -import androidx.fragment.app.setFragmentResult -import androidx.lifecycle.ViewModelProvider -import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.publication.indexOfFirstWithHref -import org.readium.r2.testapp.R -import org.readium.r2.testapp.databinding.FragmentScreenReaderBinding -import org.readium.r2.testapp.reader.ReaderViewModel - -class ScreenReaderFragment : Fragment(), ScreenReaderEngine.Listener { - - private lateinit var preferences: SharedPreferences - - private lateinit var publication: Publication - - private lateinit var screenReader: ScreenReaderEngine - - private var _binding: FragmentScreenReaderBinding? = null - private val binding get() = _binding!! - - // A reference to the listener must be kept in order to prevent garbage collection - // See https://developer.android.com/reference/android/content/SharedPreferences#registerOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener) - private val preferencesListener = SharedPreferences.OnSharedPreferenceChangeListener { _, key -> - if (key == "reader_TTS_speed") { - updateScreenReaderSpeed(restart = true) - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val activity = requireActivity() - - preferences = activity.getSharedPreferences("org.readium.r2.settings", Context.MODE_PRIVATE) - - ViewModelProvider(activity).get(ReaderViewModel::class.java).let { - publication = it.publication - } - - screenReader = ScreenReaderEngine(activity, publication) - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - _binding = FragmentScreenReaderBinding.inflate(inflater, container, false) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - screenReader.addListener(this) - - binding.titleView.text = publication.metadata.title - - binding.playPause.setOnClickListener { - if (screenReader.isPaused) { - screenReader.resumeReading() - } else { - screenReader.pauseReading() - } - } - binding.fastForward.setOnClickListener { - if (!screenReader.nextSentence()) { - binding.nextChapter.callOnClick() - } - } - binding.nextChapter.setOnClickListener { - screenReader.nextResource() - } - - binding.fastBack.setOnClickListener { - if (!screenReader.previousSentence()) { - binding.prevChapter.callOnClick() - } - } - binding.prevChapter.setOnClickListener { - screenReader.previousResource() - } - - updateScreenReaderSpeed(restart = false) - preferences.registerOnSharedPreferenceChangeListener(preferencesListener) - - val initialLocator = ScreenReaderContract.parseArguments(requireArguments()).locator - val resourceIndex = requireNotNull(publication.readingOrder.indexOfFirstWithHref(initialLocator.href)) - screenReader.goTo(resourceIndex) - } - - override fun onPlayStateChanged(playing: Boolean) { - if (playing) { - binding.playPause.setImageResource(R.drawable.ic_baseline_pause_24) - } else { - binding.playPause.setImageResource(R.drawable.ic_baseline_play_arrow_24) - } - } - - override fun onEndReached() { - Toast.makeText(requireActivity().applicationContext, "No further chapter contains text to read", Toast.LENGTH_LONG).show() - } - - override fun onPlayTextChanged(text: String) { - binding.ttsTextView.text = text - TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(binding.ttsTextView, 1, 30, 1, TypedValue.COMPLEX_UNIT_DIP) - } - - override fun onDestroyView() { - screenReader.removeListener(this) - _binding = null - super.onDestroyView() - } - - override fun onDestroy() { - super.onDestroy() - try { - screenReader.shutdown() - } catch (e: Exception) { - } - } - - override fun onPause() { - super.onPause() - screenReader.pauseReading() - } - - override fun onStop() { - super.onStop() - screenReader.stopReading() - val result = ScreenReaderContract.createResult(screenReader.currentLocator) - setFragmentResult(ScreenReaderContract.REQUEST_KEY, result) - } - - private fun updateScreenReaderSpeed(restart: Boolean) { - // Get user settings speed when opening the screen reader. Get a neutral percentage (corresponding to - // the normal speech speed) if no user settings exist. - val speed = preferences.getInt( - "reader_TTS_speed", - (2.75 * 3.toDouble() / 11.toDouble() * 100).toInt() - ) - // Convert percentage to a float value between 0.25 and 3.0 - val ttsRate = 0.25.toFloat() + (speed.toFloat() / 100.toFloat()) * 2.75.toFloat() - - screenReader.setSpeechSpeed(ttsRate, restart) - } -} diff --git a/test-app/src/main/res/menu/menu_epub.xml b/test-app/src/main/res/menu/menu_epub.xml deleted file mode 100644 index a323d6f9bd..0000000000 --- a/test-app/src/main/res/menu/menu_epub.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/test-app/src/main/res/menu/menu_reader.xml b/test-app/src/main/res/menu/menu_reader.xml index fe7ad967f9..2ba6c014ad 100644 --- a/test-app/src/main/res/menu/menu_reader.xml +++ b/test-app/src/main/res/menu/menu_reader.xml @@ -5,19 +5,44 @@ xmlns:tools="http://schemas.android.com/tools" tools:context='org.readium.r2.testapp.reader.BaseReaderFragment'> + + + + + + + @@ -26,7 +51,6 @@ android:id="@+id/toc" android:icon="@drawable/ic_outline_menu_24" android:title="@string/epubactivity_book_nav_options" - android:orderInCategory="100" app:showAsAction="always" tools:ignore="AlwaysShowAction"/> From 1f9504d23723564e544a262af8fecb97b0e9b3f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 20 Jun 2022 18:25:34 +0200 Subject: [PATCH 21/59] Backport changes from Swift --- readium/navigator-tts/build.gradle.kts | 68 ---- .../src/main/AndroidManifest.xml | 10 - .../navigator/tts/TextToSpeechController.kt | 249 ------------ .../r2/navigator/tts/AndroidTtsEngine.kt | 168 ++++++++ .../readium/r2/navigator/tts/TtsController.kt | 265 ++++++++++++ .../org/readium/r2/navigator/tts/TtsEngine.kt | 41 ++ .../main/java/org/readium/r2/shared/OptIn.kt | 8 + .../r2/shared/publication/Publication.kt | 6 +- .../content/ContentIterationService.kt | 54 +++ .../services/content/ContentIterator.kt | 378 ++---------------- .../content/ContentIteratorService.kt | 180 --------- .../content/HtmlResourceContentIterator.kt | 266 ++++++++++++ .../content/PublicationContentIterator.kt | 116 ++++++ .../publication/services/content/Tokenizer.kt | 134 ------- .../shared/util/tokenizer/ContentTokenizer.kt | 66 +++ .../r2/shared/util/tokenizer/TextTokenizer.kt | 98 +++++ .../r2/shared/util/tokenizer/Tokenizer.kt | 15 + .../r2/streamer/parser/epub/EpubParser.kt | 7 +- settings.gradle.kts | 1 - test-app/build.gradle.kts | 1 - 20 files changed, 1144 insertions(+), 987 deletions(-) delete mode 100644 readium/navigator-tts/build.gradle.kts delete mode 100644 readium/navigator-tts/src/main/AndroidManifest.xml delete mode 100644 readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt create mode 100644 readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt create mode 100644 readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt create mode 100644 readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt delete mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIteratorService.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/PublicationContentIterator.kt delete mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/Tokenizer.kt diff --git a/readium/navigator-tts/build.gradle.kts b/readium/navigator-tts/build.gradle.kts deleted file mode 100644 index f093710450..0000000000 --- a/readium/navigator-tts/build.gradle.kts +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -plugins { - id("com.android.library") - id("kotlin-android") - id("kotlin-parcelize") - id("maven-publish") - id("org.jetbrains.dokka") -} - -android { - resourcePrefix = "readium_" - - compileSdk = 32 - - defaultConfig { - minSdk = 21 - targetSdk = 32 - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = "1.8" - freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn" - } - buildTypes { - getByName("release") { - isMinifyEnabled = false - proguardFiles(getDefaultProguardFile("proguard-android.txt")) - } - } - buildFeatures { - viewBinding = true - } -} - -afterEvaluate { - publishing { - publications { - create("release") { - from(components.getByName("release")) - groupId = "com.github.readium" - artifactId = "readium-navigator-tts" - artifact(tasks.findByName("sourcesJar")) - artifact(tasks.findByName("javadocsJar")) - } - } - } -} - -dependencies { - implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) - - api(project(":readium:shared")) - api(project(":readium:navigator")) - - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0") - - implementation("com.jakewharton.timber:timber:5.0.1") -} diff --git a/readium/navigator-tts/src/main/AndroidManifest.xml b/readium/navigator-tts/src/main/AndroidManifest.xml deleted file mode 100644 index 267f6c9597..0000000000 --- a/readium/navigator-tts/src/main/AndroidManifest.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - diff --git a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt b/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt deleted file mode 100644 index 947c674905..0000000000 --- a/readium/navigator-tts/src/main/java/org/readium/navigator/tts/TextToSpeechController.kt +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.navigator.tts - -import android.content.Context -import android.speech.tts.TextToSpeech -import android.speech.tts.TextToSpeech.* -import android.speech.tts.UtteranceProgressListener -import android.speech.tts.Voice -import kotlinx.coroutines.* -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach -import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.publication.services.content.* -import org.readium.r2.shared.util.SuspendingCloseable -import org.readium.r2.shared.util.Try -import org.readium.r2.shared.util.getOrElse -import java.util.* - -sealed class TextToSpeechException private constructor( - override val message: String, - cause: Throwable? = null -) : Exception(message, cause) { - class IteratorError(message: String, cause: Exception) : TextToSpeechException(message, cause) - class LanguageNotSupported(val locale: Locale) : TextToSpeechException("The language ${locale.toLanguageTag()} is not supported by the TTS engine") - class LanguageMissingData(val locale: Locale) : TextToSpeechException("The language ${locale.toLanguageTag()} requires additional files by the TTS engine") -} - -class TextToSpeechController( - val context: Context, - val publication: Publication, - val listener: Listener, - config: Configuration = Configuration(), -) : SuspendingCloseable { - data class Configuration( - val defaultLocale: Locale? = null, - val rate: Double = 1.0 - ) - - interface Listener { - fun onSpeakUtterrance(text: String, locale: Locale, locator: Locator) {} - fun onSpeakUtteranceRange(locator: Locator) {} - fun onSpeakingChange(isSpeaking: Boolean) {} - fun onError(exception: TextToSpeechException) - } - - private val scope: CoroutineScope = MainScope() - - private var textIterator: ContentIterator? = null - - private val ttsListener = TtsListener() - private val tts: TextToSpeech = TextToSpeech(context.applicationContext, ttsListener).apply { - setOnUtteranceProgressListener(ttsListener) - setSpeechRate(config.rate.toFloat()) - } - - var config: Configuration = config - set(value) { - field = value - tts.setSpeechRate(value.rate.toFloat()) - } - - val defaultLocale: Locale get() = - config.defaultLocale - ?: publication.metadata.locale - ?: tts.defaultVoice.locale - - var voice: Voice - get() = tts.voice - set(value) { tts.voice = value } - - val voices: Map> get() = - tts.voices.groupBy(Voice::getLocale) - - val defaultVoice: Voice - get() = tts.defaultVoice - - val _isSpeaking = MutableStateFlow(false) - val isSpeaking: StateFlow = _isSpeaking.asStateFlow() - - fun play(start: Locator? = null) = scope.launch { - val span = currentSpan - _isSpeaking.value = true - if (span != null) { - if (playSpan(span)) { - return@launch - } - } else { - initializeIterator(start) - } - next() - } - - fun pause() { - _isSpeaking.value = false - tts.stop() - } - - fun playPause() { - if (isSpeaking.value) pause() - else play() - } - - override suspend fun close() { - pause() - textIterator?.close() - scope.cancel() - tts.shutdown() - } - - private suspend fun initializeIterator(start: Locator? = null) { - textIterator = PublicationContentIterator(publication, start = start, resourceContentIteratorFactories = listOf(HtmlResourceContentIterator.createFactory())) - } - - private var count = 0 - private var currentSpan: Content.Text.Span? = null - private var spans = mutableListOf() - - private fun next() { - scope.launch { - if (!playNextUtterance()) { - _isSpeaking.value = false - } - } - } - - private suspend fun playNextUtterance(): Boolean { - while (!initialized) { - delay(100) - } - val span = spans.removeFirstOrNull() - currentSpan = span - if (span != null) { - if (playSpan(span)) { - return true - } else { - return playNextUtterance() - } - - } else { - val iter = textIterator ?: return false - - val text = iter.next().getOrElse { - listener.onError( - TextToSpeechException.IteratorError( - "Failed to create the text iterator", - it - ) - ) - null - } ?: return false - - if (text is Content.Text) { - spans = text.spans - .flatMap { tokenize(it).getOrThrow() } - .toMutableList() - } - return playNextUtterance() - } - } - - private fun playSpan(span: Content.Text.Span?): Boolean { - span ?: return false - if (!span.text.any { it.isLetterOrDigit() }) { - return false - } - - val locale = span.language?.let { Locale.forLanguageTag(it.replace("_", "-")) } - ?: defaultLocale - - val localeResult = tts.setLanguage(locale) - - if (localeResult < LANG_AVAILABLE) { - if (localeResult == LANG_MISSING_DATA) { - listener.onError(TextToSpeechException.LanguageMissingData(locale)) - } else { - listener.onError(TextToSpeechException.LanguageNotSupported(locale)) - } - return false - } - - tts.speak(span.text, QUEUE_FLUSH, null, count++.toString()) - listener.onSpeakUtterrance(span.text, locale, span.locator) - return true - } - - private suspend fun tokenize(span: Content.Text.Span): Try, Exception> = - unitTextContentTokenizer(unit = TextUnit.Sentence, locale = span.locale).tokenize(span.text) - .map { - it.map { text -> - Content.Text.Span( - locator = span.locator.copy(text = text), - text = text.highlight ?: "", - language = span.language - ) - } - } - - fun skipForward() { - next() - } - - fun skipBackward() { - } - - private var initialized = false - - init { - isSpeaking - .onEach { listener.onSpeakingChange(it) } - .launchIn(scope) - } - - private inner class TtsListener : OnInitListener, UtteranceProgressListener() { - override fun onInit(status: Int) { - initialized = true - } - - override fun onStart(utteranceId: String?) { - } - - override fun onDone(utteranceId: String?) { - next() - } - - override fun onError(utteranceId: String?) { - next() - } - - override fun onError(utteranceId: String?, errorCode: Int) { - // FIXME: Report error - next() - } - - override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { - var locator = currentSpan?.locator ?: return - locator = locator.copy(text = locator.text.substring(start, end)) - listener.onSpeakUtteranceRange(locator) - } - } -} diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt new file mode 100644 index 0000000000..b8bd080f56 --- /dev/null +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -0,0 +1,168 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.navigator.tts + +import android.content.Context +import android.speech.tts.TextToSpeech +import android.speech.tts.UtteranceProgressListener +import kotlinx.coroutines.CompletableDeferred +import org.readium.r2.shared.util.MapWithDefaultCompanion +import java.util.* + +class AndroidTtsEngine( + context: Context, + config: TtsEngine.Configuration = TtsEngine.Configuration(), + private val listener: TtsEngine.Listener +) : TtsEngine { + + sealed class Exception private constructor( + override val message: String, + cause: Throwable? = null + ) : kotlin.Exception(message, cause) { + object InitializationFailed : Exception("The Android TTS engine failed to initialize") + class LanguageNotSupported(val locale: Locale) : Exception("The language ${locale.toLanguageTag()} is not supported by the Android TTS engine") + class LanguageMissingData(val locale: Locale) : Exception("The language ${locale.toLanguageTag()} requires additional files by the Android TTS engine") + class UtteranceError(val utterance: TtsEngine.Utterance, val error: EngineError) : Exception("Failed to play the utterance: $error") + } + + /** + * Android's TTS error code. + * See https://developer.android.com/reference/android/speech/tts/TextToSpeech#ERROR + */ + enum class EngineError(val code: Int) { + /** Denotes a generic operation failure. */ + Unknown(-1), + /** Denotes a failure caused by an invalid request. */ + InvalidRequest(-8), + /** Denotes a failure caused by a network connectivity problems. */ + Network(-6), + /** Denotes a failure caused by network timeout. */ + NetworkTimeout(-7), + /** Denotes a failure caused by an unfinished download of the voice data. */ + NotInstalledYet(-9), + /** Denotes a failure related to the output (audio device or a file). */ + Output(-5), + /** Denotes a failure of a TTS service. */ + Service(-4), + /** Denotes a failure of a TTS engine to synthesize the given input. */ + Synthesis(-3); + + companion object : MapWithDefaultCompanion(values(), EngineError::code, Unknown) + } + + override var config: TtsEngine.Configuration = config + set(value) { + field = value + engine.setConfig(value) + } + + override suspend fun speak(utterance: TtsEngine.Utterance) { + initialization.await() + + val locale = utterance.language + ?: config.defaultLocale + ?: engine.voice.locale + + val localeResult = engine.setLanguage(locale) + if (localeResult < TextToSpeech.LANG_AVAILABLE) { + val error = + if (localeResult == TextToSpeech.LANG_MISSING_DATA) + Exception.LanguageMissingData(locale) + else + Exception.LanguageNotSupported(locale) + + listener.onError(error) + throw error + } + + val id = nextId() + utterances[id] = utterance + engine.speak(utterance.text, TextToSpeech.QUEUE_FLUSH, null, id) + } + + override suspend fun stop() { + initialization.await() + engine.stop() + } + + override suspend fun close() { + stop() + engine.shutdown() + } + + private val utterances = mutableMapOf() + + private var idCount: Int = 0 + + private fun nextId(): String = + idCount++.toString() + + // Engine + + private val initialization = CompletableDeferred(Unit) + private val engineListener = EngineListener() + + private val engine = TextToSpeech(context, engineListener).apply { + setOnUtteranceProgressListener(engineListener) + setConfig(config) + } + + private fun TextToSpeech.setConfig(config: TtsEngine.Configuration) { + setSpeechRate(config.rate.toFloat()) + } + + private inner class EngineListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { + override fun onInit(status: Int) { + if (status == TextToSpeech.SUCCESS) { + initialization.complete(Unit) + } else { + listener.onError(Exception.InitializationFailed) + } + } + + override fun onStart(utteranceId: String?) {} + + override fun onDone(utteranceId: String?) { + utterances.remove(utteranceId) + if (utterances.isEmpty()) { + listener.onStop() + } + } + + @Deprecated("Deprecated in the interface") + override fun onError(utteranceId: String?) {} + + override fun onError(utteranceId: String?, errorCode: Int) { + val utterance = utterances.remove(utteranceId) ?: return + listener.onError(Exception.UtteranceError(utterance, EngineError.getOrDefault(errorCode))) + } + + override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { + val utterance = utterances[utteranceId] ?: return + + listener.onSpeakRangeAt( + locator = utterance.locator.copy( + text = utterance.locator.text.substring(start, end) + ), + utterance = utterance + ) + } + } +} + +// var voice: Voice +// get() = tts.voice +// set(value) { tts.voice = value } +// +// val voices: Map> get() = +// tts.voices.groupBy(Voice::getLocale) +// +// val defaultVoice: Voice +// get() = tts.defaultVoice +// +// val locale = span.language?.let { Locale.forLanguageTag(it.replace("_", "-")) } +// ?: defaultLocale diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt new file mode 100644 index 0000000000..bb8433a972 --- /dev/null +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -0,0 +1,265 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.navigator.tts + +import android.content.Context +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.services.content.Content +import org.readium.r2.shared.publication.services.content.Content.Data +import org.readium.r2.shared.publication.services.content.ContentIterator +import org.readium.r2.shared.publication.services.content.contentIterator +import org.readium.r2.shared.publication.services.content.isContentIterable +import org.readium.r2.shared.util.SuspendingCloseable +import org.readium.r2.shared.util.tokenizer.ContentTokenizer +import org.readium.r2.shared.util.tokenizer.TextContentTokenizer +import org.readium.r2.shared.util.tokenizer.TextUnit +import java.util.* + +@ExperimentalReadiumApi +typealias TtsTokenizerFactory = (defaultLocale: Locale?) -> ContentTokenizer + +@ExperimentalReadiumApi +class TtsController( + private val publication: Publication, + engineFactory: TtsEngineFactory, + private val tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory +) : SuspendingCloseable { + + constructor( + publication: Publication, + context: Context, + config: TtsEngine.Configuration = TtsEngine.Configuration( + defaultLocale = publication.metadata.locale + ), + tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory + ) : this( + publication, + engineFactory = { listener -> AndroidTtsEngine(context, config, listener) }, + tokenizerFactory = tokenizerFactory + ) + + companion object { + val defaultTokenizerFactory: TtsTokenizerFactory = { locale -> TextContentTokenizer(unit = TextUnit.Sentence, defaultLocale = locale) } + + fun canSpeak(publication: Publication): Boolean = + publication.isContentIterable + } + + sealed class State { + object Idle : State() + class Playing(val utterance: TtsEngine.Utterance, val range: Locator? = null) : State() + class Failure(val error: Exception) : State() + } + + private val _state = MutableStateFlow(State.Idle) + val state: StateFlow = _state.asStateFlow() + + private val engine: TtsEngine = engineFactory(EngineListener()) + private val scope = MainScope() + + init { + require(canSpeak(publication)) { "The publication cannot be spoken with TtsController, as its content is not iterable" } + } + + override suspend fun close() { + engine.close() + scope.cancel() + } + + var config: TtsEngine.Configuration + get() = engine.config + set(value) { engine.config = value } + + suspend fun playPause(start: Locator? = null) { + when (state.value) { + is State.Failure -> return + State.Idle -> play(start) + is State.Playing -> pause() + } + } + + suspend fun play(start: Locator? = null) { + if (start != null) { + speakingUtteranceIndex = null + utterances = emptyList() + contentIterator = publication.contentIterator(start) + } + + if (contentIterator == null) { + contentIterator = publication.contentIterator(null) + } + + val utterance = currentUtterance + if (utterance != null) { + play(utterance) + } else { + next() + } + } + + suspend fun pause() { + _state.value = State.Idle + engine.stop() + } + + suspend fun previous() { + playNextUtterance(Direction.Backward) + } + + suspend fun next() { + playNextUtterance(Direction.Forward) + } + + private enum class Direction { + Forward, Backward; + } + + @OptIn(DelicateCoroutinesApi::class) + private var contentIterator: ContentIterator? = null + set(value) { + contentIterator?.let { previous -> + scope.launch { previous.close() } + } + field = value + } + + private var speakingUtteranceIndex: Int? = null + + private var utterances = emptyList() + + private val currentUtterance: TtsEngine.Utterance? get() = + speakingUtteranceIndex?.let { utterances[it] } + + private suspend fun playNextUtterance(direction: Direction) { + try { + val utterance = nextUtterance(direction) + if (utterance != null) { + play(utterance) + } else { + _state.value = State.Idle + } + } catch (e: Exception) { + _state.value = State.Failure(e) + } + } + + private suspend fun play(utterance: TtsEngine.Utterance) { + _state.value = State.Playing(utterance) + engine.speak(utterance) + } + + private suspend fun nextUtterance(direction: Direction): TtsEngine.Utterance? { + val nextIndex = nextUtteranceIndex(direction) + if (nextIndex == null) { + return if (loadNextUtterances(direction)) { + nextUtterance(direction) + } else { + null + } + } + + speakingUtteranceIndex = nextIndex + return utterances[nextIndex] + } + + private fun nextUtteranceIndex(direction: Direction): Int? { + val index = when (direction) { + Direction.Forward -> (speakingUtteranceIndex ?: -1) + 1 + Direction.Backward -> (speakingUtteranceIndex ?: utterances.size) - 1 + } + + return index + .takeIf { utterances.indices.contains(it) } + } + + private suspend fun loadNextUtterances(direction: Direction): Boolean { + val content = when (direction) { + Direction.Forward -> contentIterator?.next() + Direction.Backward -> contentIterator?.previous() + } + + utterances = content + ?.tokenize() + ?.flatMap { it.utterances() } + ?: emptyList() + + speakingUtteranceIndex = null + + return utterances.isNotEmpty() + } + + private fun Content.tokenize(): List = + tokenizerFactory(config.defaultLocale) + .tokenize(this) + + private fun Content.utterances(): List { + fun utterance(text: String, locator: Locator, language: Locale? = null): TtsEngine.Utterance? { + if (!text.any { it.isLetterOrDigit() }) + return null + + return TtsEngine.Utterance( + text = text, + locator = locator, + language = language + ) + } + + return when (val data = data) { + is Data.Image -> { + listOfNotNull( + data.description + ?.takeIf { it.isNotBlank() } + ?.let { utterance(text = it, locator = locator) } + ) + } + + is Data.Text -> { + data.spans.mapNotNull { span -> + utterance( + text = span.text, + locator = span.locator, + language = span.locale + ) + } + } + + else -> emptyList() + } + } + + private inner class EngineListener : TtsEngine.Listener { + + override fun onSpeakRangeAt(locator: Locator, utterance: TtsEngine.Utterance) { + scope.launch { + _state.value = State.Playing(utterance, range = locator) + } + } + + override fun onStop() { + scope.launch { + if (state.value is State.Playing) { + next() + } + } + } + + override fun onError(error: Exception) { + scope.launch { + _state.value = State.Idle + } + } + } +} \ No newline at end of file diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt new file mode 100644 index 0000000000..3f28bc1378 --- /dev/null +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.navigator.tts + +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.util.SuspendingCloseable +import java.util.Locale + +typealias TtsEngineFactory = (listener: TtsEngine.Listener) -> TtsEngine + +interface TtsEngine : SuspendingCloseable { + + interface Listener { + fun onSpeakRangeAt(locator: Locator, utterance: Utterance) + fun onStop() + fun onError(error: Exception) + } + + data class Configuration( + val defaultLocale: Locale? = null, + val rate: Double = 1.0, + ) + + data class Utterance( + val text: String, + val locator: Locator, + val language: Locale? + ) + + var config: Configuration + + // Can throw. + suspend fun speak(utterance: Utterance) + + // Can throw. + suspend fun stop() +} \ No newline at end of file diff --git a/readium/shared/src/main/java/org/readium/r2/shared/OptIn.kt b/readium/shared/src/main/java/org/readium/r2/shared/OptIn.kt index 5f71d18437..f413e0d161 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/OptIn.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/OptIn.kt @@ -17,6 +17,14 @@ package org.readium.r2.shared @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPEALIAS, AnnotationTarget.PROPERTY) annotation class InternalReadiumApi +@RequiresOptIn( + level = RequiresOptIn.Level.WARNING, + message = "This API is still experimental. It might change in the future without notice." +) +@Retention(AnnotationRetention.BINARY) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPEALIAS, AnnotationTarget.PROPERTY) +annotation class ExperimentalReadiumApi + @RequiresOptIn( level = RequiresOptIn.Level.WARNING, message = "Support for PDF is still experimental. The API may be changed in the future without notice." diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt index d4e77142fd..6c47c97302 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt @@ -29,7 +29,7 @@ import org.readium.r2.shared.fetcher.Resource import org.readium.r2.shared.publication.epub.listOfAudioClips import org.readium.r2.shared.publication.epub.listOfVideoClips import org.readium.r2.shared.publication.services.* -import org.readium.r2.shared.publication.services.content.TextIteratorService +import org.readium.r2.shared.publication.services.content.ContentIterationService import org.readium.r2.shared.publication.services.search.SearchService import org.readium.r2.shared.util.Ref import org.readium.r2.shared.util.mediatype.MediaType @@ -375,19 +375,19 @@ class Publication( @OptIn(Search::class) @Suppress("UNCHECKED_CAST") constructor( + contentIteration: ServiceFactory? = null, contentProtection: ServiceFactory? = null, cover: ServiceFactory? = null, locator: ServiceFactory? = { DefaultLocatorService(it.manifest.readingOrder, it.publication) }, positions: ServiceFactory? = null, search: ServiceFactory? = null, - textIterator: ServiceFactory? = null, ) : this(mapOf( + ContentIterationService::class.java.simpleName to contentIteration, ContentProtectionService::class.java.simpleName to contentProtection, CoverService::class.java.simpleName to cover, LocatorService::class.java.simpleName to locator, PositionsService::class.java.simpleName to positions, SearchService::class.java.simpleName to search, - TextIteratorService::class.java.simpleName to textIterator, ).filterValues { it != null }.toMutableMap() as MutableMap) /** Builds the actual list of publication services to use in a Publication. */ diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt new file mode 100644 index 0000000000..4eabbd3d29 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.publication.services.content + +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.ServiceFactory +import org.readium.r2.shared.util.Ref + +interface ContentIterationService : Publication.Service { + suspend fun iterator(start: Locator?): ContentIterator? +} + +val Publication.isContentIterable: Boolean + get() = contentIterationService != null + +suspend fun Publication.contentIterator(start: Locator?): ContentIterator? = + contentIterationService?.iterator(start) + +private val Publication.contentIterationService: ContentIterationService? + get() = findService(ContentIterationService::class) + +/** Factory to build a [ContentIterationService] */ +var Publication.ServicesBuilder.contentIterationServiceFactory: ServiceFactory? + get() = get(ContentIterationService::class) + set(value) = set(ContentIterationService::class, value) + +class DefaultContentIterationService( + private val publication: Ref, + private val resourceContentIteratorFactories: List +) : ContentIterationService { + + companion object { + fun createFactory( + resourceContentIteratorFactories: List + ): (Publication.Service.Context) -> DefaultContentIterationService = { context -> + DefaultContentIterationService(context.publication, resourceContentIteratorFactories) + } + } + + override suspend fun iterator(start: Locator?): ContentIterator? { + val publication = publication() ?: return null + + return PublicationContentIterator( + publication = publication, + startLocator = start, + resourceContentIteratorFactories = resourceContentIteratorFactories + ) + } +} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt index ee01dc42e0..9d12493f6c 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt @@ -6,354 +6,54 @@ package org.readium.r2.shared.publication.services.content -import kotlinx.coroutines.* -import org.jsoup.Jsoup -import org.jsoup.internal.StringUtil -import org.jsoup.nodes.* -import org.jsoup.parser.Parser -import org.jsoup.select.NodeTraversor -import org.jsoup.select.NodeVisitor -import org.readium.r2.shared.extensions.tryOrNull -import org.readium.r2.shared.fetcher.Resource -import org.readium.r2.shared.fetcher.mapCatching import org.readium.r2.shared.publication.Link import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.publication.html.cssSelector -import org.readium.r2.shared.publication.indexOfFirstWithHref -import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.SuspendingCloseable -import org.readium.r2.shared.util.Try -import org.readium.r2.shared.util.mediatype.MediaType -import org.readium.r2.shared.util.use import java.util.* -sealed class Content { - data class Audio( - val locator: Locator, - val link: Link, - val extras: Map = emptyMap() - ) : Content() - - data class Image( - val locator: Locator, - val link: Link, - val description: String?, - val extras: Map = emptyMap() - ) : Content() - - data class Text( - val spans: List, - val style: Style = Style.Body, - val extras: Map = emptyMap() - ) : Content() { - data class Span( - val locator: Locator, - val language: String?, - val text: String, - ) { - val locale: Locale? get() = - language?.let { Locale.forLanguageTag(it.replace("_", "-")) } - } - - sealed class Style { - class Heading(val level: Int) : Style() - object Body : Style() - object Callout : Style() - object Caption : Style() - object Footnote: Style() - object Quote: Style() - object ListItem: Style() - } - } -} - -/** - * Iterates through a publication's content. - */ -interface ContentIterator : SuspendingCloseable { - - suspend fun hasNext(): Boolean - - /** - * Retrieves the next piece of content. - * - * @return Null when reaching the end of the publication, or an error in case of failure. - */ - suspend fun next(): Try - - /** - * Closes any resources allocated for the search query, such as a cursor. - * To be called when the user dismisses the search. - */ - override suspend fun close() {} -} - -class PublicationContentIterator( - private val publication: Publication, - private val start: Locator?, - private val resourceContentIteratorFactories: List -) : ContentIterator { - private val startIndex = - start?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } - ?: 0 - - private var nextIndex = startIndex - - private var currentIterator: ContentIterator? = null - - private suspend fun iterator(): ContentIterator? { - currentIterator?.takeIf { it.hasNext() } - ?.let { return it } - - if (nextIndex >= publication.readingOrder.count()) { - return null - } - - val link = publication.readingOrder[nextIndex] - var locator = publication.locatorFromLink(link) ?: return null - if (start != null && nextIndex == startIndex) { - locator = locator.copy( - text = start.text, - locations = start.locations - ) - } - val resource = publication.get(link) - currentIterator = resourceContentIteratorFactories - .firstNotNullOfOrNull { factory -> factory(resource, locator) } - nextIndex += 1 - return currentIterator - } - - override suspend fun hasNext(): Boolean = - iterator()?.hasNext() ?: false - - override suspend fun next(): Try = - iterator()?.next() - ?: Try.success(null) - - override suspend fun close() { - currentIterator?.close() - } -} - -/** - * Creates a [ContentIterator] instance for the given [resource]. - * - * Return null if the resource format is not supported. -*/ -typealias ResourceContentIteratorFactory = - suspend (resource: Resource, locator: Locator) -> ContentIterator? - -class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) : ContentIterator { - companion object { - // FIXME: Custom skipped elements - fun createFactory(): ResourceContentIteratorFactory = { res, locator -> - if (res.link().mediaType.matchesAny(MediaType.HTML, MediaType.XHTML)) - HtmlResourceContentIterator(res, locator) - else null - } - } - private val scope = MainScope() - - override suspend fun close() { - scope.cancel() - } - - private suspend fun openDocument(): Try = - resource.use { res -> - res.readAsString() - .mapCatching { Jsoup.parse(it) } - } - - private fun parseElement(element: Element): List { - val contentParser = ContentParser( - baseLocator = locator, - startElement = locator.locations.cssSelector?.let { - // The JS third-party library used to generate the CSS Selector sometimes adds - // :root >, which doesn't work with JSoup. - tryOrNull { element.selectFirst(it.removePrefix(":root > ")) } - } - ) - NodeTraversor.traverse(contentParser, element) - var content = contentParser.content - if (contentParser.startIndex > 0) { - content = content.subList(contentParser.startIndex, content.size) - } - return content.toList() - } - - private var items: Try, Exception>? = null - - private suspend fun items(): Try, Exception> { - if (items == null) { - items = openDocument() - .map { parseElement(it.body()).toMutableList() } - } - return requireNotNull(items) - } - - override suspend fun hasNext(): Boolean = - items().getOrNull()?.isNotEmpty() - ?: false - - override suspend fun next(): Try = - items().map { it.removeFirstOrNull() } - - private class ContentParser( - private var baseLocator: Locator, - private val startElement: Element?, - ) : NodeVisitor { - val content = mutableListOf() - var startIndex = 0 - var currentElement: Element? = null - - private val spansAcc = mutableListOf() - private var textAcc = StringBuilder() - private var wholeRawTextAcc: String = "" - private var rawTextAcc: String = "" - private var currentLanguage: String? = null - private var currentCssSelector: String? = null - private var ignoredNode: Node? = null - - override fun head(node: Node, depth: Int) { - if (ignoredNode != null) return - - if (node.isHidden) { - ignoredNode = node - return - } - - if (node is Element) { - currentElement = node - - val tag = node.normalName() - when { - tag == "br" -> { - flushText() - } - tag == "img" -> { - flushText() - val href = node.attr("src") - .takeIf { it.isNotBlank() } - ?.let { Href(it, baseLocator.href).string } - - if (href != null) { - content.add( - Content.Image( - locator = baseLocator.copy( - locations = Locator.Locations( - otherLocations = buildMap { - put("cssSelector", node.cssSelector() as Any) - } - ) - ), - link = Link(href = href), - description = node.attr("alt").takeIf { it.isNotBlank() }, - ) - ) - } - } - node.isBlock -> { - spansAcc.clear() - textAcc.clear() - rawTextAcc = "" - currentCssSelector = node.cssSelector() - } - } +data class Content( + val locator: Locator, + val data: Data, + val extras: Map = emptyMap() +) { + interface Data { + data class Audio( + val link: Link + ) : Data + + data class Image( + val link: Link, + val description: String? + ) : Data + + data class Text( + val role: Role, + val spans: List + ) : Data { + interface Role { + data class Heading(val level: Int) : Role + object Body : Role + object Caption : Role + object Footnote : Role + object Quote : Role } - } - - override fun tail(node: Node, depth: Int) { - if (ignoredNode == node) { - ignoredNode = null - } - - if (node is TextNode) { - val language = node.language - if (currentLanguage != language) { - flushSpan() - currentLanguage = language - } - - rawTextAcc += Parser.unescapeEntities(node.wholeText, false) - appendNormalisedText(node) - } else if (node is Element) { - if (node.isBlock) { - flushText() - } + data class Span( + val locator: Locator, + // FIXME: Language type + val language: String?, + val text: String, + val extras: Map = emptyMap() + ) { + val locale: Locale? + get() = language + ?.let { Locale.forLanguageTag(it.replace("_", "-")) } } } - - private fun appendNormalisedText(textNode: TextNode) { - val text = Parser.unescapeEntities(textNode.wholeText, false) - StringUtil.appendNormalisedWhitespace(textAcc, text, lastCharIsWhitespace()) - } - - private fun lastCharIsWhitespace(): Boolean = - textAcc.lastOrNull() == ' ' - - private fun flushText() { - flushSpan() - if (spansAcc.isEmpty()) return - - if (startElement != null && currentElement == startElement) { - startIndex = content.size - } - content.add(Content.Text( - spans = spansAcc.toList(), - )) - spansAcc.clear() - } - - private fun flushSpan() { - var text = textAcc.toString() - - if (text.isNotBlank()) { - if (spansAcc.isEmpty()) { - text = text.trimStart() - } - - spansAcc.add(Content.Text.Span( - locator = baseLocator.copy( - locations = Locator.Locations( - otherLocations = buildMap { - currentCssSelector?.let { - put("cssSelector", it as Any) - } - } - ), - text = Locator.Text( - highlight = rawTextAcc, - before = wholeRawTextAcc.takeLast(50) // FIXME: custom length - ) - ), - language = currentLanguage, - text = text - )) - } - - wholeRawTextAcc += rawTextAcc - rawTextAcc = "" - textAcc.clear() - } } } -// FIXME: Setup ignore conditions -private val Node.isHidden: Boolean get() = false - -private val Node.language: String? get() = - attr("xml:lang").takeUnless { it.isBlank() } - ?: attr("lang").takeUnless { it.isBlank() } - ?: parent()?.language - -private fun Node.parentElement(): Element? = - parent()?.let { - if (it is Element) { - it - } else { - it.parentElement() - } - } +interface ContentIterator : SuspendingCloseable { + suspend fun previous(): Content? + suspend fun next(): Content? +} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIteratorService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIteratorService.kt deleted file mode 100644 index 63987c71d1..0000000000 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIteratorService.kt +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.shared.publication.services.content - -import org.readium.r2.shared.Search -import org.readium.r2.shared.fetcher.DefaultResourceContentExtractorFactory -import org.readium.r2.shared.fetcher.Resource -import org.readium.r2.shared.fetcher.ResourceContentExtractor -import org.readium.r2.shared.publication.* -import org.readium.r2.shared.util.* -import java.util.* - -typealias TextIteratorTry = Try - -/** - * Represents an error which might occur while iterating through a publication's content. - */ -sealed class TextIteratorException private constructor( - override val message: String, - cause: Throwable? = null -) : Exception(message, cause) { - object PublicationNotIterable : TextIteratorException("The content of this publication cannot be iterated through") - class PublicationUnavailable(message: String) : TextIteratorException(message) - class UnsupportedOption(message: String) : TextIteratorException(message) - class UnsupportedResource(message: String, val link: Link) : TextIteratorException(message) - class ResourceError(message: String, val link: Link, override val cause: Resource.Exception) : TextIteratorException(message, cause) -} - -/** - * @param text Sanitized text. - * @param language BCP 47 language tag. - * @param extras Additional context data specific to an implementation of a text iterator. - * Readium does not use it. - */ -data class Text( - val text: String, - val locator: Locator, -) { -} - -enum class TextUnit { - Character, Word, Sentence, Paragraph -} - -interface TextIteratorService : Publication.Service { - suspend fun iterator(unit: TextUnit, start: Locator?, locale: Locale?): TextIteratorTry -} - -/** - * Iterates through a publication's content. - */ -interface TextIterator : SuspendingCloseable { - - /** - * Retrieves the next piece of content. - * - * @return Null when reaching the end of the publication, or an error in case of failure. - */ - suspend fun next(): TextIteratorTry - - /** - * Closes any resources allocated for the search query, such as a cursor. - * To be called when the user dismisses the search. - */ - override suspend fun close() {} -} - -suspend fun Publication.textIterator(unit: TextUnit, start: Locator? = null, locale: Locale? = null): TextIteratorTry = - findService(TextIteratorService::class)?.iterator(unit, start, locale) - ?: Try.failure(TextIteratorException.PublicationNotIterable) - -/** Factory to build a [TextIteratorService] */ -var Publication.ServicesBuilder.textIteratorServiceFactory: ServiceFactory? - get() = get(TextIteratorService::class) - set(value) = set(TextIteratorService::class, value) - -@OptIn(Search::class) -class DefaultTextIteratorService( - private val publication: Ref -) : TextIteratorService { - companion object { - fun createFactory(): (Publication.Service.Context) -> DefaultTextIteratorService = { context -> - DefaultTextIteratorService(publication = context.publication) - } - } - - override suspend fun iterator( - unit: TextUnit, - start: Locator?, - locale: Locale?, - ): TextIteratorTry { - val publication = publication.ref - ?: return Try.failure(TextIteratorException.PublicationUnavailable("The publication is null")) - - return Try.Success(DefaultTextIterator( - publication = publication, - start = start, - contentExtractorFactory = DefaultResourceContentExtractorFactory(), - tokenizer = unitTextContentTokenizer( - unit = unit, - locale = locale ?: publication.metadata.locale, - ), - )) - } -} - -@OptIn(Search::class) -internal class DefaultTextIterator( - private val publication: Publication, - start: Locator?, - private val contentExtractorFactory: ResourceContentExtractor.Factory, - private val tokenizer: Tokenizer, -) : TextIterator { - - private var nextIndex = - start?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } - ?: 0 - - private var tokens = mutableListOf() - - override suspend fun next(): TextIteratorTry { - tokens.removeFirstOrNull() - ?.let { return Try.success(it) } - - return tokenizeNextResource() - .flatMap { endReached -> - if (endReached) { - Try.success(null) - } else { - next() - } - } - } - - private suspend fun tokenizeNextResource(): TextIteratorTry { - if (nextIndex >= publication.readingOrder.count()) { - return Try.success(true) - } - - val link = publication.readingOrder[nextIndex] - - val locator = publication.locatorFromLink(link) - ?: return Try.failure(TextIteratorException.UnsupportedResource( - "Failed to create a Locator from this link", link - )) - - val text = publication.get(link).use { resource -> - val extractor = contentExtractorFactory.createExtractor(resource) - ?: return Try.failure(TextIteratorException.UnsupportedResource( - "Cannot extract the text out of this resource", link - )) - - extractor.extractText(resource) - .mapFailure { - TextIteratorException.ResourceError("Failed to extract the text out of this resource", link, it) - } - } - - return text - .flatMap { tokenizer.tokenize(it) } - .map { tokens -> - this.tokens = tokens - .map { tokenText -> - Text( - text = tokenText.highlight ?: "", - locator = locator.copy(text = tokenText, locations = Locator.Locations()) - ) - } - .toMutableList() - - nextIndex += 1 - false - } - } -} - diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt new file mode 100644 index 0000000000..6000ac9577 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt @@ -0,0 +1,266 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.publication.services.content + +import org.jsoup.Jsoup +import org.jsoup.internal.StringUtil +import org.jsoup.nodes.Element +import org.jsoup.nodes.Node +import org.jsoup.nodes.TextNode +import org.jsoup.parser.Parser +import org.jsoup.select.NodeTraversor +import org.jsoup.select.NodeVisitor +import org.readium.r2.shared.extensions.tryOrNull +import org.readium.r2.shared.fetcher.Resource +import org.readium.r2.shared.publication.Link +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.html.cssSelector +import org.readium.r2.shared.publication.services.content.Content.Data +import org.readium.r2.shared.util.Href +import org.readium.r2.shared.util.mediatype.MediaType +import org.readium.r2.shared.util.use + +class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) : ContentIterator { + companion object { + // FIXME: Custom skipped elements + fun createFactory(): ResourceContentIteratorFactory = { res, locator -> + if (res.link().mediaType.matchesAny(MediaType.HTML, MediaType.XHTML)) + HtmlResourceContentIterator(res, locator) + else null + } + } + + override suspend fun close() {} + + override suspend fun previous(): Content? = nextBy(-1) + override suspend fun next(): Content? = nextBy(1) + + private suspend fun nextBy(delta: Int): Content? { + val elements = elements() + val index = currentIndex?.let { it + delta } + ?: elements.startIndex + + return elements.elements.getOrNull(index) + ?.also { currentIndex = index } + } + + private var currentIndex: Int? = null + + private suspend fun elements(): ParsedElements = + parsedElements + ?: parseElements().also { parsedElements = it } + + private var parsedElements: ParsedElements? = null + + private suspend fun parseElements(): ParsedElements { + val body = resource.use { res -> + val html = res.readAsString().getOrThrow() + Jsoup.parse(html) + }.body() + + val contentParser = ContentParser( + baseLocator = locator, + startElement = locator.locations.cssSelector?.let { + // The JS third-party library used to generate the CSS Selector sometimes adds + // :root >, which doesn't work with JSoup. + tryOrNull { body.selectFirst(it.removePrefix(":root > ")) } + } + ) + NodeTraversor.traverse(contentParser, body) + return contentParser.result() + } + + data class ParsedElements(val elements: List, val startIndex: Int) + + private class ContentParser( + private val baseLocator: Locator, + private val startElement: Element?, + ) : NodeVisitor { + + fun result() = ParsedElements( + elements = elements, + startIndex = if (baseLocator.locations.progression == 1.0) elements.size - 1 + else startIndex + ) + + private val elements = mutableListOf() + private var startIndex = 0 + private var currentElement: Element? = null + + private val spansAcc = mutableListOf() + private var textAcc = StringBuilder() + private var wholeRawTextAcc: String = "" + private var elementRawTextAcc: String = "" + private var rawTextAcc: String = "" + private var currentLanguage: String? = null + private var currentCssSelector: String? = null + private var ignoredNode: Node? = null + + override fun head(node: Node, depth: Int) { + if (ignoredNode != null) return + + if (node.isHidden) { + ignoredNode = node + return + } + + if (node is Element) { + currentElement = node + + val tag = node.normalName() + + when { + tag == "br" -> { + flushText() + } + tag == "img" -> { + flushText() + + val href = node.attr("src") + .takeIf { it.isNotBlank() } + ?.let { Href(it, baseLocator.href).string } + + if (href != null) { + elements.add( + Content( + locator = baseLocator.copy( + locations = Locator.Locations( + otherLocations = buildMap { + put("cssSelector", node.cssSelector() as Any) + } + ) + ), + data = Data.Image( + link = Link(href = href), + description = node.attr("alt").takeIf { it.isNotBlank() }, + ) + ) + ) + } + } + node.isBlock -> { + spansAcc.clear() + textAcc.clear() + rawTextAcc = "" + currentCssSelector = node.cssSelector() + } + } + } + } + + override fun tail(node: Node, depth: Int) { + if (ignoredNode == node) { + ignoredNode = null + } + + if (node is TextNode) { + val language = node.language + if (currentLanguage != language) { + flushSpan() + currentLanguage = language + } + + rawTextAcc += Parser.unescapeEntities(node.wholeText, false) + appendNormalisedText(node) + + } else if (node is Element) { + if (node.isBlock) { + flushText() + } + } + } + + private fun appendNormalisedText(textNode: TextNode) { + val text = Parser.unescapeEntities(textNode.wholeText, false) + StringUtil.appendNormalisedWhitespace(textAcc, text, lastCharIsWhitespace()) + } + + private fun lastCharIsWhitespace(): Boolean = + textAcc.lastOrNull() == ' ' + + private fun flushText() { + flushSpan() + if (spansAcc.isEmpty()) return + + if (startElement != null && currentElement == startElement) { + startIndex = elements.size + } + elements.add(Content( + locator = baseLocator.copy( + locations = Locator.Locations( + otherLocations = buildMap { + currentCssSelector?.let { + put("cssSelector", it as Any) + } + } + ), + text = Locator.Text(highlight = elementRawTextAcc) + ), + data = Data.Text( + role = Data.Text.Role.Body, + spans = spansAcc.toList() + ) + )) + elementRawTextAcc = "" + spansAcc.clear() + } + + private fun flushSpan() { + var text = textAcc.toString() + val trimmedText = text.trim() + + if (text.isNotBlank()) { + if (spansAcc.isEmpty()) { + text = text.trimStart() + + val whitespaceSuffix = text.lastOrNull() + ?.takeIf { it.isWhitespace() } + ?: "" + + text = trimmedText + whitespaceSuffix + } + + spansAcc.add(Data.Text.Span( + locator = baseLocator.copy( + locations = Locator.Locations( + otherLocations = buildMap { + currentCssSelector?.let { + put("cssSelector", it as Any) + } + } + ), + text = Locator.Text( + highlight = rawTextAcc, + before = wholeRawTextAcc.takeLast(50) // FIXME: custom length + ) + ), + language = currentLanguage, + text = text + )) + } + + wholeRawTextAcc += rawTextAcc + elementRawTextAcc += rawTextAcc + rawTextAcc = "" + textAcc.clear() + } + } +} + +// FIXME: Setup ignore conditions +private val Node.isHidden: Boolean get() = false + +private val Node.language: String? get() = + attr("xml:lang").takeUnless { it.isBlank() } + ?: attr("lang").takeUnless { it.isBlank() } + ?: parent()?.language + +private fun Node.parentElement(): Element? = + parent()?.let { parent -> + (parent as? Element) + ?: parent.parentElement() + } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/PublicationContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/PublicationContentIterator.kt new file mode 100644 index 0000000000..fa74ba7c1a --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/PublicationContentIterator.kt @@ -0,0 +1,116 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.publication.services.content + +import org.readium.r2.shared.fetcher.Resource +import org.readium.r2.shared.publication.Link +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.indexOfFirstWithHref +import org.readium.r2.shared.util.Try + +/** + * Creates a [ContentIterator] instance for the given [resource]. + * + * Return null if the resource format is not supported. + */ +typealias ResourceContentIteratorFactory = suspend (resource: Resource, locator: Locator) -> ContentIterator? + +class PublicationContentIterator( + private val publication: Publication, + private var startLocator: Locator?, + private val resourceContentIteratorFactories: List +) : ContentIterator { + + private var startIndex: Int? = + startLocator?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } + ?: 0 + + private var currentIndex: Int = 0 + private var currentIterator: ContentIterator? = null + + override suspend fun close() { + currentIterator?.close() + currentIterator = null + } + + override suspend fun previous(): Content? { + val iterator = iteratorBy(-1) ?: return null + + val content = iterator.previous() + if (content == null) { + currentIterator = null + return previous() + } + return content + } + + override suspend fun next(): Content? { + val iterator = iteratorBy(1) ?: return null + + val content = iterator.next() + if (content == null) { + currentIterator = null + return next() + } + return content + } + + private suspend fun iteratorBy(delta: Int): ContentIterator? { + currentIterator?.let { return it } + + // For the first requested iterator, we don't want to move by the given delta. + var newDelta = delta + startIndex?.let { + currentIndex = it + startIndex = null + newDelta = 0 + } + + val nextIterator = loadIteratorBy(newDelta, fromIndex = currentIndex) + ?: return null + + currentIndex = nextIterator.index + currentIterator = nextIterator.iterator + return currentIterator + } + + private data class IndexedIterator( + val index: Int, + val iterator: ContentIterator + ) + + private suspend fun loadIteratorBy(delta: Int, fromIndex: Int): IndexedIterator? { + val index = fromIndex + delta + val link = publication.readingOrder.getOrNull(index) ?: return null + var locator = publication.locatorFromLink(link) ?: return null + + val start = startLocator + startLocator = null + if (start != null) { + locator = locator.copy( + locations = start.locations, + text = start.text + ) + } else if (delta < 0) { + locator = locator.copyWithLocations(progression = 1.0) + } + + val iterator = loadIteratorAt(link, locator) + ?: return loadIteratorBy(delta, fromIndex = index) + + return IndexedIterator(index, iterator) + } + + private suspend fun loadIteratorAt(link: Link, locator: Locator): ContentIterator? { + val resource = publication.get(link) + return resourceContentIteratorFactories + .firstNotNullOfOrNull { factory -> + factory(resource, locator) + } + } +} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt deleted file mode 100644 index 8dc0886c30..0000000000 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Tokenizer.kt +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.shared.publication.services.content - -import android.icu.text.BreakIterator -import android.os.Build -import androidx.annotation.RequiresApi -import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.util.Try -import java.util.* - -interface Tokenizer { - suspend fun tokenize(content: String): TextIteratorTry> -} - -fun unitTextContentTokenizer(unit: TextUnit, locale: Locale?, contextLength: Int = 200): Tokenizer = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - IcuTokenizer(locale = locale, unit = unit, contextLength = contextLength) - else - NaiveTokenizer(unit = unit, contextLength = contextLength) - -/** - * Implementation of a [Tokenizer] using ICU components to perform the actual - * tokenization while taking into account languages specificities. - */ -@RequiresApi(Build.VERSION_CODES.N) -internal class IcuTokenizer( - locale: Locale?, - private val unit: TextUnit, - private val contextLength: Int -) : Tokenizer { - private val breakIterator: TextIteratorTry by lazy { - val loc = locale ?: Locale.ROOT - when (unit) { - TextUnit.Character -> - Try.success(BreakIterator.getCharacterInstance(loc)) - TextUnit.Word -> - Try.success(BreakIterator.getWordInstance(loc)) - TextUnit.Sentence -> - Try.success(BreakIterator.getSentenceInstance(loc)) - TextUnit.Paragraph -> - Try.failure(TextIteratorException.UnsupportedOption("IcuUnitTextContentTokenizer does not handle TextContentUnit.Paragraph")) - } - } - - override suspend fun tokenize(content: String): TextIteratorTry> = - breakIterator.map { iter -> - iter.setText(content) - var start: Int = iter.first() - var end: Int = iter.next() - val tokens = mutableListOf() - while (end != BreakIterator.DONE) { - content.extractText(start = start, end = end, contextLength = contextLength, unit = unit) - ?.let { tokens.add(it) } - - start = end - end = iter.next() - } - - tokens - } -} - -/** - * A naive [Tokenizer] relying on java.text.BreakIterator to split the content. - * Use [IcuTokenizer] for better results. - */ -internal class NaiveTokenizer( - private val unit: TextUnit, - private val contextLength: Int -) : Tokenizer { - private val breakIterator: TextIteratorTry by lazy { - when (unit) { - TextUnit.Character -> - Try.success(java.text.BreakIterator.getCharacterInstance()) - TextUnit.Word -> - Try.success(java.text.BreakIterator.getWordInstance()) - TextUnit.Sentence -> - Try.success(java.text.BreakIterator.getSentenceInstance()) - TextUnit.Paragraph -> - Try.failure(TextIteratorException.UnsupportedOption("NaiveUnitTextContentTokenizer does not handle TextContentUnit.Paragraph")) - } - } - - override suspend fun tokenize(content: String): TextIteratorTry> = - breakIterator.map { iter -> - iter.setText(content) - var start: Int = iter.first() - var end: Int = iter.next() - val tokens = mutableListOf() - while (end != java.text.BreakIterator.DONE) { - content.extractText(start = start, end = end, contextLength = contextLength, unit = unit) - ?.let { tokens.add(it) } - - start = end - end = iter.next() - } - - tokens - } -} - -private fun String.extractText(start: Int, end: Int, contextLength: Int, unit: TextUnit): Locator.Text? { - val before = substring((start - contextLength).coerceAtLeast(0), start) - var highlight = substring(start, end) - var after = substring(end, (end + contextLength).coerceAtMost(length)) - - if ( - unit != TextUnit.Character && - ( - highlight.isBlank() || - highlight.find { it.isLetterOrDigit() } == null - ) - ) { - return null - } - - if (unit == TextUnit.Sentence) { - val origHighlight = highlight - highlight = origHighlight.trimEnd() - val whitespaceSuffix = origHighlight.removePrefix(highlight) - after = whitespaceSuffix + after - } - - return Locator.Text( - highlight = highlight, - before = before, - after = after - ) -} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt new file mode 100644 index 0000000000..05fa6d555c --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.util.tokenizer + +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.services.content.Content +import org.readium.r2.shared.publication.services.content.Content.Data +import java.util.* + +/** A tokenizer splitting a [Content] into smaller pieces. */ +@ExperimentalReadiumApi +fun interface ContentTokenizer : Tokenizer + +/** + * A [ContentTokenizer] using a [TextTokenizer] to split the text of the [Content]. + */ +@ExperimentalReadiumApi +class TextContentTokenizer( + private val defaultLocale: Locale?, + private val textTokenizerFactory: (Locale?) -> TextTokenizer +) : ContentTokenizer { + + /** + * A [ContentTokenizer] using the default [TextTokenizer] to split the text of the [Content]. + */ + constructor(defaultLocale: Locale?, unit: TextUnit) : this( + defaultLocale = defaultLocale, + textTokenizerFactory = { locale -> DefaultTextContentTokenizer(unit, locale) } + ) + + override fun tokenize(data: Content): List = listOf( + if (data.data is Data.Text) { + data.copy( + data = data.data.copy( + spans = data.data.spans.flatMap { tokenize(it) } + ) + ) + } else { + data + } + ) + + private fun tokenize(span: Data.Text.Span): List = + textTokenizerFactory(span.locale ?: defaultLocale).tokenize(span.text) + .map { range -> + span.copy( + locator = span.locator.copy(text = extractTextContextIn(span.text, range)), + text = span.text.substring(range) + ) + } + + private fun extractTextContextIn(string: String, range: IntRange): Locator.Text { + val after = string.substring(range.last, (range.last + 50).coerceAtMost(string.length)) + val before = string.substring((range.first - 50).coerceAtLeast(0), range.first) + return Locator.Text( + after = after.takeIf { it.isNotEmpty() }, + before = before.takeIf { it.isNotEmpty() }, + highlight = string.substring(range) + ) + } +} \ No newline at end of file diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt new file mode 100644 index 0000000000..0e680d5162 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt @@ -0,0 +1,98 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.util.tokenizer + +import android.icu.text.BreakIterator +import android.os.Build +import androidx.annotation.RequiresApi +import org.readium.r2.shared.ExperimentalReadiumApi +import java.util.* + +/** A tokenizer splitting a String into range tokens (e.g. words, sentences, etc.). */ +@ExperimentalReadiumApi +typealias TextTokenizer = Tokenizer + +/** A text token unit which can be used with a [TextTokenizer]. */ +@ExperimentalReadiumApi +enum class TextUnit { + Word, Sentence, Paragraph +} + +/** + * A default cluster [TextTokenizer] taking advantage of the best capabilities of each Android + * version. + */ +@ExperimentalReadiumApi +class DefaultTextContentTokenizer private constructor( + private val tokenizer: TextTokenizer +) : TextTokenizer by tokenizer { + constructor(unit: TextUnit, locale: Locale?) : this( + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + IcuTokenizer(locale = locale, unit = unit) + else + NaiveTokenizer(unit = unit) + ) +} + +/** + * Implementation of a [TextTokenizer] using ICU components to perform the actual + * tokenization while taking into account languages specificities. + */ +@ExperimentalReadiumApi +@RequiresApi(Build.VERSION_CODES.N) +class IcuTokenizer(locale: Locale?, unit: TextUnit) : TextTokenizer { + + private val iterator: BreakIterator + + init { + val loc = locale ?: Locale.ROOT + iterator = when (unit) { + TextUnit.Word -> BreakIterator.getWordInstance(loc) + TextUnit.Sentence -> BreakIterator.getSentenceInstance(loc) + TextUnit.Paragraph -> throw IllegalArgumentException("IcuUnitTextContentTokenizer does not handle TextContentUnit.Paragraph") + } + } + + override fun tokenize(data: String): List { + iterator.setText(data) + var start: Int = iterator.first() + var end: Int = iterator.next() + return buildList { + while (end != BreakIterator.DONE) { + add(start until end) + start = end + end = iterator.next() + } + } + } +} + +/** + * A naive [Tokenizer] relying on java.text.BreakIterator to split the content. + * Use [IcuTokenizer] for better results. + */ +@ExperimentalReadiumApi +class NaiveTokenizer(unit: TextUnit) : TextTokenizer { + private val iterator: java.text.BreakIterator = when (unit) { + TextUnit.Word -> java.text.BreakIterator.getWordInstance() + TextUnit.Sentence -> java.text.BreakIterator.getSentenceInstance() + TextUnit.Paragraph -> throw IllegalArgumentException("NaiveUnitTextContentTokenizer does not handle TextContentUnit.Paragraph") + } + + override fun tokenize(data: String): List { + iterator.setText(data) + var start: Int = iterator.first() + var end: Int = iterator.next() + return buildList { + while (end != java.text.BreakIterator.DONE) { + add(start until end) + start = end + end = iterator.next() + } + } + } +} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/Tokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/Tokenizer.kt new file mode 100644 index 0000000000..252a81bc30 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/Tokenizer.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.util.tokenizer + +import org.readium.r2.shared.ExperimentalReadiumApi + +/** A tokenizer splits a content into a list of tokens. */ +@ExperimentalReadiumApi +fun interface Tokenizer { + fun tokenize(data: D): List +} diff --git a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt index a5af37deb5..ae2360d311 100644 --- a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt +++ b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt @@ -21,7 +21,8 @@ import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.asset.FileAsset import org.readium.r2.shared.publication.asset.PublicationAsset import org.readium.r2.shared.publication.encryption.Encryption -import org.readium.r2.shared.publication.services.content.DefaultTextIteratorService +import org.readium.r2.shared.publication.services.content.DefaultContentIterationService +import org.readium.r2.shared.publication.services.content.HtmlResourceContentIterator import org.readium.r2.shared.publication.services.search.StringSearchService import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.logging.WarningLogger @@ -121,7 +122,9 @@ class EpubParser( servicesBuilder = Publication.ServicesBuilder( positions = EpubPositionsService.createFactory(reflowablePositionsStrategy), search = StringSearchService.createDefaultFactory(), - textIterator = DefaultTextIteratorService.createFactory(), + contentIteration = DefaultContentIterationService.createFactory(listOf( + HtmlResourceContentIterator.createFactory() + )), ) ) } diff --git a/settings.gradle.kts b/settings.gradle.kts index 3a0b81dd5e..2a43e4854e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -46,7 +46,6 @@ include(":readium:shared") include(":readium:streamer") include(":readium:navigator") include(":readium:navigator-media2") -include(":readium:navigator-tts") include(":readium:opds") include(":readium:lcp") diff --git a/test-app/build.gradle.kts b/test-app/build.gradle.kts index 754a3b4d25..f7165e3fbe 100644 --- a/test-app/build.gradle.kts +++ b/test-app/build.gradle.kts @@ -67,7 +67,6 @@ dependencies { implementation(project(":readium:streamer")) implementation(project(":readium:navigator")) implementation(project(":readium:navigator-media2")) - implementation(project(":readium:navigator-tts")) implementation(project(":readium:opds")) implementation(project(":readium:lcp")) From af1f4c13af5942c786cec29dbeb7a2494b25bedb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 20 Jun 2022 19:36:34 +0200 Subject: [PATCH 22/59] Basic integration of the new TTS --- .../readium/r2/navigator/tts/TtsController.kt | 40 +++++++---- .../r2/testapp/reader/BaseReaderFragment.kt | 36 +++++++--- .../r2/testapp/reader/EpubReaderFragment.kt | 10 +-- .../r2/testapp/reader/ReaderActivity.kt | 2 +- .../r2/testapp/reader/ReaderViewModel.kt | 68 +++++++++++++++++-- .../r2/testapp/reader/VisualReaderFragment.kt | 4 ++ 6 files changed, 120 insertions(+), 40 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index bb8433a972..2a82ade98d 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -32,28 +32,38 @@ import java.util.* typealias TtsTokenizerFactory = (defaultLocale: Locale?) -> ContentTokenizer @ExperimentalReadiumApi -class TtsController( +class TtsController private constructor( private val publication: Publication, engineFactory: TtsEngineFactory, private val tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory ) : SuspendingCloseable { - constructor( - publication: Publication, - context: Context, - config: TtsEngine.Configuration = TtsEngine.Configuration( - defaultLocale = publication.metadata.locale - ), - tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory - ) : this( - publication, - engineFactory = { listener -> AndroidTtsEngine(context, config, listener) }, - tokenizerFactory = tokenizerFactory - ) - companion object { val defaultTokenizerFactory: TtsTokenizerFactory = { locale -> TextContentTokenizer(unit = TextUnit.Sentence, defaultLocale = locale) } + operator fun invoke( + context: Context, + publication: Publication, + config: TtsEngine.Configuration = TtsEngine.Configuration( + defaultLocale = publication.metadata.locale + ), + tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory + ): TtsController? = invoke( + publication, + engineFactory = { listener -> AndroidTtsEngine(context, config, listener) }, + tokenizerFactory = tokenizerFactory + ) + + operator fun invoke( + publication: Publication, + engineFactory: TtsEngineFactory, + tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory + ): TtsController? { + if (!canSpeak(publication)) return null + + return TtsController(publication, engineFactory, tokenizerFactory) + } + fun canSpeak(publication: Publication): Boolean = publication.isContentIterable } @@ -67,7 +77,7 @@ class TtsController( private val _state = MutableStateFlow(State.Idle) val state: StateFlow = _state.asStateFlow() - private val engine: TtsEngine = engineFactory(EngineListener()) + private val engine: TtsEngine by lazy { engineFactory(EngineListener()) } private val scope = MainScope() init { diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt index 3fc4161695..c54cc5da09 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt @@ -10,8 +10,11 @@ import android.os.Bundle import android.view.* import android.widget.* import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope +import kotlinx.coroutines.launch import org.readium.r2.lcp.lcpLicense import org.readium.r2.navigator.* +import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.publication.Locator import org.readium.r2.testapp.R @@ -30,15 +33,23 @@ abstract class BaseReaderFragment : Fragment() { super.onCreate(savedInstanceState) model.fragmentChannel.receive(this) { event -> - val message = - when (event) { - is ReaderViewModel.FeedbackEvent.BookmarkFailed -> R.string.bookmark_exists - is ReaderViewModel.FeedbackEvent.BookmarkSuccessfullyAdded -> R.string.bookmark_added - } - Toast.makeText(requireContext(), getString(message), Toast.LENGTH_SHORT).show() + fun toast(id: Int) { + Toast.makeText(requireContext(), getString(id), Toast.LENGTH_SHORT).show() + } + + when (event) { + is ReaderViewModel.FeedbackEvent.BookmarkFailed -> toast(R.string.bookmark_exists) + is ReaderViewModel.FeedbackEvent.BookmarkSuccessfullyAdded -> (R.string.bookmark_added) + is ReaderViewModel.FeedbackEvent.GoTo -> go(event.locator, animated = event.animated) + } } } + override fun onStop() { + super.onStop() + model.ttsPause() + } + override fun onHiddenChanged(hidden: Boolean) { super.onHiddenChanged(hidden) setMenuVisibility(!hidden) @@ -48,24 +59,27 @@ abstract class BaseReaderFragment : Fragment() { override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) { menuInflater.inflate(R.menu.menu_reader, menu) menu.findItem(R.id.drm).isVisible = model.publication.lcpLicense != null + menu.findItem(R.id.tts).isVisible = model.canUseTts } override fun onOptionsItemSelected(item: MenuItem): Boolean { - return when (item.itemId) { + when (item.itemId) { R.id.toc -> { model.activityChannel.send(ReaderViewModel.Event.OpenOutlineRequested) - true } R.id.bookmark -> { model.insertBookmark(navigator.currentLocator.value) - true } R.id.drm -> { model.activityChannel.send(ReaderViewModel.Event.OpenDrmManagementRequested) - true } - else -> false + R.id.tts -> { + model.ttsPlay(navigator) + } + else -> return false } + + return true } open fun go(locator: Locator, animated: Boolean) { diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt index e838265175..f64c0aa4dc 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt @@ -29,9 +29,7 @@ import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.epub.EpubNavigatorFragment import org.readium.r2.navigator.html.HtmlDecorationTemplate import org.readium.r2.navigator.html.toCss -import org.readium.r2.shared.APPEARANCE_REF -import org.readium.r2.shared.ReadiumCSSName -import org.readium.r2.shared.SCROLL_REF +import org.readium.r2.shared.* import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.testapp.R @@ -47,7 +45,6 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene private lateinit var publication: Publication private lateinit var navigatorFragment: EpubNavigatorFragment - private lateinit var menuTts: MenuItem private lateinit var menuSearch: MenuItem lateinit var menuSearchView: SearchView @@ -161,9 +158,6 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) { super.onCreateOptionsMenu(menu, menuInflater) - menuTts = menu.findItem(R.id.tts).apply { - isVisible = true - } menuSearch = menu.findItem(R.id.search).apply { isVisible = true menuSearchView = actionView as SearchView @@ -224,6 +218,7 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene } } + @OptIn(InternalReadiumApi::class) override fun onOptionsItemSelected(item: MenuItem): Boolean { if (super.onOptionsItemSelected(item)) { return true @@ -237,7 +232,6 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene R.id.search -> { super.onOptionsItemSelected(item) } - android.R.id.home -> { menuSearch.collapseActionView() true diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt index ea34918b79..201a69411e 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt @@ -20,7 +20,7 @@ import androidx.fragment.app.commit import androidx.fragment.app.commitNow import androidx.lifecycle.ViewModelProvider import org.readium.navigator.media2.ExperimentalMedia2 -import org.readium.r2.navigator.ExperimentalAudiobook +import org.readium.r2.shared.UserException import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.testapp.Application diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index 232d4ca1e3..2edc008689 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -6,20 +6,24 @@ package org.readium.r2.testapp.reader +import android.content.Context import android.graphics.Color import android.os.Bundle import androidx.annotation.ColorInt import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope import androidx.lifecycle.viewModelScope import androidx.paging.* import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch -import org.readium.r2.navigator.Decoration -import org.readium.r2.navigator.ExperimentalAudiobook -import org.readium.r2.navigator.ExperimentalDecorator +import org.readium.r2.navigator.* +import org.readium.r2.navigator.epub.EpubNavigatorFragment +import org.readium.r2.navigator.tts.TtsController +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.Search import org.readium.r2.shared.UserException import org.readium.r2.shared.publication.* @@ -31,9 +35,11 @@ import org.readium.r2.testapp.bookshelf.BookRepository import org.readium.r2.testapp.domain.model.Highlight import org.readium.r2.testapp.search.SearchPagingSource import org.readium.r2.testapp.utils.EventChannel +import timber.log.Timber -@OptIn(Search::class, ExperimentalDecorator::class, ExperimentalCoroutinesApi::class, ExperimentalAudiobook::class) +@OptIn(Search::class, ExperimentalDecorator::class, ExperimentalReadiumApi::class, ExperimentalCoroutinesApi::class) class ReaderViewModel( + context: Context, val readerInitData: ReaderInitData, private val bookRepository: BookRepository, ) : ViewModel() { @@ -149,6 +155,8 @@ class ReaderViewModel( bookRepository.deleteHighlight(id) } + // Search + fun search(query: String) = viewModelScope.launch { if (query == lastSearchQuery) return@launch lastSearchQuery = query @@ -209,6 +217,55 @@ class ReaderViewModel( Pager(PagingConfig(pageSize = 20), pagingSourceFactory = pagingSourceFactory) .flow.cachedIn(viewModelScope) + // TTS + + private val tts = TtsController(context, publication)?.apply { + state + .onEach { state -> + when (state) { + is TtsController.State.Failure -> { + Timber.e(state.error) + } + + is TtsController.State.Playing -> { + val range = state.range + if (range != null) { + fragmentChannel.send(FeedbackEvent.GoTo(range)) + } else { + _ttsDecorations.value = listOf( + Decoration( + id = "tts", + locator = state.utterance.locator, + style = Decoration.Style.Highlight(tint = Color.RED) + ) + ) + } + } + TtsController.State.Idle -> {} + } + } + .launchIn(viewModelScope) + } + + private val _ttsDecorations = MutableStateFlow>(emptyList()) + val ttsDecorations: StateFlow> = _ttsDecorations.asStateFlow() + + val canUseTts: Boolean = (tts != null) + + @OptIn(InternalReadiumApi::class) // FIXME + fun ttsPlay(navigator: Navigator) = viewModelScope.launch { + tts?.play( + start = (navigator as? EpubNavigatorFragment)?.firstVisibleElementLocator() + ?: navigator.currentLocator.value + ) + } + + fun ttsPause() = viewModelScope.launch { + tts?.pause() + } + + // Events + sealed class Event { object OpenOutlineRequested : Event() object OpenDrmManagementRequested : Event() @@ -219,6 +276,7 @@ class ReaderViewModel( sealed class FeedbackEvent { object BookmarkSuccessfullyAdded : FeedbackEvent() object BookmarkFailed : FeedbackEvent() + class GoTo(val locator: Locator, val animated: Boolean = false) : FeedbackEvent() } class Factory( @@ -238,7 +296,7 @@ class ReaderViewModel( // Fallbacks on a dummy Publication to avoid crashing the app until the Activity finishes. dummyReaderInitData(arguments.bookId) } - ReaderViewModel(readerInitData, application.bookRepository) as T + ReaderViewModel(application, readerInitData, application.bookRepository) as T } else -> throw IllegalStateException("Cannot create ViewModel for class ${modelClass.simpleName}.") diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index 7932dae03a..caa213dc4e 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -73,6 +73,10 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List .onEach { navigator.applyDecorations(it, "search") } .launchIn(viewScope) + model.ttsDecorations + .onEach { navigator.applyDecorations(it, "tts") } + .launchIn(viewScope) + childFragmentManager.addOnBackStackChangedListener { updateSystemUiVisibility() } From 89467d09d25043c2e2b8cd416a1cc99ef79eb82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 23 Jun 2022 12:59:57 +0200 Subject: [PATCH 23/59] Add TTS controls --- .../r2/navigator/tts/AndroidTtsEngine.kt | 8 +- .../readium/r2/navigator/tts/TtsController.kt | 5 +- test-app/build.gradle.kts | 15 ++- .../r2/testapp/reader/ReaderViewModel.kt | 41 +++++-- .../r2/testapp/reader/VisualReaderFragment.kt | 33 +++++- .../r2/testapp/reader/views/TtsControls.kt | 104 ++++++++++++++++++ .../src/main/res/layout/fragment_reader.xml | 21 +++- test-app/src/main/res/values/strings.xml | 5 + 8 files changed, 211 insertions(+), 21 deletions(-) create mode 100644 test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index b8bd080f56..4491b43581 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -61,7 +61,7 @@ class AndroidTtsEngine( } override suspend fun speak(utterance: TtsEngine.Utterance) { - initialization.await() + init.await() val locale = utterance.language ?: config.defaultLocale @@ -85,7 +85,7 @@ class AndroidTtsEngine( } override suspend fun stop() { - initialization.await() + init.await() engine.stop() } @@ -103,7 +103,7 @@ class AndroidTtsEngine( // Engine - private val initialization = CompletableDeferred(Unit) + private val init = CompletableDeferred() private val engineListener = EngineListener() private val engine = TextToSpeech(context, engineListener).apply { @@ -118,7 +118,7 @@ class AndroidTtsEngine( private inner class EngineListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { override fun onInit(status: Int) { if (status == TextToSpeech.SUCCESS) { - initialization.complete(Unit) + init.complete(Unit) } else { listener.onError(Exception.InitializationFailed) } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index 2a82ade98d..a9d3140e57 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -93,10 +93,10 @@ class TtsController private constructor( get() = engine.config set(value) { engine.config = value } - suspend fun playPause(start: Locator? = null) { + suspend fun playPause() { when (state.value) { is State.Failure -> return - State.Idle -> play(start) + State.Idle -> play() is State.Playing -> pause() } } @@ -137,7 +137,6 @@ class TtsController private constructor( Forward, Backward; } - @OptIn(DelicateCoroutinesApi::class) private var contentIterator: ContentIterator? = null set(value) { contentIterator?.let { previous -> diff --git a/test-app/build.gradle.kts b/test-app/build.gradle.kts index f7165e3fbe..59d9c204df 100644 --- a/test-app/build.gradle.kts +++ b/test-app/build.gradle.kts @@ -36,8 +36,12 @@ android { jvmTarget = "1.8" freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn" } + composeOptions { + kotlinCompilerExtensionVersion = "1.2.0-rc02" + } buildFeatures { viewBinding = true + compose = true } buildTypes { getByName("release") { @@ -71,15 +75,21 @@ dependencies { implementation(project(":readium:opds")) implementation(project(":readium:lcp")) - implementation("androidx.core:core-ktx:1.7.0") + implementation("androidx.activity:activity-compose:1.4.0") implementation("androidx.activity:activity-ktx:1.4.0") implementation("androidx.appcompat:appcompat:1.4.1") implementation("androidx.browser:browser:1.4.0") implementation("androidx.cardview:cardview:1.0.0") + implementation("androidx.compose.animation:animation:1.1.1") + implementation("androidx.compose.foundation:foundation:1.2.0-rc02") + implementation("androidx.compose.material:material-icons-extended:1.1.1") + implementation("androidx.compose.material:material:1.1.1") implementation("androidx.constraintlayout:constraintlayout:2.1.4") + implementation("androidx.core:core-ktx:1.7.0") implementation("androidx.fragment:fragment-ktx:1.4.1") implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.4.1") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.1") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.4.1") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1") implementation("androidx.navigation:navigation-fragment-ktx:2.4.2") implementation("androidx.navigation:navigation-ui-ktx:2.4.2") @@ -114,6 +124,9 @@ dependencies { implementation("androidx.lifecycle:lifecycle-extensions:2.2.0") kapt("androidx.lifecycle:lifecycle-compiler:2.4.1") + debugImplementation("androidx.compose.ui:ui-tooling:1.1.1") + implementation("androidx.compose.ui:ui-tooling-preview:1.1.1") + // Tests testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.3") diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index 2edc008689..b9d7e82f0d 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -219,9 +219,15 @@ class ReaderViewModel( // TTS + val showTtsControls = MutableStateFlow(false) + val isTtsPlaying = MutableStateFlow(false) + val ttsDecorations = MutableStateFlow>(emptyList()) + private val tts = TtsController(context, publication)?.apply { state .onEach { state -> + isTtsPlaying.value = (state is TtsController.State.Playing) + when (state) { is TtsController.State.Failure -> { Timber.e(state.error) @@ -232,7 +238,7 @@ class ReaderViewModel( if (range != null) { fragmentChannel.send(FeedbackEvent.GoTo(range)) } else { - _ttsDecorations.value = listOf( + ttsDecorations.value = listOf( Decoration( id = "tts", locator = state.utterance.locator, @@ -247,23 +253,42 @@ class ReaderViewModel( .launchIn(viewModelScope) } - private val _ttsDecorations = MutableStateFlow>(emptyList()) - val ttsDecorations: StateFlow> = _ttsDecorations.asStateFlow() - val canUseTts: Boolean = (tts != null) @OptIn(InternalReadiumApi::class) // FIXME fun ttsPlay(navigator: Navigator) = viewModelScope.launch { - tts?.play( - start = (navigator as? EpubNavigatorFragment)?.firstVisibleElementLocator() - ?: navigator.currentLocator.value - ) + tts?.run { + showTtsControls.value = true + + play( + start = (navigator as? EpubNavigatorFragment)?.firstVisibleElementLocator() + ?: navigator.currentLocator.value + ) + } + } + + fun ttsPlayPause() = viewModelScope.launch { + tts?.playPause() } fun ttsPause() = viewModelScope.launch { tts?.pause() } + fun ttsPrevious() = viewModelScope.launch { + tts?.previous() + } + + fun ttsNext() = viewModelScope.launch { + tts?.next() + } + + fun ttsStop() = viewModelScope.launch { + tts?.pause() + showTtsControls.value = false + ttsDecorations.value = emptyList() + } + // Events sealed class Event { diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index caa213dc4e..0a1fc5f8f1 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -14,9 +14,21 @@ import android.graphics.RectF import android.os.Bundle import android.view.* import android.view.inputmethod.InputMethodManager -import android.widget.* +import android.widget.EditText +import android.widget.LinearLayout +import android.widget.PopupWindow +import android.widget.TextView import androidx.annotation.ColorInt import androidx.appcompat.app.AppCompatActivity +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.systemBarsPadding +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.flow.launchIn @@ -28,6 +40,7 @@ import org.readium.r2.navigator.util.EdgeTapNavigation import org.readium.r2.testapp.R import org.readium.r2.testapp.databinding.FragmentReaderBinding import org.readium.r2.testapp.domain.model.Highlight +import org.readium.r2.testapp.reader.views.TtsControls import org.readium.r2.testapp.utils.* /* @@ -85,6 +98,24 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List insets } } + + binding.overlay.setContent { + Box( + modifier = Modifier + .fillMaxSize() + .systemBarsPadding() + ) { + val showTtsControls by model.showTtsControls.collectAsState() + if (showTtsControls) { + TtsControls( + model, + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(8.dp) + ) + } + } + } } override fun onDestroyView() { diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt new file mode 100644 index 0000000000..4d4f8eaf36 --- /dev/null +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt @@ -0,0 +1,104 @@ +/* + * Copyright 2021 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.testapp.reader.views + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.size +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import org.readium.r2.testapp.R +import org.readium.r2.testapp.reader.ReaderViewModel + +@Composable +fun TtsControls(viewModel: ReaderViewModel, modifier: Modifier = Modifier) { + TtsControls( + playing = viewModel.isTtsPlaying.collectAsState().value, + onPlayPause = { viewModel.ttsPlayPause() }, + onStop = { viewModel.ttsStop() }, + onPrevious = { viewModel.ttsPrevious() }, + onNext = { viewModel.ttsNext() }, + modifier = modifier + ) +} + +@Composable +fun TtsControls( + playing: Boolean, + onPlayPause: () -> Unit, + onStop: () -> Unit, + onPrevious: () -> Unit, + onNext: () -> Unit, + modifier: Modifier = Modifier, +) { + Card( + modifier = modifier + ) { + Row( + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + ) { + IconButton(onClick = onPrevious) { + Icon( + imageVector = Icons.Default.SkipPrevious, + contentDescription = stringResource(R.string.tts_previous), + ) + } + + IconButton( + onClick = onPlayPause, + ) { + Icon( + imageVector = if (playing) Icons.Default.Pause + else Icons.Default.PlayArrow, + contentDescription = stringResource( + if (playing) R.string.tts_pause + else R.string.tts_play + ), + modifier = Modifier.then(IconButtonLargeSizeModifier) + ) + } + IconButton( + onClick = onStop, + ) { + Icon( + imageVector = Icons.Default.Stop, + contentDescription = stringResource(R.string.tts_stop), + modifier = Modifier.then(IconButtonLargeSizeModifier) + ) + } + IconButton(onClick = onNext) { + Icon( + imageVector = Icons.Default.SkipNext, + contentDescription = stringResource(R.string.tts_next) + ) + } + } + } +} + +private val IconButtonLargeSizeModifier = Modifier.size(40.dp) + +@Preview(showBackground = true) +@Composable +fun PreviewTtsControls() { + TtsControls( + playing = true, + onPlayPause = {}, + onStop = {}, + onPrevious = {}, + onNext = {} + ) +} \ No newline at end of file diff --git a/test-app/src/main/res/layout/fragment_reader.xml b/test-app/src/main/res/layout/fragment_reader.xml index f58c6f3a80..a281e5b47d 100644 --- a/test-app/src/main/res/layout/fragment_reader.xml +++ b/test-app/src/main/res/layout/fragment_reader.xml @@ -1,6 +1,19 @@ - - + android:layout_height="match_parent" + > + + + + + diff --git a/test-app/src/main/res/values/strings.xml b/test-app/src/main/res/values/strings.xml index 4e1eb970ad..25e2ce4d34 100644 --- a/test-app/src/main/res/values/strings.xml +++ b/test-app/src/main/res/values/strings.xml @@ -182,6 +182,11 @@ Brightness higher TTS slower TTS faster + Play + Pause + Stop + Go backward + Go forward No result Note Add a note From 1d4bd862a8f43d1d7a6451ed9dbb290a4409d158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 27 Jun 2022 10:23:04 +0200 Subject: [PATCH 24/59] Add TTS config --- .../r2/navigator/tts/AndroidTtsEngine.kt | 35 ++++--- .../readium/r2/navigator/tts/TtsController.kt | 40 +++++--- .../org/readium/r2/navigator/tts/TtsEngine.kt | 5 +- .../readium/r2/testapp/epub/UserSettings.kt | 23 ----- .../r2/testapp/reader/EpubReaderFragment.kt | 2 + .../r2/testapp/reader/ReaderViewModel.kt | 9 +- .../r2/testapp/reader/views/TtsControls.kt | 96 ++++++++++++++++++- .../readium/r2/testapp/shared/views/Group.kt | 26 +++++ .../readium/r2/testapp/shared/views/List.kt | 63 ++++++++++++ .../res/layout/popup_window_user_settings.xml | 41 -------- test-app/src/main/res/values/strings.xml | 17 ++-- 11 files changed, 256 insertions(+), 101 deletions(-) create mode 100644 test-app/src/main/java/org/readium/r2/testapp/shared/views/Group.kt create mode 100644 test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index 4491b43581..010c13a4d4 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -10,12 +10,16 @@ import android.content.Context import android.speech.tts.TextToSpeech import android.speech.tts.UtteranceProgressListener import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.shared.util.MapWithDefaultCompanion import java.util.* class AndroidTtsEngine( context: Context, - config: TtsEngine.Configuration = TtsEngine.Configuration(), + config: Configuration = Configuration(), private val listener: TtsEngine.Listener ) : TtsEngine { @@ -54,17 +58,20 @@ class AndroidTtsEngine( companion object : MapWithDefaultCompanion(values(), EngineError::code, Unknown) } - override var config: TtsEngine.Configuration = config - set(value) { - field = value - engine.setConfig(value) - } + private val _config = MutableStateFlow(config) + override val config: StateFlow = _config.asStateFlow() + + override suspend fun setConfig(config: Configuration): Configuration { + engine.setConfig(config) + _config.value = config + return config + } override suspend fun speak(utterance: TtsEngine.Utterance) { init.await() val locale = utterance.language - ?: config.defaultLocale + ?: config.value.defaultLocale ?: engine.voice.locale val localeResult = engine.setLanguage(locale) @@ -111,7 +118,7 @@ class AndroidTtsEngine( setConfig(config) } - private fun TextToSpeech.setConfig(config: TtsEngine.Configuration) { + private fun TextToSpeech.setConfig(config: Configuration) { setSpeechRate(config.rate.toFloat()) } @@ -126,15 +133,19 @@ class AndroidTtsEngine( override fun onStart(utteranceId: String?) {} + override fun onStop(utteranceId: String?, interrupted: Boolean) { + utterances.remove(utteranceId) + } + override fun onDone(utteranceId: String?) { utterances.remove(utteranceId) - if (utterances.isEmpty()) { - listener.onStop() - } + listener.onStop() } @Deprecated("Deprecated in the interface") - override fun onError(utteranceId: String?) {} + override fun onError(utteranceId: String?) { + onError(utteranceId, -1) + } override fun onError(utteranceId: String?, errorCode: Int) { val utterance = utterances.remove(utteranceId) ?: return diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index a9d3140e57..2384221814 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -7,14 +7,15 @@ package org.readium.r2.navigator.tts import android.content.Context -import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch +import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.services.content.Content @@ -26,6 +27,7 @@ import org.readium.r2.shared.util.SuspendingCloseable import org.readium.r2.shared.util.tokenizer.ContentTokenizer import org.readium.r2.shared.util.tokenizer.TextContentTokenizer import org.readium.r2.shared.util.tokenizer.TextUnit +import timber.log.Timber import java.util.* @ExperimentalReadiumApi @@ -44,7 +46,7 @@ class TtsController private constructor( operator fun invoke( context: Context, publication: Publication, - config: TtsEngine.Configuration = TtsEngine.Configuration( + config: Configuration = Configuration( defaultLocale = publication.metadata.locale ), tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory @@ -85,13 +87,17 @@ class TtsController private constructor( } override suspend fun close() { - engine.close() + tryOrLog { + engine.close() + } scope.cancel() } - var config: TtsEngine.Configuration - get() = engine.config - set(value) { engine.config = value } + val config: StateFlow get() = engine.config + + suspend fun setConfig(config: Configuration): Configuration = tryOrFail { + engine.setConfig(config) + } ?: config suspend fun playPause() { when (state.value) { @@ -121,8 +127,10 @@ class TtsController private constructor( } suspend fun pause() { - _state.value = State.Idle - engine.stop() + tryOrFail { + _state.value = State.Idle + engine.stop() + } } suspend fun previous() { @@ -166,8 +174,10 @@ class TtsController private constructor( } private suspend fun play(utterance: TtsEngine.Utterance) { - _state.value = State.Playing(utterance) - engine.speak(utterance) + tryOrFail { + _state.value = State.Playing(utterance) + engine.speak(utterance) + } } private suspend fun nextUtterance(direction: Direction): TtsEngine.Utterance? { @@ -211,7 +221,7 @@ class TtsController private constructor( } private fun Content.tokenize(): List = - tokenizerFactory(config.defaultLocale) + tokenizerFactory(config.value.defaultLocale) .tokenize(this) private fun Content.utterances(): List { @@ -249,6 +259,14 @@ class TtsController private constructor( } } + suspend fun tryOrFail(closure: suspend () -> T): T? = + try { closure() } + catch (e: Exception) { + Timber.e(e) + _state.value = State.Failure(e) + null + } + private inner class EngineListener : TtsEngine.Listener { override fun onSpeakRangeAt(locator: Locator, utterance: TtsEngine.Utterance) { diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index 3f28bc1378..693c1f83d5 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -6,6 +6,7 @@ package org.readium.r2.navigator.tts +import kotlinx.coroutines.flow.StateFlow import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.util.SuspendingCloseable import java.util.Locale @@ -31,7 +32,9 @@ interface TtsEngine : SuspendingCloseable { val language: Locale? ) - var config: Configuration + val config: StateFlow + + suspend fun setConfig(config: Configuration): Configuration // Can throw. suspend fun speak(utterance: Utterance) diff --git a/test-app/src/main/java/org/readium/r2/testapp/epub/UserSettings.kt b/test-app/src/main/java/org/readium/r2/testapp/epub/UserSettings.kt index d51501d536..2bcf6866de 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/epub/UserSettings.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/epub/UserSettings.kt @@ -572,29 +572,6 @@ class UserSettings(var preferences: SharedPreferences, val context: Context, pri } }) - // Speech speed - val speechSeekBar = layout.TTSSpeechSpeed - - //Get the user settings value or set the progress bar to a neutral position (1 time speech speed). - val speed = preferences.getInt("reader_TTS_speed", (2.75 * 3.toDouble() / 11.toDouble() * 100).toInt()) - - speechSeekBar.progress = speed - speechSeekBar.setOnSeekBarChangeListener( - object : SeekBar.OnSeekBarChangeListener { - - override fun onProgressChanged(bar: SeekBar, progress: Int, from_user: Boolean) { - // Nothing - } - - override fun onStartTrackingTouch(bar: SeekBar) { - // Nothing - } - - override fun onStopTrackingTouch(bar: SeekBar) { - preferences.edit().putInt("reader_TTS_speed", bar.progress).apply() - } - }) - return userSettingsPopup } } \ No newline at end of file diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt index f64c0aa4dc..4cdf222d72 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt @@ -158,6 +158,8 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) { super.onCreateOptionsMenu(menu, menuInflater) + menu.findItem(R.id.settings).isVisible = true + menuSearch = menu.findItem(R.id.search).apply { isVisible = true menuSearchView = actionView as SearchView diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index b9d7e82f0d..32d5247e9e 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -22,6 +22,7 @@ import kotlinx.coroutines.launch import org.readium.r2.navigator.* import org.readium.r2.navigator.epub.EpubNavigatorFragment import org.readium.r2.navigator.tts.TtsController +import org.readium.r2.navigator.tts.TtsEngine import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.Search @@ -230,7 +231,7 @@ class ReaderViewModel( when (state) { is TtsController.State.Failure -> { - Timber.e(state.error) + fragmentChannel.send(FeedbackEvent.TtsFailure(state.error)) } is TtsController.State.Playing -> { @@ -254,6 +255,11 @@ class ReaderViewModel( } val canUseTts: Boolean = (tts != null) + val ttsConfig: StateFlow? get() = tts?.config + + fun ttsSetConfig(config: TtsEngine.Configuration) = viewModelScope.launch { + tts?.setConfig(config) + } @OptIn(InternalReadiumApi::class) // FIXME fun ttsPlay(navigator: Navigator) = viewModelScope.launch { @@ -302,6 +308,7 @@ class ReaderViewModel( object BookmarkSuccessfullyAdded : FeedbackEvent() object BookmarkFailed : FeedbackEvent() class GoTo(val locator: Locator, val animated: Boolean = false) : FeedbackEvent() + class TtsFailure(val error: Exception) : FeedbackEvent() } class Factory( diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt index 4d4f8eaf36..1d7b1ecd8a 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt @@ -6,26 +6,31 @@ package org.readium.r2.testapp.reader.views -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.* -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import org.readium.r2.navigator.tts.TtsEngine +import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.testapp.R import org.readium.r2.testapp.reader.ReaderViewModel +import org.readium.r2.testapp.shared.views.SelectorListItem +import java.text.DecimalFormat +import java.util.* @Composable fun TtsControls(viewModel: ReaderViewModel, modifier: Modifier = Modifier) { TtsControls( playing = viewModel.isTtsPlaying.collectAsState().value, + config = viewModel.ttsConfig?.collectAsState()?.value, + onConfigChange = { viewModel.ttsSetConfig(it) }, onPlayPause = { viewModel.ttsPlayPause() }, onStop = { viewModel.ttsStop() }, onPrevious = { viewModel.ttsPrevious() }, @@ -37,12 +42,24 @@ fun TtsControls(viewModel: ReaderViewModel, modifier: Modifier = Modifier) { @Composable fun TtsControls( playing: Boolean, + config: Configuration?, + onConfigChange: (Configuration) -> Unit, onPlayPause: () -> Unit, onStop: () -> Unit, onPrevious: () -> Unit, onNext: () -> Unit, modifier: Modifier = Modifier, ) { + var showSettings by remember { mutableStateOf(false) } + + if (config != null && showSettings) { + TtsSettingsDialog( + config = config, + onConfigChange = onConfigChange, + onDismiss = { showSettings = false } + ) + } + Card( modifier = modifier ) { @@ -85,17 +102,86 @@ fun TtsControls( contentDescription = stringResource(R.string.tts_next) ) } + + Spacer(modifier = Modifier.size(8.dp)) + + IconButton(onClick = { showSettings = true }) { + Icon( + imageVector = Icons.Default.Settings, + contentDescription = stringResource(R.string.tts_settings) + ) + } } } } private val IconButtonLargeSizeModifier = Modifier.size(40.dp) +private val availableRates = listOf(0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0) + +@Composable +private fun TtsSettingsDialog( + config: Configuration, + onConfigChange: (Configuration) -> Unit, + onDismiss: () -> Unit +) { + AlertDialog( + onDismissRequest = onDismiss, + confirmButton = { + TextButton(onClick = onDismiss) { + Text(text = stringResource(R.string.close)) + } + }, + title = { Text(stringResource(R.string.tts_settings)) }, + text = { + Column { + SelectorListItem( + label = stringResource(R.string.tts_rate), + values = availableRates, + selection = config.rate, + titleOfSelection = { DecimalFormat("x#.##").format(it) }, + onSelected = { + onConfigChange(config.copy(rate = it)) + } + ) + + LocaleSelectorListItem( + selection = config.defaultLocale ?: Locale.getDefault(), + onSelected = { + onConfigChange(config.copy(defaultLocale = it)) + } + ) + } + } + ) +} + +@Composable +fun LocaleSelectorListItem( + selection: Locale, + locales: List = Locale.getAvailableLocales() + .toList() + .sortedBy(Locale::getDisplayName), + onSelected: (Locale) -> Unit, + enabled: Boolean = true, +) { + SelectorListItem( + label = stringResource(R.string.language), + values = locales, + selection = selection, + titleOfSelection = { it.displayName }, + onSelected = onSelected, + enabled = enabled + ) +} + @Preview(showBackground = true) @Composable fun PreviewTtsControls() { TtsControls( playing = true, + config = Configuration(), + onConfigChange = {}, onPlayPause = {}, onStop = {}, onPrevious = {}, diff --git a/test-app/src/main/java/org/readium/r2/testapp/shared/views/Group.kt b/test-app/src/main/java/org/readium/r2/testapp/shared/views/Group.kt new file mode 100644 index 0000000000..57b22e6d3c --- /dev/null +++ b/test-app/src/main/java/org/readium/r2/testapp/shared/views/Group.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.testapp.shared.views + +import androidx.compose.material.ContentAlpha +import androidx.compose.material.LocalContentAlpha +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider + +/** + * Sets the emphasis (alpha) of a group of [Composable] views. + */ +@Composable +fun Group(lowEmphasis: Boolean = false, enabled: Boolean = true, content: @Composable () -> Unit) { + val alpha = when { + !enabled -> ContentAlpha.disabled + lowEmphasis -> ContentAlpha.medium + else -> ContentAlpha.high + } + + CompositionLocalProvider(LocalContentAlpha provides alpha, content = content) +} diff --git a/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt b/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt new file mode 100644 index 0000000000..b4348a9a68 --- /dev/null +++ b/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.testapp.shared.views + +import androidx.compose.foundation.clickable +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier + +/** + * A Material [ListItem] displaying a dropdown menu to select a value. The current value is + * displayed on the right. + */ +@OptIn(ExperimentalMaterialApi::class) +@Composable +fun SelectorListItem( + label: String, + values: List, + selection: T, + titleOfSelection: @Composable (T) -> String, + onSelected: (T) -> Unit, + enabled: Boolean = true, +) { + var isExpanded by remember { mutableStateOf(false) } + fun dismiss() { isExpanded = false } + + ListItem( + modifier = Modifier.run { + if (enabled) clickable { isExpanded = true } + else this + }, + text = { + Group(enabled = enabled) { + Text(label) + } + }, + trailing = { + Group(enabled = enabled) { + Text(titleOfSelection(selection)) + } + + DropdownMenu( + expanded = isExpanded, + onDismissRequest = { dismiss() } + ) { + for (value in values) { + DropdownMenuItem( + onClick = { + onSelected(value) + dismiss() + } + ) { + Text(titleOfSelection(value)) + } + } + } + } + ) +} diff --git a/test-app/src/main/res/layout/popup_window_user_settings.xml b/test-app/src/main/res/layout/popup_window_user_settings.xml index 479ef415c1..369c0037a4 100644 --- a/test-app/src/main/res/layout/popup_window_user_settings.xml +++ b/test-app/src/main/res/layout/popup_window_user_settings.xml @@ -187,47 +187,6 @@ android:layout_height="48dp" android:text="@string/usersettings_label_scroll_mode" android:textSize="16sp"/> - - - - - - - - - - - - - Previous chapter Brightness lower Brightness higher - TTS slower - TTS faster - Play - Pause - Stop - Go backward - Go forward No result Note Add a note @@ -202,4 +195,14 @@ Play or pause Go forward 30 seconds Select a font + Close + Language + + Play + Pause + Stop + Go backward + Go forward + Speech settings + Rate From a06ec26134563f988445c838a3314702ed770747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 27 Jun 2022 11:54:08 +0200 Subject: [PATCH 25/59] Improve error reporting --- .../r2/navigator/tts/AndroidTtsEngine.kt | 90 ++++++++----- .../readium/r2/navigator/tts/TtsController.kt | 126 +++++++++++------- .../org/readium/r2/navigator/tts/TtsEngine.kt | 25 ++-- .../r2/testapp/reader/ReaderViewModel.kt | 38 +++++- test-app/src/main/res/values/strings.xml | 5 + 5 files changed, 186 insertions(+), 98 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index 010c13a4d4..4ff875f119 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -9,11 +9,12 @@ package org.readium.r2.navigator.tts import android.content.Context import android.speech.tts.TextToSpeech import android.speech.tts.UtteranceProgressListener -import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.* import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import org.readium.r2.navigator.tts.TtsEngine.Configuration +import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.util.MapWithDefaultCompanion import java.util.* @@ -23,16 +24,6 @@ class AndroidTtsEngine( private val listener: TtsEngine.Listener ) : TtsEngine { - sealed class Exception private constructor( - override val message: String, - cause: Throwable? = null - ) : kotlin.Exception(message, cause) { - object InitializationFailed : Exception("The Android TTS engine failed to initialize") - class LanguageNotSupported(val locale: Locale) : Exception("The language ${locale.toLanguageTag()} is not supported by the Android TTS engine") - class LanguageMissingData(val locale: Locale) : Exception("The language ${locale.toLanguageTag()} requires additional files by the Android TTS engine") - class UtteranceError(val utterance: TtsEngine.Utterance, val error: EngineError) : Exception("Failed to play the utterance: $error") - } - /** * Android's TTS error code. * See https://developer.android.com/reference/android/speech/tts/TextToSpeech#ERROR @@ -58,47 +49,69 @@ class AndroidTtsEngine( companion object : MapWithDefaultCompanion(values(), EngineError::code, Unknown) } + class EngineException(code: Int) : Exception("Android TTS engine error: $code") { + val error: EngineError = + EngineError.getOrDefault(code) + } + + private val scope = MainScope() + private val _config = MutableStateFlow(config) override val config: StateFlow = _config.asStateFlow() - override suspend fun setConfig(config: Configuration): Configuration { + override fun setConfig(config: Configuration): Configuration { engine.setConfig(config) _config.value = config return config } - override suspend fun speak(utterance: TtsEngine.Utterance) { - init.await() + private var speakJob: Job? = null - val locale = utterance.language - ?: config.value.defaultLocale - ?: engine.voice.locale + override fun speak(utterance: TtsEngine.Utterance) { + speakJob?.cancel() + speakJob = scope.launch { + init.await() - val localeResult = engine.setLanguage(locale) - if (localeResult < TextToSpeech.LANG_AVAILABLE) { - val error = - if (localeResult == TextToSpeech.LANG_MISSING_DATA) - Exception.LanguageMissingData(locale) - else - Exception.LanguageNotSupported(locale) + val locale = utterance.localeOrDefault - listener.onError(error) - throw error - } + val localeResult = engine.setLanguage(locale) + if (localeResult < TextToSpeech.LANG_AVAILABLE) { + val error = + if (localeResult == TextToSpeech.LANG_MISSING_DATA) + TtsEngine.Exception.LanguageSupportIncomplete(locale) + else + TtsEngine.Exception.LanguageNotSupported(locale) - val id = nextId() - utterances[id] = utterance - engine.speak(utterance.text, TextToSpeech.QUEUE_FLUSH, null, id) + listener.onUtteranceError(utterance, error) + return@launch + } + + val id = nextId() + utterances[id] = utterance + engine.speak(utterance.text, TextToSpeech.QUEUE_FLUSH, null, id) + } } - override suspend fun stop() { - init.await() - engine.stop() + private val TtsEngine.Utterance.localeOrDefault: Locale get() = + language + ?: config.value.defaultLocale + ?: engine.voice.locale + + override fun stop() { + speakJob?.cancel() + speakJob = null + + if (init.isCompleted) { + tryOrLog { + engine.stop() + } + } } override suspend fun close() { stop() engine.shutdown() + scope.cancel() } private val utterances = mutableMapOf() @@ -127,7 +140,7 @@ class AndroidTtsEngine( if (status == TextToSpeech.SUCCESS) { init.complete(Unit) } else { - listener.onError(Exception.InitializationFailed) + listener.onEngineError(TtsEngine.Exception.InitializationFailed()) } } @@ -142,14 +155,19 @@ class AndroidTtsEngine( listener.onStop() } - @Deprecated("Deprecated in the interface") + @Deprecated("Deprecated in the interface", ReplaceWith("onError(utteranceId, -1)")) override fun onError(utteranceId: String?) { onError(utteranceId, -1) } override fun onError(utteranceId: String?, errorCode: Int) { val utterance = utterances.remove(utteranceId) ?: return - listener.onError(Exception.UtteranceError(utterance, EngineError.getOrDefault(errorCode))) + val error = EngineException(errorCode) + listener.onUtteranceError(utterance, when (error.error) { + EngineError.Network, EngineError.NetworkTimeout -> TtsEngine.Exception.Network(error) + EngineError.NotInstalledYet -> TtsEngine.Exception.LanguageSupportIncomplete(utterance.localeOrDefault) + else -> TtsEngine.Exception.Other(error) + }) } override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index 2384221814..7f6a549621 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -7,12 +7,10 @@ package org.readium.r2.navigator.tts import android.content.Context -import kotlinx.coroutines.MainScope -import kotlinx.coroutines.cancel +import kotlinx.coroutines.* import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrLog @@ -29,6 +27,7 @@ import org.readium.r2.shared.util.tokenizer.TextContentTokenizer import org.readium.r2.shared.util.tokenizer.TextUnit import timber.log.Timber import java.util.* +import kotlin.time.Duration.Companion.seconds @ExperimentalReadiumApi typealias TtsTokenizerFactory = (defaultLocale: Locale?) -> ContentTokenizer @@ -37,9 +36,19 @@ typealias TtsTokenizerFactory = (defaultLocale: Locale?) -> ContentTokenizer class TtsController private constructor( private val publication: Publication, engineFactory: TtsEngineFactory, - private val tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory + private val tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory, + var listener: Listener? = null ) : SuspendingCloseable { + interface Listener { + /** + * Notifies an [error] occurred while speaking [utterance]. + * + * Return true to continue the playback with the next utterance, or false to interrupt it. + */ + fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception): Boolean + } + companion object { val defaultTokenizerFactory: TtsTokenizerFactory = { locale -> TextContentTokenizer(unit = TextUnit.Sentence, defaultLocale = locale) } @@ -73,7 +82,7 @@ class TtsController private constructor( sealed class State { object Idle : State() class Playing(val utterance: TtsEngine.Utterance, val range: Locator? = null) : State() - class Failure(val error: Exception) : State() + class Failure(val error: TtsEngine.Exception) : State() } private val _state = MutableStateFlow(State.Idle) @@ -95,11 +104,10 @@ class TtsController private constructor( val config: StateFlow get() = engine.config - suspend fun setConfig(config: Configuration): Configuration = tryOrFail { + fun setConfig(config: Configuration): Configuration = engine.setConfig(config) - } ?: config - suspend fun playPause() { + fun playPause() { when (state.value) { is State.Failure -> return State.Idle -> play() @@ -107,38 +115,44 @@ class TtsController private constructor( } } - suspend fun play(start: Locator? = null) { - if (start != null) { - speakingUtteranceIndex = null - utterances = emptyList() - contentIterator = publication.contentIterator(start) - } + fun play(start: Locator? = null) { + replacePlaybackJob { + if (start != null) { + speakingUtteranceIndex = null + utterances = emptyList() + contentIterator = publication.contentIterator(start) + } - if (contentIterator == null) { - contentIterator = publication.contentIterator(null) - } + if (contentIterator == null) { + contentIterator = publication.contentIterator(null) + } - val utterance = currentUtterance - if (utterance != null) { - play(utterance) - } else { - next() + val utterance = currentUtterance + if (utterance != null) { + play(utterance) + } else { + playNextUtterance(Direction.Forward) + } } } - suspend fun pause() { - tryOrFail { + fun pause() { + replacePlaybackJob { _state.value = State.Idle engine.stop() } } - suspend fun previous() { - playNextUtterance(Direction.Backward) + fun previous() { + replacePlaybackJob { + playNextUtterance(Direction.Backward) + } } - suspend fun next() { - playNextUtterance(Direction.Forward) + fun next() { + replacePlaybackJob { + playNextUtterance(Direction.Forward) + } } private enum class Direction { @@ -161,23 +175,17 @@ class TtsController private constructor( speakingUtteranceIndex?.let { utterances[it] } private suspend fun playNextUtterance(direction: Direction) { - try { - val utterance = nextUtterance(direction) - if (utterance != null) { - play(utterance) - } else { - _state.value = State.Idle - } - } catch (e: Exception) { - _state.value = State.Failure(e) + val utterance = nextUtterance(direction) + if (utterance != null) { + play(utterance) + } else { + _state.value = State.Idle } } - private suspend fun play(utterance: TtsEngine.Utterance) { - tryOrFail { - _state.value = State.Playing(utterance) - engine.speak(utterance) - } + private fun play(utterance: TtsEngine.Utterance) { + _state.value = State.Playing(utterance) + engine.speak(utterance) } private suspend fun nextUtterance(direction: Direction): TtsEngine.Utterance? { @@ -259,13 +267,16 @@ class TtsController private constructor( } } - suspend fun tryOrFail(closure: suspend () -> T): T? = - try { closure() } - catch (e: Exception) { - Timber.e(e) - _state.value = State.Failure(e) - null - } + private var playbackJob: Job? = null + + /** + * Cancels the previous playback-related job and starts a new one witht he given suspending + * [block]. + */ + private fun replacePlaybackJob(block: suspend CoroutineScope.() -> Unit) { + playbackJob?.cancel() + playbackJob = scope.launch(block = block) + } private inner class EngineListener : TtsEngine.Listener { @@ -283,10 +294,25 @@ class TtsController private constructor( } } - override fun onError(error: Exception) { + override fun onEngineError(error: TtsEngine.Exception) { scope.launch { _state.value = State.Idle } } + + override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) { + scope.launch { + val shouldContinue = listener?.onUtteranceError(utterance, error) ?: true + + if (state.value is State.Playing) { + if (shouldContinue) { + delay(1.seconds) + next() + } else { + _state.value = State.Idle + } + } + } + } } } \ No newline at end of file diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index 693c1f83d5..f3a3500314 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -15,10 +15,23 @@ typealias TtsEngineFactory = (listener: TtsEngine.Listener) -> TtsEngine interface TtsEngine : SuspendingCloseable { + sealed class Exception private constructor( + override val message: String, + cause: Throwable? = null + ) : kotlin.Exception(message, cause) { + /** Failed to initialize the TTS engine. */ + class InitializationFailed(cause: Throwable? = null) : Exception("The TTS engine failed to initialize", cause) + class LanguageNotSupported(val locale: Locale, cause: Throwable? = null) : Exception("The language ${locale.toLanguageTag()} is not supported by the TTS engine", cause) + class LanguageSupportIncomplete(val locale: Locale, cause: Throwable? = null) : Exception("The language ${locale.toLanguageTag()} requires additional files by the TTS engine", cause) + class Network(cause: Throwable? = null) : Exception("A network error occurred", cause) + class Other(override val cause: Throwable) : Exception(cause.message ?: "An unknown error occurred", cause) + } + interface Listener { fun onSpeakRangeAt(locator: Locator, utterance: Utterance) fun onStop() - fun onError(error: Exception) + fun onEngineError(error: Exception) + fun onUtteranceError(utterance: Utterance, error: Exception) } data class Configuration( @@ -33,12 +46,8 @@ interface TtsEngine : SuspendingCloseable { ) val config: StateFlow + fun setConfig(config: Configuration): Configuration - suspend fun setConfig(config: Configuration): Configuration - - // Can throw. - suspend fun speak(utterance: Utterance) - - // Can throw. - suspend fun stop() + fun speak(utterance: Utterance) + fun stop() } \ No newline at end of file diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index 32d5247e9e..815c5bc743 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -19,7 +19,10 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch -import org.readium.r2.navigator.* +import kotlinx.coroutines.runBlocking +import org.readium.r2.navigator.Decoration +import org.readium.r2.navigator.ExperimentalDecorator +import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.epub.EpubNavigatorFragment import org.readium.r2.navigator.tts.TtsController import org.readium.r2.navigator.tts.TtsEngine @@ -32,11 +35,11 @@ import org.readium.r2.shared.publication.services.search.SearchIterator import org.readium.r2.shared.publication.services.search.SearchTry import org.readium.r2.shared.publication.services.search.search import org.readium.r2.shared.util.Try +import org.readium.r2.testapp.R import org.readium.r2.testapp.bookshelf.BookRepository import org.readium.r2.testapp.domain.model.Highlight import org.readium.r2.testapp.search.SearchPagingSource import org.readium.r2.testapp.utils.EventChannel -import timber.log.Timber @OptIn(Search::class, ExperimentalDecorator::class, ExperimentalReadiumApi::class, ExperimentalCoroutinesApi::class) class ReaderViewModel( @@ -57,6 +60,13 @@ class ReaderViewModel( val fragmentChannel: EventChannel = EventChannel(Channel(Channel.BUFFERED), viewModelScope) + override fun onCleared() { + super.onCleared() + + runBlocking { + tts?.close() + } + } fun saveProgression(locator: Locator) = viewModelScope.launch { bookRepository.saveProgression(locator, bookId) @@ -225,13 +235,20 @@ class ReaderViewModel( val ttsDecorations = MutableStateFlow>(emptyList()) private val tts = TtsController(context, publication)?.apply { + listener = object : TtsController.Listener { + override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception): Boolean { + activityChannel.send(Event.Failure(error.toUserException())) + return true // Continue playback with the next utterance. + } + } + state .onEach { state -> isTtsPlaying.value = (state is TtsController.State.Playing) when (state) { is TtsController.State.Failure -> { - fragmentChannel.send(FeedbackEvent.TtsFailure(state.error)) + activityChannel.send(Event.Failure(state.error.toUserException())) } is TtsController.State.Playing -> { @@ -254,6 +271,20 @@ class ReaderViewModel( .launchIn(viewModelScope) } + private fun TtsEngine.Exception.toUserException(): UserException = + when (this) { + is TtsEngine.Exception.InitializationFailed -> + UserException(R.string.tts_error_initialization) + is TtsEngine.Exception.LanguageNotSupported -> + UserException(R.string.tts_error_language_not_supported, locale.displayLanguage) + is TtsEngine.Exception.LanguageSupportIncomplete -> + UserException(R.string.tts_error_language_support_incomplete, locale.displayLanguage) + is TtsEngine.Exception.Network -> + UserException(R.string.tts_error_network) + is TtsEngine.Exception.Other -> + UserException(R.string.tts_error_other) + } + val canUseTts: Boolean = (tts != null) val ttsConfig: StateFlow? get() = tts?.config @@ -308,7 +339,6 @@ class ReaderViewModel( object BookmarkSuccessfullyAdded : FeedbackEvent() object BookmarkFailed : FeedbackEvent() class GoTo(val locator: Locator, val animated: Boolean = false) : FeedbackEvent() - class TtsFailure(val error: Exception) : FeedbackEvent() } class Factory( diff --git a/test-app/src/main/res/values/strings.xml b/test-app/src/main/res/values/strings.xml index a4eebf33a6..75ed7eb1e0 100644 --- a/test-app/src/main/res/values/strings.xml +++ b/test-app/src/main/res/values/strings.xml @@ -205,4 +205,9 @@ Go forward Speech settings Rate + Failed to initialize the TTS engine + The language %s is not supported + The language %s requires additional downloadable data + A networking error occurred + A TTS error occurred From b6a1c6cd94d3260cb3350673b3a69ee4d1ead523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 27 Jun 2022 13:11:34 +0200 Subject: [PATCH 26/59] Handle installing missing TTS voice data --- .../r2/navigator/tts/AndroidTtsEngine.kt | 32 +++++++++-- .../readium/r2/navigator/tts/TtsController.kt | 54 ++++++++++--------- .../org/readium/r2/navigator/tts/TtsEngine.kt | 2 - test-app/build.gradle.kts | 2 +- .../r2/testapp/reader/BaseReaderFragment.kt | 15 ++++++ .../r2/testapp/reader/ReaderViewModel.kt | 43 ++++++++++----- .../r2/testapp/utils/extensions/Context.kt | 27 ++++++++++ test-app/src/main/res/values/strings.xml | 2 +- 8 files changed, 132 insertions(+), 45 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index 4ff875f119..d2cdfe596f 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -7,6 +7,7 @@ package org.readium.r2.navigator.tts import android.content.Context +import android.content.Intent import android.speech.tts.TextToSpeech import android.speech.tts.UtteranceProgressListener import kotlinx.coroutines.* @@ -56,6 +57,27 @@ class AndroidTtsEngine( private val scope = MainScope() + /** + * Start the activity to install additional language data. + * To be called if you receive a [TtsEngine.Exception.LanguageSupportIncomplete] error. + * + * Returns whether the request was successful. + * + * See https://android-developers.googleblog.com/2009/09/introduction-to-text-to-speech-in.html + */ + fun requestInstallMissingVoice(context: Context, intentFlags: Int = Intent.FLAG_ACTIVITY_NEW_TASK): Boolean { + val intent = Intent() + .setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA) + .setFlags(intentFlags) + + if (context.packageManager.queryIntentActivities(intent, 0).isEmpty()) { + return false + } + + context.startActivity(intent) + return true + } + private val _config = MutableStateFlow(config) override val config: StateFlow = _config.asStateFlow() @@ -92,11 +114,6 @@ class AndroidTtsEngine( } } - private val TtsEngine.Utterance.localeOrDefault: Locale get() = - language - ?: config.value.defaultLocale - ?: engine.voice.locale - override fun stop() { speakJob?.cancel() speakJob = null @@ -121,6 +138,11 @@ class AndroidTtsEngine( private fun nextId(): String = idCount++.toString() + private val TtsEngine.Utterance.localeOrDefault: Locale get() = + language + ?: config.value.defaultLocale + ?: engine.voice.locale + // Engine private val init = CompletableDeferred() diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index 7f6a549621..f597aaa879 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -8,9 +8,7 @@ package org.readium.r2.navigator.tts import android.content.Context import kotlinx.coroutines.* -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.* import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrLog @@ -30,12 +28,19 @@ import java.util.* import kotlin.time.Duration.Companion.seconds @ExperimentalReadiumApi -typealias TtsTokenizerFactory = (defaultLocale: Locale?) -> ContentTokenizer +fun interface TtsEngineFactory { + fun create(listener: TtsEngine.Listener): E +} @ExperimentalReadiumApi -class TtsController private constructor( +fun interface TtsTokenizerFactory { + fun create(defaultLocale: Locale?): ContentTokenizer +} + +@ExperimentalReadiumApi +class TtsController private constructor( private val publication: Publication, - engineFactory: TtsEngineFactory, + engineFactory: TtsEngineFactory, private val tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory, var listener: Listener? = null ) : SuspendingCloseable { @@ -43,14 +48,12 @@ class TtsController private constructor( interface Listener { /** * Notifies an [error] occurred while speaking [utterance]. - * - * Return true to continue the playback with the next utterance, or false to interrupt it. */ - fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception): Boolean + fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) } companion object { - val defaultTokenizerFactory: TtsTokenizerFactory = { locale -> TextContentTokenizer(unit = TextUnit.Sentence, defaultLocale = locale) } + val defaultTokenizerFactory: TtsTokenizerFactory = TtsTokenizerFactory { locale -> TextContentTokenizer(unit = TextUnit.Sentence, defaultLocale = locale) } operator fun invoke( context: Context, @@ -59,17 +62,17 @@ class TtsController private constructor( defaultLocale = publication.metadata.locale ), tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory - ): TtsController? = invoke( + ): TtsController? = invoke( publication, engineFactory = { listener -> AndroidTtsEngine(context, config, listener) }, tokenizerFactory = tokenizerFactory ) - operator fun invoke( + operator fun invoke( publication: Publication, - engineFactory: TtsEngineFactory, + engineFactory: TtsEngineFactory, tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory - ): TtsController? { + ): TtsController? { if (!canSpeak(publication)) return null return TtsController(publication, engineFactory, tokenizerFactory) @@ -88,7 +91,14 @@ class TtsController private constructor( private val _state = MutableStateFlow(State.Idle) val state: StateFlow = _state.asStateFlow() - private val engine: TtsEngine by lazy { engineFactory(EngineListener()) } + /** + * Underlying [TtsEngine] instance. + * + * WARNING: Don't control the playback or set the config directly with the engine. Use the + * [TtsController] APIs instead. This property is used to access engine-specific APIs such as + * [AndroidTtsEngine.requestInstallMissingVoice], + */ + val engine: E by lazy { engineFactory.create(EngineListener()) } private val scope = MainScope() init { @@ -229,7 +239,7 @@ class TtsController private constructor( } private fun Content.tokenize(): List = - tokenizerFactory(config.value.defaultLocale) + tokenizerFactory.create(config.value.defaultLocale) .tokenize(this) private fun Content.utterances(): List { @@ -302,15 +312,11 @@ class TtsController private constructor( override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) { scope.launch { - val shouldContinue = listener?.onUtteranceError(utterance, error) ?: true + listener?.onUtteranceError(utterance, error) - if (state.value is State.Playing) { - if (shouldContinue) { - delay(1.seconds) - next() - } else { - _state.value = State.Idle - } + _state.update { state -> + if (state is State.Playing) State.Idle + else state } } } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index f3a3500314..d855a5e836 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -11,8 +11,6 @@ import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.util.SuspendingCloseable import java.util.Locale -typealias TtsEngineFactory = (listener: TtsEngine.Listener) -> TtsEngine - interface TtsEngine : SuspendingCloseable { sealed class Exception private constructor( diff --git a/test-app/build.gradle.kts b/test-app/build.gradle.kts index 59d9c204df..b32520b4b7 100644 --- a/test-app/build.gradle.kts +++ b/test-app/build.gradle.kts @@ -103,7 +103,7 @@ dependencies { implementation("com.github.edrlab.nanohttpd:nanohttpd-nanolets:master-SNAPSHOT") { exclude(group = "org.parboiled") } - implementation("com.google.android.material:material:1.6.0") + implementation("com.google.android.material:material:1.6.1") implementation("com.jakewharton.timber:timber:5.0.1") // AM NOTE: needs to stay this version for now (June 24,2020) implementation("com.squareup.picasso:picasso:2.71828") diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt index c54cc5da09..19d932ba4e 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt @@ -17,6 +17,8 @@ import org.readium.r2.navigator.* import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.publication.Locator import org.readium.r2.testapp.R +import org.readium.r2.testapp.utils.extensions.confirmDialog +import java.util.* /* * Base reader fragment class @@ -41,10 +43,23 @@ abstract class BaseReaderFragment : Fragment() { is ReaderViewModel.FeedbackEvent.BookmarkFailed -> toast(R.string.bookmark_exists) is ReaderViewModel.FeedbackEvent.BookmarkSuccessfullyAdded -> (R.string.bookmark_added) is ReaderViewModel.FeedbackEvent.GoTo -> go(event.locator, animated = event.animated) + is ReaderViewModel.FeedbackEvent.RequestInstallTtsVoice -> + confirmAndInstallTtsVoice(event.locale) } } } + private suspend fun confirmAndInstallTtsVoice(locale: Locale) { + val activity = activity ?: return + if ( + activity.confirmDialog( + getString(R.string.tts_error_language_support_incomplete, locale.displayLanguage) + ) + ) { + model.ttsRequestInstallVoice(activity) + } + } + override fun onStop() { super.onStop() model.ttsPause() diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index 815c5bc743..c88a0dca7c 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -10,13 +10,11 @@ import android.content.Context import android.graphics.Color import android.os.Bundle import androidx.annotation.ColorInt -import androidx.lifecycle.ViewModel -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.viewModelScope +import androidx.lifecycle.* import androidx.paging.* import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @@ -35,18 +33,21 @@ import org.readium.r2.shared.publication.services.search.SearchIterator import org.readium.r2.shared.publication.services.search.SearchTry import org.readium.r2.shared.publication.services.search.search import org.readium.r2.shared.util.Try +import org.readium.r2.testapp.Application import org.readium.r2.testapp.R import org.readium.r2.testapp.bookshelf.BookRepository import org.readium.r2.testapp.domain.model.Highlight import org.readium.r2.testapp.search.SearchPagingSource import org.readium.r2.testapp.utils.EventChannel +import java.util.* +import kotlin.time.Duration.Companion.seconds @OptIn(Search::class, ExperimentalDecorator::class, ExperimentalReadiumApi::class, ExperimentalCoroutinesApi::class) class ReaderViewModel( - context: Context, + application: Application, val readerInitData: ReaderInitData, private val bookRepository: BookRepository, -) : ViewModel() { +) : AndroidViewModel(application) { val publication: Publication = readerInitData.publication @@ -234,11 +235,16 @@ class ReaderViewModel( val isTtsPlaying = MutableStateFlow(false) val ttsDecorations = MutableStateFlow>(emptyList()) - private val tts = TtsController(context, publication)?.apply { + private val tts = TtsController(application, publication)?.apply { listener = object : TtsController.Listener { - override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception): Boolean { - activityChannel.send(Event.Failure(error.toUserException())) - return true // Continue playback with the next utterance. + override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) { + handleTtsException(error) + + // When the voice data is incomplete, the user will be requested to install it. + // For other errors, we jump to the next utterance. + if (error !is TtsEngine.Exception.LanguageSupportIncomplete) { + next() + } } } @@ -248,7 +254,7 @@ class ReaderViewModel( when (state) { is TtsController.State.Failure -> { - activityChannel.send(Event.Failure(state.error.toUserException())) + handleTtsException(state.error) } is TtsController.State.Playing -> { @@ -271,6 +277,14 @@ class ReaderViewModel( .launchIn(viewModelScope) } + private fun handleTtsException(error: TtsEngine.Exception) { + if (error is TtsEngine.Exception.LanguageSupportIncomplete) { + fragmentChannel.send(FeedbackEvent.RequestInstallTtsVoice(error.locale)) + } else { + activityChannel.send(Event.Failure(error.toUserException())) + } + } + private fun TtsEngine.Exception.toUserException(): UserException = when (this) { is TtsEngine.Exception.InitializationFailed -> @@ -326,6 +340,10 @@ class ReaderViewModel( ttsDecorations.value = emptyList() } + fun ttsRequestInstallVoice(context: Context) { + tts?.engine?.requestInstallMissingVoice(context) + } + // Events sealed class Event { @@ -339,10 +357,11 @@ class ReaderViewModel( object BookmarkSuccessfullyAdded : FeedbackEvent() object BookmarkFailed : FeedbackEvent() class GoTo(val locator: Locator, val animated: Boolean = false) : FeedbackEvent() + class RequestInstallTtsVoice(val locale: Locale) : FeedbackEvent() } class Factory( - private val application: org.readium.r2.testapp.Application, + private val application: Application, private val arguments: ReaderActivityContract.Arguments, ) : ViewModelProvider.NewInstanceFactory() { diff --git a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Context.kt b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Context.kt index ff8e2ce248..82da9606a3 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Context.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Context.kt @@ -13,7 +13,13 @@ package org.readium.r2.testapp.utils.extensions import android.content.Context import androidx.annotation.ColorInt import androidx.annotation.ColorRes +import androidx.annotation.StringRes +import androidx.appcompat.app.AlertDialog +import androidx.compose.ui.res.stringResource import androidx.core.content.ContextCompat +import kotlinx.coroutines.suspendCancellableCoroutine +import org.readium.r2.testapp.R +import kotlin.coroutines.resume /** @@ -24,3 +30,24 @@ import androidx.core.content.ContextCompat fun Context.color(@ColorRes id: Int): Int { return ContextCompat.getColor(this, id) } + +suspend fun Context.confirmDialog( + message: String, + @StringRes positiveButton: Int = R.string.ok, + @StringRes negativeButton: Int = R.string.cancel +): Boolean = + suspendCancellableCoroutine { cont -> + AlertDialog.Builder(this) + .setMessage(message) + .setPositiveButton(getString(positiveButton)) { dialog, _ -> + dialog.dismiss() + cont.resume(true) + } + .setNegativeButton(getString(negativeButton)) { dialog, _ -> + dialog.cancel() + } + .setOnCancelListener { + cont.resume(false) + } + .show() + } diff --git a/test-app/src/main/res/values/strings.xml b/test-app/src/main/res/values/strings.xml index 75ed7eb1e0..69416d4dc7 100644 --- a/test-app/src/main/res/values/strings.xml +++ b/test-app/src/main/res/values/strings.xml @@ -207,7 +207,7 @@ Rate Failed to initialize the TTS engine The language %s is not supported - The language %s requires additional downloadable data + The language %s requires additional data. Do you want to download it? A networking error occurred A TTS error occurred From ae631ee5901d3a8da0bc7ac72009a7dc74e9f5e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 27 Jun 2022 16:17:32 +0200 Subject: [PATCH 27/59] Add `Voice` --- .../r2/navigator/tts/AndroidTtsEngine.kt | 49 ++++++++++++++++--- .../readium/r2/navigator/tts/TtsController.kt | 16 +++++- .../org/readium/r2/navigator/tts/TtsEngine.kt | 25 ++++++++-- .../main/java/org/readium/r2/shared/OptIn.kt | 8 +++ .../r2/testapp/reader/ReaderViewModel.kt | 11 +++-- .../r2/testapp/reader/views/TtsControls.kt | 27 ++++------ 6 files changed, 103 insertions(+), 33 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index d2cdfe596f..c7c34de806 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -10,6 +10,7 @@ import android.content.Context import android.content.Intent import android.speech.tts.TextToSpeech import android.speech.tts.UtteranceProgressListener +import android.speech.tts.Voice import kotlinx.coroutines.* import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -57,6 +58,13 @@ class AndroidTtsEngine( private val scope = MainScope() + private val engineListener = EngineListener() + + private val engine = TextToSpeech(context, engineListener).apply { + setOnUtteranceProgressListener(engineListener) + setConfig(config) + } + /** * Start the activity to install additional language data. * To be called if you receive a [TtsEngine.Exception.LanguageSupportIncomplete] error. @@ -87,6 +95,15 @@ class AndroidTtsEngine( return config } + private var _availableLocales = MutableStateFlow(emptySet()) + override val availableLocales: StateFlow> = _availableLocales.asStateFlow() + + private var _availableVoices = MutableStateFlow(emptySet()) + override val availableVoices: StateFlow> = _availableVoices.asStateFlow() + + override fun voiceWithIdentifier(identifier: String): TtsEngine.Voice? = + availableVoices.value.firstOrNull { it.identifier == identifier } + private var speakJob: Job? = null override fun speak(utterance: TtsEngine.Utterance) { @@ -146,12 +163,6 @@ class AndroidTtsEngine( // Engine private val init = CompletableDeferred() - private val engineListener = EngineListener() - - private val engine = TextToSpeech(context, engineListener).apply { - setOnUtteranceProgressListener(engineListener) - setConfig(config) - } private fun TextToSpeech.setConfig(config: Configuration) { setSpeechRate(config.rate.toFloat()) @@ -160,7 +171,31 @@ class AndroidTtsEngine( private inner class EngineListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { override fun onInit(status: Int) { if (status == TextToSpeech.SUCCESS) { - init.complete(Unit) + scope.launch { + withContext(Dispatchers.Default) { + _availableLocales.value = engine.availableLanguages + + _availableVoices.value = engine.voices + .map { + TtsEngine.Voice( + identifier = it.name, + name = it.name, + locale = it.locale, + quality = when (it.quality) { + Voice.QUALITY_VERY_HIGH -> TtsEngine.Voice.Quality.Highest + Voice.QUALITY_HIGH -> TtsEngine.Voice.Quality.High + Voice.QUALITY_LOW -> TtsEngine.Voice.Quality.Low + Voice.QUALITY_VERY_LOW -> TtsEngine.Voice.Quality.Lowest + else -> TtsEngine.Voice.Quality.Normal + }, + requiresNetwork = it.isNetworkConnectionRequired + ) + } + .toSet() + } + + init.complete(Unit) + } } else { listener.onEngineError(TtsEngine.Exception.InitializationFailed()) } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index f597aaa879..5bf9dd89f5 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -7,9 +7,11 @@ package org.readium.r2.navigator.tts import android.content.Context +import android.speech.tts.Voice import kotlinx.coroutines.* import kotlinx.coroutines.flow.* import org.readium.r2.navigator.tts.TtsEngine.Configuration +import org.readium.r2.shared.DelicateReadiumApi import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.publication.Locator @@ -37,6 +39,7 @@ fun interface TtsTokenizerFactory { fun create(defaultLocale: Locale?): ContentTokenizer } +@OptIn(DelicateReadiumApi::class) @ExperimentalReadiumApi class TtsController private constructor( private val publication: Publication, @@ -98,6 +101,7 @@ class TtsController private constructor( * [TtsController] APIs instead. This property is used to access engine-specific APIs such as * [AndroidTtsEngine.requestInstallMissingVoice], */ + @DelicateReadiumApi val engine: E by lazy { engineFactory.create(EngineListener()) } private val scope = MainScope() @@ -112,11 +116,21 @@ class TtsController private constructor( scope.cancel() } - val config: StateFlow get() = engine.config + val config: StateFlow + get() = engine.config fun setConfig(config: Configuration): Configuration = engine.setConfig(config) + val availableLocales: StateFlow> + get() = engine.availableLocales + + val availableVoices: StateFlow> + get() = engine.availableVoices + + fun voiceWithIdentifier(identifier: String): TtsEngine.Voice? = + engine.voiceWithIdentifier(identifier) + fun playPause() { when (state.value) { is State.Failure -> return diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index d855a5e836..7a82cebe1c 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -34,18 +34,37 @@ interface TtsEngine : SuspendingCloseable { data class Configuration( val defaultLocale: Locale? = null, + val voice: Voice? = null, val rate: Double = 1.0, ) + data class Voice( + val identifier: String, + val name: String, + val locale: Locale, + val quality: Quality = Quality.Normal, + val requiresNetwork: Boolean = false, + ) { + enum class Quality { + Lowest, Low, Normal, High, Highest + } + } + + val config: StateFlow + fun setConfig(config: Configuration): Configuration + + val availableLocales: StateFlow> + + val availableVoices: StateFlow> + + fun voiceWithIdentifier(identifier: String): Voice? + data class Utterance( val text: String, val locator: Locator, val language: Locale? ) - val config: StateFlow - fun setConfig(config: Configuration): Configuration - fun speak(utterance: Utterance) fun stop() } \ No newline at end of file diff --git a/readium/shared/src/main/java/org/readium/r2/shared/OptIn.kt b/readium/shared/src/main/java/org/readium/r2/shared/OptIn.kt index f413e0d161..d116b4218f 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/OptIn.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/OptIn.kt @@ -25,6 +25,14 @@ annotation class InternalReadiumApi @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPEALIAS, AnnotationTarget.PROPERTY) annotation class ExperimentalReadiumApi +@RequiresOptIn( + level = RequiresOptIn.Level.WARNING, + message = "This is a delicate API and its use requires care. Make sure you fully read and understand documentation of the declaration that is marked as a delicate API." +) +@Retention(value = AnnotationRetention.BINARY) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPEALIAS, AnnotationTarget.PROPERTY) +annotation class DelicateReadiumApi + @RequiresOptIn( level = RequiresOptIn.Level.WARNING, message = "Support for PDF is still experimental. The API may be changed in the future without notice." diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index c88a0dca7c..512ae6470a 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -24,11 +24,11 @@ import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.epub.EpubNavigatorFragment import org.readium.r2.navigator.tts.TtsController import org.readium.r2.navigator.tts.TtsEngine -import org.readium.r2.shared.ExperimentalReadiumApi -import org.readium.r2.shared.InternalReadiumApi -import org.readium.r2.shared.Search -import org.readium.r2.shared.UserException +import org.readium.r2.shared.* import org.readium.r2.shared.publication.* +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Metadata +import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.services.search.SearchIterator import org.readium.r2.shared.publication.services.search.SearchTry import org.readium.r2.shared.publication.services.search.search @@ -302,6 +302,8 @@ class ReaderViewModel( val canUseTts: Boolean = (tts != null) val ttsConfig: StateFlow? get() = tts?.config + val ttsAvailableLocales: StateFlow>? get() = tts?.availableLocales + fun ttsSetConfig(config: TtsEngine.Configuration) = viewModelScope.launch { tts?.setConfig(config) } @@ -340,6 +342,7 @@ class ReaderViewModel( ttsDecorations.value = emptyList() } + @OptIn(DelicateReadiumApi::class) fun ttsRequestInstallVoice(context: Context) { tts?.engine?.requestInstallMissingVoice(context) } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt index 1d7b1ecd8a..7a9e2cb971 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt @@ -29,6 +29,8 @@ import java.util.* fun TtsControls(viewModel: ReaderViewModel, modifier: Modifier = Modifier) { TtsControls( playing = viewModel.isTtsPlaying.collectAsState().value, + availableLocales = viewModel.ttsAvailableLocales?.collectAsState()?.value ?: emptySet(), + availableVoices = viewModel.ttsAvailableVoices?.collectAsState()?.value ?: emptySet(), config = viewModel.ttsConfig?.collectAsState()?.value, onConfigChange = { viewModel.ttsSetConfig(it) }, onPlayPause = { viewModel.ttsPlayPause() }, @@ -42,6 +44,8 @@ fun TtsControls(viewModel: ReaderViewModel, modifier: Modifier = Modifier) { @Composable fun TtsControls( playing: Boolean, + availableLocales: Set, + availableVoices: Set, config: Configuration?, onConfigChange: (Configuration) -> Unit, onPlayPause: () -> Unit, @@ -54,6 +58,7 @@ fun TtsControls( if (config != null && showSettings) { TtsSettingsDialog( + availableLocales = availableLocales, config = config, onConfigChange = onConfigChange, onDismiss = { showSettings = false } @@ -121,6 +126,7 @@ private val availableRates = listOf(0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0) @Composable private fun TtsSettingsDialog( + availableLocales: Set, config: Configuration, onConfigChange: (Configuration) -> Unit, onDismiss: () -> Unit @@ -147,6 +153,7 @@ private fun TtsSettingsDialog( LocaleSelectorListItem( selection = config.defaultLocale ?: Locale.getDefault(), + locales = availableLocales, onSelected = { onConfigChange(config.copy(defaultLocale = it)) } @@ -159,32 +166,16 @@ private fun TtsSettingsDialog( @Composable fun LocaleSelectorListItem( selection: Locale, - locales: List = Locale.getAvailableLocales() - .toList() - .sortedBy(Locale::getDisplayName), + locales: Set, onSelected: (Locale) -> Unit, enabled: Boolean = true, ) { SelectorListItem( label = stringResource(R.string.language), - values = locales, + values = locales.sortedBy(Locale::getDisplayName), selection = selection, titleOfSelection = { it.displayName }, onSelected = onSelected, enabled = enabled ) -} - -@Preview(showBackground = true) -@Composable -fun PreviewTtsControls() { - TtsControls( - playing = true, - config = Configuration(), - onConfigChange = {}, - onPlayPause = {}, - onStop = {}, - onPrevious = {}, - onNext = {} - ) } \ No newline at end of file From d4b3dd6aeaeb1dee2b4bf7eac336c579593c4a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 27 Jun 2022 19:15:18 +0200 Subject: [PATCH 28/59] Extract the `TtsViewModel` --- .../r2/testapp/reader/AudioReaderFragment.kt | 3 +- .../r2/testapp/reader/BaseReaderFragment.kt | 44 +--- .../r2/testapp/reader/EpubReaderFragment.kt | 14 +- .../r2/testapp/reader/ImageReaderFragment.kt | 9 - .../r2/testapp/reader/PdfReaderFragment.kt | 9 - .../r2/testapp/reader/ReaderActivity.kt | 52 +++-- .../r2/testapp/reader/ReaderInitData.kt | 13 +- .../r2/testapp/reader/ReaderViewModel.kt | 184 ++-------------- .../r2/testapp/reader/VisualReaderFragment.kt | 156 ++++++++++---- .../reader/{views => tts}/TtsControls.kt | 39 ++-- .../r2/testapp/reader/tts/TtsViewModel.kt | 204 ++++++++++++++++++ .../r2/testapp/utils/ViewModelFactory.kt | 48 +++++ .../r2/testapp/utils/extensions/Flow.kt | 48 +++++ 13 files changed, 514 insertions(+), 309 deletions(-) rename test-app/src/main/java/org/readium/r2/testapp/reader/{views => tts}/TtsControls.kt (86%) create mode 100644 test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt create mode 100644 test-app/src/main/java/org/readium/r2/testapp/utils/ViewModelFactory.kt create mode 100644 test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/AudioReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/AudioReaderFragment.kt index 4a7c39fb00..2aa3745000 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/AudioReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/AudioReaderFragment.kt @@ -37,7 +37,6 @@ import kotlin.time.ExperimentalTime @OptIn(ExperimentalMedia2::class, ExperimentalTime::class, ExperimentalCoroutinesApi::class) class AudioReaderFragment : BaseReaderFragment(), SeekBar.OnSeekBarChangeListener { - override val model: ReaderViewModel by activityViewModels() override lateinit var navigator: MediaNavigator private lateinit var displayedPlayback: MediaNavigator.Playback @@ -65,7 +64,7 @@ class AudioReaderFragment : BaseReaderFragment(), SeekBar.OnSeekBarChangeListene binding.publicationTitle.text = model.publication.metadata.title viewLifecycleOwner.lifecycleScope.launch { - model.publication.cover()?.let { + publication.cover()?.let { binding.coverView.setImageBitmap(it) } } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt index 19d932ba4e..c97bc9a563 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt @@ -7,18 +7,17 @@ package org.readium.r2.testapp.reader import android.os.Bundle -import android.view.* -import android.widget.* +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import android.widget.Toast import androidx.fragment.app.Fragment -import androidx.lifecycle.lifecycleScope -import kotlinx.coroutines.launch +import androidx.fragment.app.activityViewModels import org.readium.r2.lcp.lcpLicense -import org.readium.r2.navigator.* -import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.navigator.Navigator import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication import org.readium.r2.testapp.R -import org.readium.r2.testapp.utils.extensions.confirmDialog -import java.util.* /* * Base reader fragment class @@ -27,7 +26,9 @@ import java.util.* */ abstract class BaseReaderFragment : Fragment() { - protected abstract val model: ReaderViewModel + val model: ReaderViewModel by activityViewModels() + protected val publication: Publication get() = model.publication + protected abstract val navigator: Navigator override fun onCreate(savedInstanceState: Bundle?) { @@ -42,29 +43,10 @@ abstract class BaseReaderFragment : Fragment() { when (event) { is ReaderViewModel.FeedbackEvent.BookmarkFailed -> toast(R.string.bookmark_exists) is ReaderViewModel.FeedbackEvent.BookmarkSuccessfullyAdded -> (R.string.bookmark_added) - is ReaderViewModel.FeedbackEvent.GoTo -> go(event.locator, animated = event.animated) - is ReaderViewModel.FeedbackEvent.RequestInstallTtsVoice -> - confirmAndInstallTtsVoice(event.locale) } } } - private suspend fun confirmAndInstallTtsVoice(locale: Locale) { - val activity = activity ?: return - if ( - activity.confirmDialog( - getString(R.string.tts_error_language_support_incomplete, locale.displayLanguage) - ) - ) { - model.ttsRequestInstallVoice(activity) - } - } - - override fun onStop() { - super.onStop() - model.ttsPause() - } - override fun onHiddenChanged(hidden: Boolean) { super.onHiddenChanged(hidden) setMenuVisibility(!hidden) @@ -74,7 +56,6 @@ abstract class BaseReaderFragment : Fragment() { override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) { menuInflater.inflate(R.menu.menu_reader, menu) menu.findItem(R.id.drm).isVisible = model.publication.lcpLicense != null - menu.findItem(R.id.tts).isVisible = model.canUseTts } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -88,10 +69,7 @@ abstract class BaseReaderFragment : Fragment() { R.id.drm -> { model.activityChannel.send(ReaderViewModel.Event.OpenDrmManagementRequested) } - R.id.tts -> { - model.ttsPlay(navigator) - } - else -> return false + else -> return super.onOptionsItemSelected(item) } return true diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt index 4cdf222d72..27a93c29ab 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/EpubReaderFragment.kt @@ -21,7 +21,6 @@ import androidx.core.graphics.drawable.toBitmap import androidx.fragment.app.FragmentResultListener import androidx.fragment.app.commit import androidx.fragment.app.commitNow -import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.delay import org.readium.r2.navigator.ExperimentalDecorator @@ -29,9 +28,11 @@ import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.epub.EpubNavigatorFragment import org.readium.r2.navigator.html.HtmlDecorationTemplate import org.readium.r2.navigator.html.toCss -import org.readium.r2.shared.* +import org.readium.r2.shared.APPEARANCE_REF +import org.readium.r2.shared.InternalReadiumApi +import org.readium.r2.shared.ReadiumCSSName +import org.readium.r2.shared.SCROLL_REF import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Publication import org.readium.r2.testapp.R import org.readium.r2.testapp.epub.UserSettings import org.readium.r2.testapp.search.SearchFragment @@ -40,9 +41,7 @@ import org.readium.r2.testapp.utils.extensions.toDataUrl @OptIn(ExperimentalDecorator::class) class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listener { - override lateinit var model: ReaderViewModel override lateinit var navigator: Navigator - private lateinit var publication: Publication private lateinit var navigatorFragment: EpubNavigatorFragment private lateinit var menuSearch: MenuItem @@ -61,11 +60,6 @@ class EpubReaderFragment : VisualReaderFragment(), EpubNavigatorFragment.Listene isSearchViewIconified = savedInstanceState.getBoolean(IS_SEARCH_VIEW_ICONIFIED) } - ViewModelProvider(requireActivity())[ReaderViewModel::class.java].let { - model = it - publication = it.publication - } - val readerData = model.readerInitData as VisualReaderInitData val baseUrl = checkNotNull(readerData.baseUrl).toString() diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ImageReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ImageReaderFragment.kt index ba6f94d9e0..f04d06df42 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ImageReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ImageReaderFragment.kt @@ -11,24 +11,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.commitNow -import androidx.lifecycle.ViewModelProvider import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.image.ImageNavigatorFragment -import org.readium.r2.shared.publication.Publication import org.readium.r2.testapp.R class ImageReaderFragment : VisualReaderFragment(), ImageNavigatorFragment.Listener { - override lateinit var model: ReaderViewModel override lateinit var navigator: Navigator - private lateinit var publication: Publication override fun onCreate(savedInstanceState: Bundle?) { - ViewModelProvider(requireActivity())[ReaderViewModel::class.java].let { - model = it - publication = it.publication - } - val readerData = model.readerInitData as VisualReaderInitData childFragmentManager.fragmentFactory = diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/PdfReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/PdfReaderFragment.kt index 575fa21631..10a417cb92 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/PdfReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/PdfReaderFragment.kt @@ -12,26 +12,17 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.commitNow -import androidx.lifecycle.ViewModelProvider import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.pdf.PdfNavigatorFragment import org.readium.r2.shared.fetcher.Resource import org.readium.r2.shared.publication.Link -import org.readium.r2.shared.publication.Publication import org.readium.r2.testapp.R class PdfReaderFragment : VisualReaderFragment(), PdfNavigatorFragment.Listener { - override lateinit var model: ReaderViewModel override lateinit var navigator: Navigator - private lateinit var publication: Publication override fun onCreate(savedInstanceState: Bundle?) { - ViewModelProvider(requireActivity())[ReaderViewModel::class.java].let { - model = it - publication = it.publication - } - val readerData = model.readerInitData as VisualReaderInitData childFragmentManager.fragmentFactory = diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt index 201a69411e..a65cb82ddc 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt @@ -13,13 +13,16 @@ import android.os.Bundle import android.view.MenuItem import android.view.WindowManager import android.widget.Toast +import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentResultListener import androidx.fragment.app.commit import androidx.fragment.app.commitNow import androidx.lifecycle.ViewModelProvider +import kotlinx.coroutines.ExperimentalCoroutinesApi import org.readium.navigator.media2.ExperimentalMedia2 +import org.readium.r2.navigator.ExperimentalDecorator import org.readium.r2.shared.UserException import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication @@ -30,28 +33,46 @@ import org.readium.r2.testapp.drm.DrmManagementContract import org.readium.r2.testapp.drm.DrmManagementFragment import org.readium.r2.testapp.outline.OutlineContract import org.readium.r2.testapp.outline.OutlineFragment +import org.readium.r2.testapp.reader.tts.TtsViewModel +import org.readium.r2.testapp.utils.CompositeViewModelFactory /* * An activity to read a publication * * This class can be used as it is or be inherited from. */ +@OptIn(ExperimentalCoroutinesApi::class, ExperimentalDecorator::class) open class ReaderActivity : AppCompatActivity() { - private lateinit var modelFactory: ReaderViewModel.Factory - private lateinit var model: ReaderViewModel + private val model: ReaderViewModel by viewModels() + private val ttsModel: TtsViewModel by viewModels() + + override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory { + val app = application as Application + val arguments = ReaderActivityContract.parseIntent(this) + val readerInitData = + try { + val readerRepository = app.readerRepository.getCompleted() + checkNotNull(readerRepository[arguments.bookId]) + } catch (e: Exception) { + // Fallbacks on a dummy Publication to avoid crashing the app until the Activity finishes. + DummyReaderInitData(arguments.bookId) + } + + return CompositeViewModelFactory( + ReaderViewModel.createFactory(app, readerInitData), + TtsViewModel.createFactory(app, readerInitData.publication), + ViewModelProvider.AndroidViewModelFactory(app) + ) + } + private lateinit var binding: ActivityReaderBinding private lateinit var readerFragment: BaseReaderFragment override fun onCreate(savedInstanceState: Bundle?) { - val arguments = ReaderActivityContract.parseIntent(this) - val app = applicationContext as Application - modelFactory = ReaderViewModel.Factory(app, arguments) - model = ViewModelProvider(this)[ReaderViewModel::class.java] - /* - * [ReaderViewModel.Factory] provides dummy publications if the [ReaderActivity] is restored - * after the app process was killed because the [ReaderRepository] is empty. + * We provide dummy publications if the [ReaderActivity] is restored after the app process + * was killed because the [ReaderRepository] is empty. * In that case, finish the activity as soon as possible and go back to the previous one. */ if (model.publication.readingOrder.isEmpty()) { @@ -77,6 +98,7 @@ open class ReaderActivity : AppCompatActivity() { readerFragment?.let { this.readerFragment = it } model.activityChannel.receive(this) { handleReaderFragmentEvent(it) } + reconfigureActionBar() supportFragmentManager.setFragmentResultListener( @@ -155,10 +177,6 @@ open class ReaderActivity : AppCompatActivity() { ) } - override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory { - return modelFactory - } - override fun finish() { setResult(Activity.RESULT_OK, Intent().putExtras(intent)) super.finish() @@ -168,13 +186,15 @@ open class ReaderActivity : AppCompatActivity() { when(event) { is ReaderViewModel.Event.OpenOutlineRequested -> showOutlineFragment() is ReaderViewModel.Event.OpenDrmManagementRequested -> showDrmManagementFragment() - is ReaderViewModel.Event.Failure -> { - Toast.makeText(this, event.error.getUserMessage(this), Toast.LENGTH_LONG).show() - } + is ReaderViewModel.Event.Failure -> showError(event.error) else -> {} } } + private fun showError(error: UserException) { + Toast.makeText(this, error.getUserMessage(this), Toast.LENGTH_LONG).show() + } + private fun showOutlineFragment() { supportFragmentManager.commit { add(R.id.activity_container, OutlineFragment::class.java, Bundle(), OUTLINE_FRAGMENT_TAG) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderInitData.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderInitData.kt index 7d91266b8c..b64604e82e 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderInitData.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderInitData.kt @@ -8,8 +8,7 @@ package org.readium.r2.testapp.reader import org.readium.navigator.media2.ExperimentalMedia2 import org.readium.navigator.media2.MediaNavigator -import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.* import java.net.URL sealed class ReaderInitData { @@ -29,4 +28,12 @@ data class MediaReaderInitData( override val bookId: Long, override val publication: Publication, val mediaNavigator: MediaNavigator, -) : ReaderInitData() \ No newline at end of file +) : ReaderInitData() + +data class DummyReaderInitData( + override val bookId: Long, +) : ReaderInitData() { + override val publication: Publication = Publication(Manifest( + metadata = Metadata(identifier = "dummy", localizedTitle = LocalizedString("")) + )) +} diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index 512ae6470a..ee0d5f6a31 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -6,48 +6,39 @@ package org.readium.r2.testapp.reader -import android.content.Context import android.graphics.Color import android.os.Bundle import androidx.annotation.ColorInt -import androidx.lifecycle.* +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import androidx.paging.* import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking import org.readium.r2.navigator.Decoration import org.readium.r2.navigator.ExperimentalDecorator -import org.readium.r2.navigator.Navigator -import org.readium.r2.navigator.epub.EpubNavigatorFragment -import org.readium.r2.navigator.tts.TtsController -import org.readium.r2.navigator.tts.TtsEngine -import org.readium.r2.shared.* -import org.readium.r2.shared.publication.* +import org.readium.r2.shared.Search +import org.readium.r2.shared.UserException import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Metadata +import org.readium.r2.shared.publication.LocatorCollection import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.services.search.SearchIterator import org.readium.r2.shared.publication.services.search.SearchTry import org.readium.r2.shared.publication.services.search.search import org.readium.r2.shared.util.Try import org.readium.r2.testapp.Application -import org.readium.r2.testapp.R import org.readium.r2.testapp.bookshelf.BookRepository import org.readium.r2.testapp.domain.model.Highlight import org.readium.r2.testapp.search.SearchPagingSource import org.readium.r2.testapp.utils.EventChannel -import java.util.* -import kotlin.time.Duration.Companion.seconds +import org.readium.r2.testapp.utils.createViewModelFactory -@OptIn(Search::class, ExperimentalDecorator::class, ExperimentalReadiumApi::class, ExperimentalCoroutinesApi::class) +@OptIn(Search::class, ExperimentalDecorator::class, ExperimentalCoroutinesApi::class) class ReaderViewModel( - application: Application, val readerInitData: ReaderInitData, private val bookRepository: BookRepository, -) : AndroidViewModel(application) { +) : ViewModel() { val publication: Publication = readerInitData.publication @@ -61,14 +52,6 @@ class ReaderViewModel( val fragmentChannel: EventChannel = EventChannel(Channel(Channel.BUFFERED), viewModelScope) - override fun onCleared() { - super.onCleared() - - runBlocking { - tts?.close() - } - } - fun saveProgression(locator: Locator) = viewModelScope.launch { bookRepository.saveProgression(locator, bookId) } @@ -229,124 +212,6 @@ class ReaderViewModel( Pager(PagingConfig(pageSize = 20), pagingSourceFactory = pagingSourceFactory) .flow.cachedIn(viewModelScope) - // TTS - - val showTtsControls = MutableStateFlow(false) - val isTtsPlaying = MutableStateFlow(false) - val ttsDecorations = MutableStateFlow>(emptyList()) - - private val tts = TtsController(application, publication)?.apply { - listener = object : TtsController.Listener { - override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) { - handleTtsException(error) - - // When the voice data is incomplete, the user will be requested to install it. - // For other errors, we jump to the next utterance. - if (error !is TtsEngine.Exception.LanguageSupportIncomplete) { - next() - } - } - } - - state - .onEach { state -> - isTtsPlaying.value = (state is TtsController.State.Playing) - - when (state) { - is TtsController.State.Failure -> { - handleTtsException(state.error) - } - - is TtsController.State.Playing -> { - val range = state.range - if (range != null) { - fragmentChannel.send(FeedbackEvent.GoTo(range)) - } else { - ttsDecorations.value = listOf( - Decoration( - id = "tts", - locator = state.utterance.locator, - style = Decoration.Style.Highlight(tint = Color.RED) - ) - ) - } - } - TtsController.State.Idle -> {} - } - } - .launchIn(viewModelScope) - } - - private fun handleTtsException(error: TtsEngine.Exception) { - if (error is TtsEngine.Exception.LanguageSupportIncomplete) { - fragmentChannel.send(FeedbackEvent.RequestInstallTtsVoice(error.locale)) - } else { - activityChannel.send(Event.Failure(error.toUserException())) - } - } - - private fun TtsEngine.Exception.toUserException(): UserException = - when (this) { - is TtsEngine.Exception.InitializationFailed -> - UserException(R.string.tts_error_initialization) - is TtsEngine.Exception.LanguageNotSupported -> - UserException(R.string.tts_error_language_not_supported, locale.displayLanguage) - is TtsEngine.Exception.LanguageSupportIncomplete -> - UserException(R.string.tts_error_language_support_incomplete, locale.displayLanguage) - is TtsEngine.Exception.Network -> - UserException(R.string.tts_error_network) - is TtsEngine.Exception.Other -> - UserException(R.string.tts_error_other) - } - - val canUseTts: Boolean = (tts != null) - val ttsConfig: StateFlow? get() = tts?.config - - val ttsAvailableLocales: StateFlow>? get() = tts?.availableLocales - - fun ttsSetConfig(config: TtsEngine.Configuration) = viewModelScope.launch { - tts?.setConfig(config) - } - - @OptIn(InternalReadiumApi::class) // FIXME - fun ttsPlay(navigator: Navigator) = viewModelScope.launch { - tts?.run { - showTtsControls.value = true - - play( - start = (navigator as? EpubNavigatorFragment)?.firstVisibleElementLocator() - ?: navigator.currentLocator.value - ) - } - } - - fun ttsPlayPause() = viewModelScope.launch { - tts?.playPause() - } - - fun ttsPause() = viewModelScope.launch { - tts?.pause() - } - - fun ttsPrevious() = viewModelScope.launch { - tts?.previous() - } - - fun ttsNext() = viewModelScope.launch { - tts?.next() - } - - fun ttsStop() = viewModelScope.launch { - tts?.pause() - showTtsControls.value = false - ttsDecorations.value = emptyList() - } - - @OptIn(DelicateReadiumApi::class) - fun ttsRequestInstallVoice(context: Context) { - tts?.engine?.requestInstallMissingVoice(context) - } - // Events sealed class Event { @@ -359,37 +224,12 @@ class ReaderViewModel( sealed class FeedbackEvent { object BookmarkSuccessfullyAdded : FeedbackEvent() object BookmarkFailed : FeedbackEvent() - class GoTo(val locator: Locator, val animated: Boolean = false) : FeedbackEvent() - class RequestInstallTtsVoice(val locale: Locale) : FeedbackEvent() } - class Factory( - private val application: Application, - private val arguments: ReaderActivityContract.Arguments, - ) : ViewModelProvider.NewInstanceFactory() { - - @Suppress("UNCHECKED_CAST") - override fun create(modelClass: Class): T = - when { - modelClass.isAssignableFrom(ReaderViewModel::class.java) -> { - val readerInitData = - try { - val readerRepository = application.readerRepository.getCompleted() - readerRepository[arguments.bookId]!! - } catch (e: Exception) { - // Fallbacks on a dummy Publication to avoid crashing the app until the Activity finishes. - dummyReaderInitData(arguments.bookId) - } - ReaderViewModel(application, readerInitData, application.bookRepository) as T - } - else -> - throw IllegalStateException("Cannot create ViewModel for class ${modelClass.simpleName}.") + companion object { + fun createFactory(application: Application, readerInitData: ReaderInitData) = + createViewModelFactory { + ReaderViewModel(readerInitData, application.bookRepository) } - - private fun dummyReaderInitData(bookId: Long): ReaderInitData { - val metadata = Metadata(identifier = "dummy", localizedTitle = LocalizedString("")) - val publication = Publication(Manifest(metadata = metadata)) - return VisualReaderInitData(bookId, publication) - } } } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index 0a1fc5f8f1..a20e6b1fcd 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -13,35 +13,42 @@ import android.graphics.PointF import android.graphics.RectF import android.os.Bundle import android.view.* +import android.view.WindowInsets import android.view.inputmethod.InputMethodManager -import android.widget.EditText -import android.widget.LinearLayout -import android.widget.PopupWindow -import android.widget.TextView +import android.widget.* import androidx.annotation.ColorInt import androidx.appcompat.app.AppCompatActivity -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.systemBarsPadding +import androidx.compose.foundation.layout.* +import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach +import androidx.lifecycle.repeatOnLifecycle +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.* +import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize import org.readium.r2.navigator.* import org.readium.r2.navigator.util.BaseActionModeCallback import org.readium.r2.navigator.util.EdgeTapNavigation +import org.readium.r2.shared.UserException import org.readium.r2.testapp.R import org.readium.r2.testapp.databinding.FragmentReaderBinding import org.readium.r2.testapp.domain.model.Highlight -import org.readium.r2.testapp.reader.views.TtsControls +import org.readium.r2.testapp.reader.tts.TtsViewModel +import org.readium.r2.testapp.reader.tts.TtsControls import org.readium.r2.testapp.utils.* +import org.readium.r2.testapp.utils.extensions.confirmDialog +import org.readium.r2.testapp.utils.extensions.flowWithLocalLifecycle +import org.readium.r2.testapp.utils.extensions.throttleLatest +import java.util.* +import kotlin.time.Duration.Companion.seconds /* * Base reader fragment class @@ -51,6 +58,8 @@ import org.readium.r2.testapp.utils.* @OptIn(ExperimentalDecorator::class) abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.Listener { + protected val ttsModel: TtsViewModel by activityViewModels() + protected var binding: FragmentReaderBinding by viewLifecycle() private lateinit var navigatorFragment: Fragment @@ -69,52 +78,98 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List navigatorFragment = navigator as Fragment - val viewScope = viewLifecycleOwner.lifecycleScope + viewLifecycleOwner.lifecycleScope.launch { + viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { + setupObservers() + } + } + + childFragmentManager.addOnBackStackChangedListener { + updateSystemUiVisibility() + } + binding.fragmentReaderContainer.setOnApplyWindowInsetsListener { container, insets -> + updateSystemUiPadding(container, insets) + insets + } + + binding.overlay.setContent { + Box( + modifier = Modifier + .fillMaxSize() + .systemBarsPadding(), + content = { Overlay() } + ) + } + } + + @Composable + private fun BoxScope.Overlay() { + TtsControls( + model = ttsModel, + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(8.dp) + ) + } + private suspend fun CoroutineScope.setupObservers() { navigator.currentLocator .onEach { model.saveProgression(it) } - .launchIn(viewScope) + .launchIn(this) (navigator as? DecorableNavigator)?.let { navigator -> navigator.addDecorationListener("highlights", decorationListener) model.highlightDecorations .onEach { navigator.applyDecorations(it, "highlights") } - .launchIn(viewScope) + .launchIn(this) model.searchDecorations .onEach { navigator.applyDecorations(it, "search") } - .launchIn(viewScope) + .launchIn(this) - model.ttsDecorations + ttsModel.state + .map { it.decorations } + .distinctUntilChanged() .onEach { navigator.applyDecorations(it, "tts") } - .launchIn(viewScope) - - childFragmentManager.addOnBackStackChangedListener { - updateSystemUiVisibility() - } - binding.fragmentReaderContainer.setOnApplyWindowInsetsListener { container, insets -> - updateSystemUiPadding(container, insets) - insets - } + .launchIn(this) } - binding.overlay.setContent { - Box( - modifier = Modifier - .fillMaxSize() - .systemBarsPadding() - ) { - val showTtsControls by model.showTtsControls.collectAsState() - if (showTtsControls) { - TtsControls( - model, - modifier = Modifier - .align(Alignment.BottomCenter) - .padding(8.dp) - ) + ttsModel.events + .onEach { event -> + when (event) { + is TtsViewModel.Event.OnError -> + showError(event.error) + + is TtsViewModel.Event.OnMissingVoiceData -> + confirmAndInstallTtsVoice(event.locale) } } + .launchIn(this) + + ttsModel.state + .map { it.playingRange } + .filterNotNull() + .throttleLatest(1.seconds) + .onEach { locator -> + navigator.go(locator, animated = false) + } + .launchIn(this) + } + + private fun showError(error: UserException) { + val context = context ?: return + Toast.makeText(context, error.getUserMessage(context), Toast.LENGTH_LONG).show() + } + + private suspend fun confirmAndInstallTtsVoice(locale: Locale) { + val activity = activity ?: return + if ( + activity.confirmDialog( + getString(R.string.tts_error_language_support_incomplete, locale.displayLanguage) + ) + ) { + ttsModel.requestInstallVoice(activity) } } @@ -123,12 +178,35 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List super.onDestroyView() } + override fun onStop() { + super.onStop() + + if (ttsModel.isAvailable) { + ttsModel.pause() + } + } + override fun onHiddenChanged(hidden: Boolean) { super.onHiddenChanged(hidden) setMenuVisibility(!hidden) requireActivity().invalidateOptionsMenu() } + override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) { + super.onCreateOptionsMenu(menu, menuInflater) + menu.findItem(R.id.tts).isVisible = ttsModel.isAvailable + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + when (item.itemId) { + R.id.tts -> { + ttsModel.play(navigator) + } + else -> return super.onOptionsItemSelected(item) + } + return true + } + // DecorableNavigator.Listener private val decorationListener by lazy { DecorationListener() } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt similarity index 86% rename from test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt rename to test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index 7a9e2cb971..212f3e0b1d 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/views/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -4,7 +4,7 @@ * available in the top-level LICENSE file of the project. */ -package org.readium.r2.testapp.reader.views +package org.readium.r2.testapp.reader.tts import androidx.compose.foundation.layout.* import androidx.compose.material.* @@ -14,31 +14,38 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import kotlinx.coroutines.flow.map import org.readium.r2.navigator.tts.TtsEngine import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.testapp.R import org.readium.r2.testapp.reader.ReaderViewModel import org.readium.r2.testapp.shared.views.SelectorListItem +import org.readium.r2.testapp.utils.extensions.flowWithLocalLifecycle import java.text.DecimalFormat import java.util.* @Composable -fun TtsControls(viewModel: ReaderViewModel, modifier: Modifier = Modifier) { - TtsControls( - playing = viewModel.isTtsPlaying.collectAsState().value, - availableLocales = viewModel.ttsAvailableLocales?.collectAsState()?.value ?: emptySet(), - availableVoices = viewModel.ttsAvailableVoices?.collectAsState()?.value ?: emptySet(), - config = viewModel.ttsConfig?.collectAsState()?.value, - onConfigChange = { viewModel.ttsSetConfig(it) }, - onPlayPause = { viewModel.ttsPlayPause() }, - onStop = { viewModel.ttsStop() }, - onPrevious = { viewModel.ttsPrevious() }, - onNext = { viewModel.ttsNext() }, - modifier = modifier - ) +fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { + val state by model.state + .flowWithLocalLifecycle() + .collectAsState() + + if (state.showControls) { + TtsControls( + playing = state.isPlaying, + availableLocales = emptySet(), + availableVoices = emptySet(), + config = state.config, + onConfigChange = model::setConfig, + onPlayPause = model::playPause, + onStop = model::stop, + onPrevious = model::previous, + onNext = model::next, + modifier = modifier + ) + } } @Composable diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt new file mode 100644 index 0000000000..70de5de8e3 --- /dev/null +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -0,0 +1,204 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.testapp.reader.tts + +import android.app.Application +import android.content.Context +import android.graphics.Color +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.* +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import org.readium.r2.navigator.Decoration +import org.readium.r2.navigator.ExperimentalDecorator +import org.readium.r2.navigator.Navigator +import org.readium.r2.navigator.epub.EpubNavigatorFragment +import org.readium.r2.navigator.tts.AndroidTtsEngine +import org.readium.r2.navigator.tts.TtsController +import org.readium.r2.navigator.tts.TtsEngine +import org.readium.r2.shared.DelicateReadiumApi +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.InternalReadiumApi +import org.readium.r2.shared.UserException +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.testapp.R +import org.readium.r2.testapp.utils.createViewModelFactory +import java.util.* +import org.readium.r2.navigator.tts.TtsController.State as TtsState + +@OptIn(ExperimentalReadiumApi::class, ExperimentalDecorator::class) +class TtsViewModel( + application: Application, + publication: Publication +) : AndroidViewModel(application) { + + data class State( + val showControls: Boolean = false, + val isPlaying: Boolean = false, + val playingRange: Locator? = null, + val config: TtsEngine.Configuration = TtsEngine.Configuration(), + val decorations: List = emptyList(), + ) + + sealed class Event { + class OnError(val error: UserException) : Event() + class OnMissingVoiceData(val locale: Locale) : Event() + } + + val isAvailable: Boolean + get() = ::controller.isInitialized + + val state: StateFlow + + private val _events: Channel = Channel(Channel.BUFFERED) + val events: Flow = _events.receiveAsFlow() + + private val isEnabled = MutableStateFlow(false) + private lateinit var controller: TtsController + + init { + val tts = TtsController(application, publication) + if (tts == null) { + state = MutableStateFlow(State()) + + } else { + controller = tts + + tts.listener = object : TtsController.Listener { + override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) { + handleTtsException(error) + + // When the voice data is incomplete, the user will be requested to install it. + // For other errors, we jump to the next utterance. + if (error !is TtsEngine.Exception.LanguageSupportIncomplete) { + next() + } + } + } + + tts.state + .filterIsInstance() + .map(::error) + .onEach(::handleTtsException) + .launchIn(viewModelScope) + + state = combine( + isEnabled, + controller.state, + controller.config + ) { isEnabled, state, config -> + val playing = (state as? TtsState.Playing) + + State( + showControls = isEnabled, + isPlaying = (playing != null), + playingRange = playing?.range, + config = config, + decorations = listOfNotNull(playing?.run { + Decoration( + id = "tts", + locator = utterance.locator, + style = Decoration.Style.Highlight(tint = Color.RED) + ) + }) + ) + }.stateIn(viewModelScope, SharingStarted.Eagerly, initialValue = State()) + } + } + + private fun handleTtsException(error: TtsEngine.Exception) = viewModelScope.launch { + if (error is TtsEngine.Exception.LanguageSupportIncomplete) { + _events.send(Event.OnMissingVoiceData(error.locale)) + } else { + _events.send(Event.OnError(error.toUserException())) + } + } + + private fun TtsEngine.Exception.toUserException(): UserException = + when (this) { + is TtsEngine.Exception.InitializationFailed -> + UserException(R.string.tts_error_initialization) + is TtsEngine.Exception.LanguageNotSupported -> + UserException(R.string.tts_error_language_not_supported, locale.displayLanguage) + is TtsEngine.Exception.LanguageSupportIncomplete -> + UserException(R.string.tts_error_language_support_incomplete, locale.displayLanguage) + is TtsEngine.Exception.Network -> + UserException(R.string.tts_error_network) + is TtsEngine.Exception.Other -> + UserException(R.string.tts_error_other) + } + + override fun onCleared() { + super.onCleared() + + if (isAvailable) { + runBlocking { + controller.close() + } + } + } + +// val ttsAvailableLocales: StateFlow>? get() = tts?.availableLocales +// +// val ttsAvailableVoices: StateFlow>? get() = tts?.run { +// combine(config, availableVoices) { config, voices -> +// voices +// .filter { it.locale.language == config.defaultLocale?.language } +// .toSet() +// } +// } + + fun setConfig(config: TtsEngine.Configuration) { + controller.setConfig(config) + } + + @OptIn(InternalReadiumApi::class) // FIXME + fun play(navigator: Navigator) = viewModelScope.launch { + controller.play( + start = (navigator as? EpubNavigatorFragment)?.firstVisibleElementLocator() + ?: navigator.currentLocator.value + ) + + isEnabled.value = true + } + + fun playPause() { + controller.playPause() + } + + fun pause() { + controller.pause() + } + + fun previous() { + controller.previous() + } + + fun next() { + controller.next() + } + + fun stop() { + controller.pause() + isEnabled.value = false + } + + @OptIn(DelicateReadiumApi::class) + fun requestInstallVoice(context: Context) { + controller.engine.requestInstallMissingVoice(context) + } + + companion object { + fun createFactory(application: Application, publication: Publication) = + createViewModelFactory { + TtsViewModel(application, publication) + } + } +} diff --git a/test-app/src/main/java/org/readium/r2/testapp/utils/ViewModelFactory.kt b/test-app/src/main/java/org/readium/r2/testapp/utils/ViewModelFactory.kt new file mode 100644 index 0000000000..3725b49b2e --- /dev/null +++ b/test-app/src/main/java/org/readium/r2/testapp/utils/ViewModelFactory.kt @@ -0,0 +1,48 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.testapp.utils + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import timber.log.Timber + +/** + * Creates a [ViewModelProvider.Factory] for a single type of [ViewModel] using the result of the + * given [factory] closure. + */ +inline fun createViewModelFactory(crossinline factory: () -> T): ViewModelProvider.Factory = + + object : ViewModelProvider.Factory { + override fun create(modelClass: Class): V { + if (!modelClass.isAssignableFrom(T::class.java)) { + throw IllegalAccessException("Unknown ViewModel class") + } + @Suppress("UNCHECKED_CAST") + return factory() as V + } + } + +/** + * A [ViewModelProvider.Factory] which will iterate over a provided list of [factories] until + * finding one instantiating successfully the requested [ViewModel]. + */ +class CompositeViewModelFactory(private vararg val factories: ViewModelProvider.Factory) : ViewModelProvider.Factory { + + override fun create(modelClass: Class): T { + for (factory in factories) { + try { + return factory.create(modelClass) + } catch (e: IllegalAccessException) { + // Ignored, because the factory didn't handle this model class. + } catch (e: Exception) { + Timber.e(e) + } + } + + throw IllegalAccessException("Unknown ViewModel class") + } +} diff --git a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt new file mode 100644 index 0000000000..516517f8d4 --- /dev/null +++ b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt @@ -0,0 +1,48 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.testapp.utils.extensions + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.flowWithLifecycle +import androidx.lifecycle.lifecycleScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.* +import kotlin.time.Duration + +/** + * See https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda + */ +@Composable +fun Flow.flowWithLocalLifecycle(minActiveState: Lifecycle.State = Lifecycle.State.STARTED): Flow { + val lifecycleOwner = LocalLifecycleOwner.current + return remember(this, lifecycleOwner) { + this.flowWithLifecycle(lifecycleOwner.lifecycle, minActiveState) + } +} + +@Composable +fun StateFlow.flowWithLocalLifecycle(minActiveState: Lifecycle.State = Lifecycle.State.STARTED): StateFlow { + val lifecycleOwner = LocalLifecycleOwner.current + return remember(this, lifecycleOwner) { + this.flowWithLifecycle(lifecycleOwner.lifecycle, minActiveState) + .stateIn(lifecycleOwner.lifecycleScope, SharingStarted.Eagerly, initialValue = value) + } +} + +/** + * Taken from https://github.com/Kotlin/kotlinx.coroutines/issues/1107#issuecomment-1083076517 + */ +fun Flow.throttleLatest(period: Duration): Flow = + flow { + conflate().collect { + emit(it) + delay(period) + } + } \ No newline at end of file From c68d25f64296bc59ded3f2f5cf21608d4aa0cb19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 28 Jun 2022 14:21:21 +0200 Subject: [PATCH 29/59] Refactor language and config constraints --- .../r2/navigator/tts/AndroidTtsEngine.kt | 92 +++++++++---------- .../readium/r2/navigator/tts/TtsController.kt | 35 ++++--- .../org/readium/r2/navigator/tts/TtsEngine.kt | 25 ++--- .../readium/r2/shared/publication/Metadata.kt | 13 ++- .../services/content/ContentIterator.kt | 10 +- .../content/HtmlResourceContentIterator.kt | 3 +- .../org/readium/r2/shared/util/Language.kt | 33 +++++++ .../shared/util/tokenizer/ContentTokenizer.kt | 13 +-- .../r2/shared/util/tokenizer/TextTokenizer.kt | 9 +- .../r2/testapp/reader/VisualReaderFragment.kt | 7 +- .../r2/testapp/reader/tts/TtsControls.kt | 83 +++++++++-------- .../r2/testapp/reader/tts/TtsViewModel.kt | 80 +++++++++++----- .../readium/r2/testapp/shared/views/List.kt | 2 +- test-app/src/main/res/values/strings.xml | 2 + 14 files changed, 240 insertions(+), 167 deletions(-) create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/util/Language.kt diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index c7c34de806..453d689434 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -15,8 +15,11 @@ import kotlinx.coroutines.* import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update import org.readium.r2.navigator.tts.TtsEngine.Configuration +import org.readium.r2.navigator.tts.TtsEngine.ConfigurationConstraints import org.readium.r2.shared.extensions.tryOrLog +import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.MapWithDefaultCompanion import java.util.* @@ -89,20 +92,24 @@ class AndroidTtsEngine( private val _config = MutableStateFlow(config) override val config: StateFlow = _config.asStateFlow() + private var _configConstraints = MutableStateFlow(ConfigurationConstraints( + rateRange = 0.1..3.0 + )) + override val configConstraints: StateFlow = _configConstraints.asStateFlow() + override fun setConfig(config: Configuration): Configuration { engine.setConfig(config) _config.value = config return config } - private var _availableLocales = MutableStateFlow(emptySet()) - override val availableLocales: StateFlow> = _availableLocales.asStateFlow() - - private var _availableVoices = MutableStateFlow(emptySet()) - override val availableVoices: StateFlow> = _availableVoices.asStateFlow() - - override fun voiceWithIdentifier(identifier: String): TtsEngine.Voice? = - availableVoices.value.firstOrNull { it.identifier == identifier } + private suspend fun updateConfigConstraints() = withContext(Dispatchers.Default) { + _configConstraints.update { constraints -> + constraints.copy( + availableVoices = engine.voices.map { it.toVoice() } + ) + } + } private var speakJob: Job? = null @@ -111,15 +118,15 @@ class AndroidTtsEngine( speakJob = scope.launch { init.await() - val locale = utterance.localeOrDefault + val language = utterance.languageOrDefault - val localeResult = engine.setLanguage(locale) + val localeResult = engine.setLanguage(language.locale) if (localeResult < TextToSpeech.LANG_AVAILABLE) { val error = if (localeResult == TextToSpeech.LANG_MISSING_DATA) - TtsEngine.Exception.LanguageSupportIncomplete(locale) + TtsEngine.Exception.LanguageSupportIncomplete(language) else - TtsEngine.Exception.LanguageNotSupported(locale) + TtsEngine.Exception.LanguageNotSupported(language) listener.onUtteranceError(utterance, error) return@launch @@ -155,10 +162,10 @@ class AndroidTtsEngine( private fun nextId(): String = idCount++.toString() - private val TtsEngine.Utterance.localeOrDefault: Locale get() = + private val TtsEngine.Utterance.languageOrDefault: Language get() = language - ?: config.value.defaultLocale - ?: engine.voice.locale + ?: config.value.defaultLanguage + ?: Language(engine.voice.locale) // Engine @@ -166,34 +173,17 @@ class AndroidTtsEngine( private fun TextToSpeech.setConfig(config: Configuration) { setSpeechRate(config.rate.toFloat()) + + voice = + config.voice?.run { voices.firstOrNull { it.name == identifier } } + ?: defaultVoice } private inner class EngineListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { override fun onInit(status: Int) { if (status == TextToSpeech.SUCCESS) { scope.launch { - withContext(Dispatchers.Default) { - _availableLocales.value = engine.availableLanguages - - _availableVoices.value = engine.voices - .map { - TtsEngine.Voice( - identifier = it.name, - name = it.name, - locale = it.locale, - quality = when (it.quality) { - Voice.QUALITY_VERY_HIGH -> TtsEngine.Voice.Quality.Highest - Voice.QUALITY_HIGH -> TtsEngine.Voice.Quality.High - Voice.QUALITY_LOW -> TtsEngine.Voice.Quality.Low - Voice.QUALITY_VERY_LOW -> TtsEngine.Voice.Quality.Lowest - else -> TtsEngine.Voice.Quality.Normal - }, - requiresNetwork = it.isNetworkConnectionRequired - ) - } - .toSet() - } - + updateConfigConstraints() init.complete(Unit) } } else { @@ -222,7 +212,7 @@ class AndroidTtsEngine( val error = EngineException(errorCode) listener.onUtteranceError(utterance, when (error.error) { EngineError.Network, EngineError.NetworkTimeout -> TtsEngine.Exception.Network(error) - EngineError.NotInstalledYet -> TtsEngine.Exception.LanguageSupportIncomplete(utterance.localeOrDefault) + EngineError.NotInstalledYet -> TtsEngine.Exception.LanguageSupportIncomplete(utterance.languageOrDefault) else -> TtsEngine.Exception.Other(error) }) } @@ -240,15 +230,17 @@ class AndroidTtsEngine( } } -// var voice: Voice -// get() = tts.voice -// set(value) { tts.voice = value } -// -// val voices: Map> get() = -// tts.voices.groupBy(Voice::getLocale) -// -// val defaultVoice: Voice -// get() = tts.defaultVoice -// -// val locale = span.language?.let { Locale.forLanguageTag(it.replace("_", "-")) } -// ?: defaultLocale +private fun Voice.toVoice(): TtsEngine.Voice = + TtsEngine.Voice( + identifier = name, + name = name, + language = Language(locale), + quality = when (quality) { + Voice.QUALITY_VERY_HIGH -> TtsEngine.Voice.Quality.Highest + Voice.QUALITY_HIGH -> TtsEngine.Voice.Quality.High + Voice.QUALITY_LOW -> TtsEngine.Voice.Quality.Low + Voice.QUALITY_VERY_LOW -> TtsEngine.Voice.Quality.Lowest + else -> TtsEngine.Voice.Quality.Normal + }, + requiresNetwork = isNetworkConnectionRequired + ) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index 5bf9dd89f5..7b8b8fdda6 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -7,10 +7,13 @@ package org.readium.r2.navigator.tts import android.content.Context -import android.speech.tts.Voice import kotlinx.coroutines.* -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update import org.readium.r2.navigator.tts.TtsEngine.Configuration +import org.readium.r2.navigator.tts.TtsEngine.ConfigurationConstraints import org.readium.r2.shared.DelicateReadiumApi import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrLog @@ -21,13 +24,12 @@ import org.readium.r2.shared.publication.services.content.Content.Data import org.readium.r2.shared.publication.services.content.ContentIterator import org.readium.r2.shared.publication.services.content.contentIterator import org.readium.r2.shared.publication.services.content.isContentIterable +import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.SuspendingCloseable import org.readium.r2.shared.util.tokenizer.ContentTokenizer import org.readium.r2.shared.util.tokenizer.TextContentTokenizer import org.readium.r2.shared.util.tokenizer.TextUnit -import timber.log.Timber import java.util.* -import kotlin.time.Duration.Companion.seconds @ExperimentalReadiumApi fun interface TtsEngineFactory { @@ -36,7 +38,7 @@ fun interface TtsEngineFactory { @ExperimentalReadiumApi fun interface TtsTokenizerFactory { - fun create(defaultLocale: Locale?): ContentTokenizer + fun create(defaultLanguage: Language?): ContentTokenizer } @OptIn(DelicateReadiumApi::class) @@ -56,13 +58,13 @@ class TtsController private constructor( } companion object { - val defaultTokenizerFactory: TtsTokenizerFactory = TtsTokenizerFactory { locale -> TextContentTokenizer(unit = TextUnit.Sentence, defaultLocale = locale) } + val defaultTokenizerFactory: TtsTokenizerFactory = TtsTokenizerFactory { language -> TextContentTokenizer(unit = TextUnit.Sentence, defaultLanguage = language) } operator fun invoke( context: Context, publication: Publication, config: Configuration = Configuration( - defaultLocale = publication.metadata.locale + defaultLanguage = publication.metadata.language ), tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory ): TtsController? = invoke( @@ -119,17 +121,14 @@ class TtsController private constructor( val config: StateFlow get() = engine.config + val configConstraints: StateFlow + get() = engine.configConstraints + fun setConfig(config: Configuration): Configuration = engine.setConfig(config) - val availableLocales: StateFlow> - get() = engine.availableLocales - - val availableVoices: StateFlow> - get() = engine.availableVoices - fun voiceWithIdentifier(identifier: String): TtsEngine.Voice? = - engine.voiceWithIdentifier(identifier) + configConstraints.value.availableVoices.firstOrNull { it.identifier == identifier } fun playPause() { when (state.value) { @@ -253,18 +252,18 @@ class TtsController private constructor( } private fun Content.tokenize(): List = - tokenizerFactory.create(config.value.defaultLocale) + tokenizerFactory.create(config.value.defaultLanguage) .tokenize(this) private fun Content.utterances(): List { - fun utterance(text: String, locator: Locator, language: Locale? = null): TtsEngine.Utterance? { + fun utterance(text: String, locator: Locator, language: Language? = null): TtsEngine.Utterance? { if (!text.any { it.isLetterOrDigit() }) return null return TtsEngine.Utterance( text = text, locator = locator, - language = language + language = language?.takeIf { it != publication.metadata.language } ) } @@ -282,7 +281,7 @@ class TtsController private constructor( utterance( text = span.text, locator = span.locator, - language = span.locale + language = span.language ) } } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index 7a82cebe1c..1d9df37c29 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -8,8 +8,9 @@ package org.readium.r2.navigator.tts import kotlinx.coroutines.flow.StateFlow import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.SuspendingCloseable -import java.util.Locale +import java.util.* interface TtsEngine : SuspendingCloseable { @@ -19,8 +20,8 @@ interface TtsEngine : SuspendingCloseable { ) : kotlin.Exception(message, cause) { /** Failed to initialize the TTS engine. */ class InitializationFailed(cause: Throwable? = null) : Exception("The TTS engine failed to initialize", cause) - class LanguageNotSupported(val locale: Locale, cause: Throwable? = null) : Exception("The language ${locale.toLanguageTag()} is not supported by the TTS engine", cause) - class LanguageSupportIncomplete(val locale: Locale, cause: Throwable? = null) : Exception("The language ${locale.toLanguageTag()} requires additional files by the TTS engine", cause) + class LanguageNotSupported(val language: Language, cause: Throwable? = null) : Exception("The language ${language.code} is not supported by the TTS engine", cause) + class LanguageSupportIncomplete(val language: Language, cause: Throwable? = null) : Exception("The language ${language.code} requires additional files by the TTS engine", cause) class Network(cause: Throwable? = null) : Exception("A network error occurred", cause) class Other(override val cause: Throwable) : Exception(cause.message ?: "An unknown error occurred", cause) } @@ -33,15 +34,20 @@ interface TtsEngine : SuspendingCloseable { } data class Configuration( - val defaultLocale: Locale? = null, + val defaultLanguage: Language? = null, val voice: Voice? = null, val rate: Double = 1.0, ) + data class ConfigurationConstraints( + val rateRange: ClosedRange = 1.0..1.0, + val availableVoices: List = emptyList() + ) + data class Voice( val identifier: String, val name: String, - val locale: Locale, + val language: Language, val quality: Quality = Quality.Normal, val requiresNetwork: Boolean = false, ) { @@ -51,18 +57,13 @@ interface TtsEngine : SuspendingCloseable { } val config: StateFlow + val configConstraints: StateFlow fun setConfig(config: Configuration): Configuration - val availableLocales: StateFlow> - - val availableVoices: StateFlow> - - fun voiceWithIdentifier(identifier: String): Voice? - data class Utterance( val text: String, val locator: Locator, - val language: Locale? + val language: Language? ) fun speak(utterance: Utterance) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt index d08ea53329..edfdece263 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt @@ -18,6 +18,7 @@ import org.readium.r2.shared.JSONable import org.readium.r2.shared.extensions.* import org.readium.r2.shared.publication.presentation.Presentation import org.readium.r2.shared.publication.presentation.presentation +import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.logging.WarningLogger import org.readium.r2.shared.util.logging.log import java.util.* @@ -154,13 +155,19 @@ data class Metadata( belongsTo["series"] ?: emptyList() /** - * Returns the [Locale] resolved from the declared BCP 47 language. + * Returns the [Language] resolved from the first declared BCP 47 language. */ @IgnoredOnParcel - val locale: Locale? by lazy { - languages.firstOrNull()?.let { Locale.forLanguageTag(it.replace("_", "-")) } + val language: Language? by lazy { + languages.firstOrNull()?.let { Language(it) } } + /** + * Returns the [Locale] resolved from the declared BCP 47 language. + */ + @IgnoredOnParcel + val locale: Locale? get() = language?.locale + /** * Computes a [ReadingProgression] when the value of [readingProgression] is set to * auto, using the publication language. diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt index 9d12493f6c..4bf6a6fc18 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt @@ -8,6 +8,7 @@ package org.readium.r2.shared.publication.services.content import org.readium.r2.shared.publication.Link import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.SuspendingCloseable import java.util.* @@ -40,15 +41,10 @@ data class Content( data class Span( val locator: Locator, - // FIXME: Language type - val language: String?, + val language: Language?, val text: String, val extras: Map = emptyMap() - ) { - val locale: Locale? - get() = language - ?.let { Locale.forLanguageTag(it.replace("_", "-")) } - } + ) } } } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt index 6000ac9577..58f8f89ecc 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt @@ -21,6 +21,7 @@ import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.html.cssSelector import org.readium.r2.shared.publication.services.content.Content.Data import org.readium.r2.shared.util.Href +import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.mediatype.MediaType import org.readium.r2.shared.util.use @@ -238,7 +239,7 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) before = wholeRawTextAcc.takeLast(50) // FIXME: custom length ) ), - language = currentLanguage, + language = currentLanguage?.let { Language(it) }, text = text )) } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/Language.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/Language.kt new file mode 100644 index 0000000000..d8614cfef5 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/Language.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.util + +import java.util.* + +class Language private constructor(val code: String, val locale: Locale) { + + constructor(locale: Locale) : this(code = locale.toLanguageTag(), locale = locale) + + companion object { + operator fun invoke(code: String): Language { + val fixedCode = code.replace("_", "-") + return Language(code = fixedCode, locale = Locale.forLanguageTag(code)) + } + } + + val isRegional: Boolean = + locale.country.isNotEmpty() + + fun removeRegion(): Language = + Language(code.split("-", limit = 2).first()) + + override fun equals(other: Any?): Boolean = + code == (other as? Language)?.code + + override fun hashCode(): Int = + code.hashCode() +} \ No newline at end of file diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt index 05fa6d555c..084a43ba4e 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt @@ -10,6 +10,7 @@ import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.services.content.Content import org.readium.r2.shared.publication.services.content.Content.Data +import org.readium.r2.shared.util.Language import java.util.* /** A tokenizer splitting a [Content] into smaller pieces. */ @@ -21,16 +22,16 @@ fun interface ContentTokenizer : Tokenizer */ @ExperimentalReadiumApi class TextContentTokenizer( - private val defaultLocale: Locale?, - private val textTokenizerFactory: (Locale?) -> TextTokenizer + private val defaultLanguage: Language?, + private val textTokenizerFactory: (Language?) -> TextTokenizer ) : ContentTokenizer { /** * A [ContentTokenizer] using the default [TextTokenizer] to split the text of the [Content]. */ - constructor(defaultLocale: Locale?, unit: TextUnit) : this( - defaultLocale = defaultLocale, - textTokenizerFactory = { locale -> DefaultTextContentTokenizer(unit, locale) } + constructor(defaultLanguage: Language?, unit: TextUnit) : this( + defaultLanguage = defaultLanguage, + textTokenizerFactory = { language -> DefaultTextContentTokenizer(unit, language) } ) override fun tokenize(data: Content): List = listOf( @@ -46,7 +47,7 @@ class TextContentTokenizer( ) private fun tokenize(span: Data.Text.Span): List = - textTokenizerFactory(span.locale ?: defaultLocale).tokenize(span.text) + textTokenizerFactory(span.language ?: defaultLanguage).tokenize(span.text) .map { range -> span.copy( locator = span.locator.copy(text = extractTextContextIn(span.text, range)), diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt index 0e680d5162..63416f762a 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt @@ -10,6 +10,7 @@ import android.icu.text.BreakIterator import android.os.Build import androidx.annotation.RequiresApi import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.util.Language import java.util.* /** A tokenizer splitting a String into range tokens (e.g. words, sentences, etc.). */ @@ -30,9 +31,9 @@ enum class TextUnit { class DefaultTextContentTokenizer private constructor( private val tokenizer: TextTokenizer ) : TextTokenizer by tokenizer { - constructor(unit: TextUnit, locale: Locale?) : this( + constructor(unit: TextUnit, language: Language?) : this( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - IcuTokenizer(locale = locale, unit = unit) + IcuTokenizer(language = language, unit = unit) else NaiveTokenizer(unit = unit) ) @@ -44,12 +45,12 @@ class DefaultTextContentTokenizer private constructor( */ @ExperimentalReadiumApi @RequiresApi(Build.VERSION_CODES.N) -class IcuTokenizer(locale: Locale?, unit: TextUnit) : TextTokenizer { +class IcuTokenizer(language: Language?, unit: TextUnit) : TextTokenizer { private val iterator: BreakIterator init { - val loc = locale ?: Locale.ROOT + val loc = language?.locale ?: Locale.ROOT iterator = when (unit) { TextUnit.Word -> BreakIterator.getWordInstance(loc) TextUnit.Sentence -> BreakIterator.getSentenceInstance(loc) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index a20e6b1fcd..c782cb6b66 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -38,6 +38,7 @@ import org.readium.r2.navigator.* import org.readium.r2.navigator.util.BaseActionModeCallback import org.readium.r2.navigator.util.EdgeTapNavigation import org.readium.r2.shared.UserException +import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R import org.readium.r2.testapp.databinding.FragmentReaderBinding import org.readium.r2.testapp.domain.model.Highlight @@ -142,7 +143,7 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List showError(event.error) is TtsViewModel.Event.OnMissingVoiceData -> - confirmAndInstallTtsVoice(event.locale) + confirmAndInstallTtsVoice(event.language) } } .launchIn(this) @@ -162,11 +163,11 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List Toast.makeText(context, error.getUserMessage(context), Toast.LENGTH_LONG).show() } - private suspend fun confirmAndInstallTtsVoice(locale: Locale) { + private suspend fun confirmAndInstallTtsVoice(language: Language) { val activity = activity ?: return if ( activity.confirmDialog( - getString(R.string.tts_error_language_support_incomplete, locale.displayLanguage) + getString(R.string.tts_error_language_support_incomplete, language.locale.displayLanguage) ) ) { ttsModel.requestInstallVoice(activity) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index 212f3e0b1d..2f08276169 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -15,12 +15,11 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.lifecycle.viewmodel.compose.viewModel -import kotlinx.coroutines.flow.map import org.readium.r2.navigator.tts.TtsEngine import org.readium.r2.navigator.tts.TtsEngine.Configuration +import org.readium.r2.navigator.tts.TtsEngine.Voice +import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R -import org.readium.r2.testapp.reader.ReaderViewModel import org.readium.r2.testapp.shared.views.SelectorListItem import org.readium.r2.testapp.utils.extensions.flowWithLocalLifecycle import java.text.DecimalFormat @@ -32,12 +31,17 @@ fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { .flowWithLocalLifecycle() .collectAsState() + val settings by model.settings + .flowWithLocalLifecycle() + .collectAsState() + if (state.showControls) { TtsControls( playing = state.isPlaying, - availableLocales = emptySet(), - availableVoices = emptySet(), - config = state.config, + rateRange = settings.rateRange, + availableLanguages = settings.availableLanguages, + availableVoices = settings.availableVoices, + config = settings.config, onConfigChange = model::setConfig, onPlayPause = model::playPause, onStop = model::stop, @@ -51,8 +55,9 @@ fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { @Composable fun TtsControls( playing: Boolean, - availableLocales: Set, - availableVoices: Set, + rateRange: ClosedRange, + availableLanguages: List, + availableVoices: List, config: Configuration?, onConfigChange: (Configuration) -> Unit, onPlayPause: () -> Unit, @@ -65,7 +70,9 @@ fun TtsControls( if (config != null && showSettings) { TtsSettingsDialog( - availableLocales = availableLocales, + rateRange = rateRange, + availableLanguages = availableLanguages, + availableVoices = availableVoices, config = config, onConfigChange = onConfigChange, onDismiss = { showSettings = false } @@ -133,7 +140,9 @@ private val availableRates = listOf(0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0) @Composable private fun TtsSettingsDialog( - availableLocales: Set, + rateRange: ClosedRange, + availableLanguages: List, + availableVoices: List, config: Configuration, onConfigChange: (Configuration) -> Unit, onDismiss: () -> Unit @@ -148,41 +157,35 @@ private fun TtsSettingsDialog( title = { Text(stringResource(R.string.tts_settings)) }, text = { Column { + if (rateRange.start < rateRange.endInclusive) { + SelectorListItem( + label = stringResource(R.string.tts_rate), + values = availableRates + .filter { it in rateRange }, + selection = config.rate, + titleOfSelection = { DecimalFormat("x#.##").format(it) }, + onSelected = { + onConfigChange(config.copy(rate = it)) + } + ) + } + SelectorListItem( - label = stringResource(R.string.tts_rate), - values = availableRates, - selection = config.rate, - titleOfSelection = { DecimalFormat("x#.##").format(it) }, - onSelected = { - onConfigChange(config.copy(rate = it)) - } + label = stringResource(R.string.language), + values = availableLanguages, + selection = config.defaultLanguage, + titleOfSelection = { it?.locale?.displayName ?: stringResource(R.string.auto) }, + onSelected = { onConfigChange(config.copy(defaultLanguage = it, voice = null)) } ) - LocaleSelectorListItem( - selection = config.defaultLocale ?: Locale.getDefault(), - locales = availableLocales, - onSelected = { - onConfigChange(config.copy(defaultLocale = it)) - } + SelectorListItem( + label = stringResource(R.string.voice), + values = availableVoices, + selection = config.voice, + titleOfSelection = { it?.name ?: stringResource(R.string.auto) }, + onSelected = { onConfigChange(config.copy(voice = it)) } ) } } ) -} - -@Composable -fun LocaleSelectorListItem( - selection: Locale, - locales: Set, - onSelected: (Locale) -> Unit, - enabled: Boolean = true, -) { - SelectorListItem( - label = stringResource(R.string.language), - values = locales.sortedBy(Locale::getDisplayName), - selection = selection, - titleOfSelection = { it.displayName }, - onSelected = onSelected, - enabled = enabled - ) } \ No newline at end of file diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 70de5de8e3..c60167e21c 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -22,15 +22,16 @@ import org.readium.r2.navigator.epub.EpubNavigatorFragment import org.readium.r2.navigator.tts.AndroidTtsEngine import org.readium.r2.navigator.tts.TtsController import org.readium.r2.navigator.tts.TtsEngine +import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.DelicateReadiumApi import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.UserException import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R import org.readium.r2.testapp.utils.createViewModelFactory -import java.util.* import org.readium.r2.navigator.tts.TtsController.State as TtsState @OptIn(ExperimentalReadiumApi::class, ExperimentalDecorator::class) @@ -43,19 +44,26 @@ class TtsViewModel( val showControls: Boolean = false, val isPlaying: Boolean = false, val playingRange: Locator? = null, - val config: TtsEngine.Configuration = TtsEngine.Configuration(), val decorations: List = emptyList(), ) + data class Settings( + val config: TtsEngine.Configuration = TtsEngine.Configuration(), + val rateRange: ClosedRange = 1.0..1.0, + val availableLanguages: List = emptyList(), + val availableVoices: List = emptyList(), + ) + sealed class Event { class OnError(val error: UserException) : Event() - class OnMissingVoiceData(val locale: Locale) : Event() + class OnMissingVoiceData(val language: Language) : Event() } val isAvailable: Boolean get() = ::controller.isInitialized val state: StateFlow + val settings: StateFlow private val _events: Channel = Channel(Channel.BUFFERED) val events: Flow = _events.receiveAsFlow() @@ -67,6 +75,7 @@ class TtsViewModel( val tts = TtsController(application, publication) if (tts == null) { state = MutableStateFlow(State()) + settings = MutableStateFlow(Settings()) } else { controller = tts @@ -89,18 +98,13 @@ class TtsViewModel( .onEach(::handleTtsException) .launchIn(viewModelScope) - state = combine( - isEnabled, - controller.state, - controller.config - ) { isEnabled, state, config -> + state = combine(isEnabled, controller.state) { isEnabled, state -> val playing = (state as? TtsState.Playing) State( showControls = isEnabled, isPlaying = (playing != null), playingRange = playing?.range, - config = config, decorations = listOfNotNull(playing?.run { Decoration( id = "tts", @@ -110,12 +114,54 @@ class TtsViewModel( }) ) }.stateIn(viewModelScope, SharingStarted.Eagerly, initialValue = State()) + + val rateRange: Flow> = + controller.configConstraints + .map { it.rateRange } + + val voicesByLanguage: Flow>> = + controller.configConstraints + .map { + it.availableVoices + .groupBy { v -> v.language.removeRegion() } + } + + val languages: Flow> = voicesByLanguage + .map { + it.keys + .sortedBy { l -> l.locale.displayName } + } + + val voicesForSelectedLanguage: Flow> = + combine( + controller.config.map { it.defaultLanguage }, + voicesByLanguage + ) { language, voices -> + language + ?.let { voices[it.removeRegion()] } + ?.sortedBy { it.language.locale.displayCountry } + ?: emptyList() + } + + settings = combine( + controller.config, + rateRange, + languages, + voicesForSelectedLanguage, + ) { config, rates, langs, voices -> + Settings( + config = config, + rateRange = rates, + availableLanguages = langs, + availableVoices = voices + ) + }.stateIn(viewModelScope, SharingStarted.Eagerly, initialValue = Settings()) } } private fun handleTtsException(error: TtsEngine.Exception) = viewModelScope.launch { if (error is TtsEngine.Exception.LanguageSupportIncomplete) { - _events.send(Event.OnMissingVoiceData(error.locale)) + _events.send(Event.OnMissingVoiceData(error.language)) } else { _events.send(Event.OnError(error.toUserException())) } @@ -126,9 +172,9 @@ class TtsViewModel( is TtsEngine.Exception.InitializationFailed -> UserException(R.string.tts_error_initialization) is TtsEngine.Exception.LanguageNotSupported -> - UserException(R.string.tts_error_language_not_supported, locale.displayLanguage) + UserException(R.string.tts_error_language_not_supported, language.locale.displayName) is TtsEngine.Exception.LanguageSupportIncomplete -> - UserException(R.string.tts_error_language_support_incomplete, locale.displayLanguage) + UserException(R.string.tts_error_language_support_incomplete, language.locale.displayName) is TtsEngine.Exception.Network -> UserException(R.string.tts_error_network) is TtsEngine.Exception.Other -> @@ -145,16 +191,6 @@ class TtsViewModel( } } -// val ttsAvailableLocales: StateFlow>? get() = tts?.availableLocales -// -// val ttsAvailableVoices: StateFlow>? get() = tts?.run { -// combine(config, availableVoices) { config, voices -> -// voices -// .filter { it.locale.language == config.defaultLocale?.language } -// .toSet() -// } -// } - fun setConfig(config: TtsEngine.Configuration) { controller.setConfig(config) } diff --git a/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt b/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt index b4348a9a68..fe9211a737 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt @@ -23,7 +23,7 @@ fun SelectorListItem( selection: T, titleOfSelection: @Composable (T) -> String, onSelected: (T) -> Unit, - enabled: Boolean = true, + enabled: Boolean = values.isNotEmpty(), ) { var isExpanded by remember { mutableStateOf(false) } fun dismiss() { isExpanded = false } diff --git a/test-app/src/main/res/values/strings.xml b/test-app/src/main/res/values/strings.xml index 69416d4dc7..a3a5b3aadc 100644 --- a/test-app/src/main/res/values/strings.xml +++ b/test-app/src/main/res/values/strings.xml @@ -210,4 +210,6 @@ The language %s requires additional data. Do you want to download it? A networking error occurred A TTS error occurred + Auto + Voice From 998e18fab276ee94ed5b384b5a1f0c038328dcbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 28 Jun 2022 15:36:50 +0200 Subject: [PATCH 30/59] Improve voice selection --- .../r2/navigator/tts/AndroidTtsEngine.kt | 50 ++++++---- .../org/readium/r2/navigator/tts/TtsEngine.kt | 2 +- .../java/org/readium/r2/shared/util/Either.kt | 9 ++ .../r2/testapp/reader/tts/TtsControls.kt | 99 ++++++++++++++----- .../r2/testapp/reader/tts/TtsViewModel.kt | 7 +- .../readium/r2/testapp/shared/views/List.kt | 7 +- test-app/src/main/res/values/strings.xml | 2 + 7 files changed, 131 insertions(+), 45 deletions(-) create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index 453d689434..238f267b98 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -18,11 +18,12 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.navigator.tts.TtsEngine.ConfigurationConstraints +import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.MapWithDefaultCompanion -import java.util.* +@OptIn(InternalReadiumApi::class) class AndroidTtsEngine( context: Context, config: Configuration = Configuration(), @@ -118,17 +119,7 @@ class AndroidTtsEngine( speakJob = scope.launch { init.await() - val language = utterance.languageOrDefault - - val localeResult = engine.setLanguage(language.locale) - if (localeResult < TextToSpeech.LANG_AVAILABLE) { - val error = - if (localeResult == TextToSpeech.LANG_MISSING_DATA) - TtsEngine.Exception.LanguageSupportIncomplete(language) - else - TtsEngine.Exception.LanguageNotSupported(language) - - listener.onUtteranceError(utterance, error) + if (!setupVoiceForUtterance(utterance)) { return@launch } @@ -138,6 +129,35 @@ class AndroidTtsEngine( } } + private fun setupVoiceForUtterance(utterance: TtsEngine.Utterance): Boolean { + // Setup the user selected voice. + val voice = config.value.voice + val language = utterance.languageOrDefault + if (voice != null && voice.language.removeRegion() == language.removeRegion()) { + engine.voices + .firstOrNull { it.name == voice.identifier } + ?.let { + engine.voice = it + return true + } + } + + // Or fallback on the language. + val localeResult = engine.setLanguage(language.locale) + if (localeResult < TextToSpeech.LANG_AVAILABLE) { + val error = + if (localeResult == TextToSpeech.LANG_MISSING_DATA) + TtsEngine.Exception.LanguageSupportIncomplete(language) + else + TtsEngine.Exception.LanguageNotSupported(language) + + listener.onUtteranceError(utterance, error) + return false + } + + return true + } + override fun stop() { speakJob?.cancel() speakJob = null @@ -173,10 +193,6 @@ class AndroidTtsEngine( private fun TextToSpeech.setConfig(config: Configuration) { setSpeechRate(config.rate.toFloat()) - - voice = - config.voice?.run { voices.firstOrNull { it.name == identifier } } - ?: defaultVoice } private inner class EngineListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { @@ -233,7 +249,7 @@ class AndroidTtsEngine( private fun Voice.toVoice(): TtsEngine.Voice = TtsEngine.Voice( identifier = name, - name = name, + name = null, language = Language(locale), quality = when (quality) { Voice.QUALITY_VERY_HIGH -> TtsEngine.Voice.Quality.Highest diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index 1d9df37c29..de84786646 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -46,7 +46,7 @@ interface TtsEngine : SuspendingCloseable { data class Voice( val identifier: String, - val name: String, + val name: String? = null, val language: Language, val quality: Quality = Quality.Normal, val requiresNetwork: Boolean = false, diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt new file mode 100644 index 0000000000..ee9d4b7359 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt @@ -0,0 +1,9 @@ +package org.readium.r2.shared.util + +import org.readium.r2.shared.InternalReadiumApi + +@InternalReadiumApi +sealed class Either { + class Left(val left: A) : Either() + class Right(val right: B) : Either() +} diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index 2f08276169..9cd259e31a 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -6,6 +6,8 @@ package org.readium.r2.testapp.reader.tts +import android.content.Context +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.material.icons.Icons @@ -13,9 +15,9 @@ import androidx.compose.material.icons.filled.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import org.readium.r2.navigator.tts.TtsEngine import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.util.Language @@ -23,26 +25,32 @@ import org.readium.r2.testapp.R import org.readium.r2.testapp.shared.views.SelectorListItem import org.readium.r2.testapp.utils.extensions.flowWithLocalLifecycle import java.text.DecimalFormat -import java.util.* @Composable fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { val state by model.state - .flowWithLocalLifecycle() - .collectAsState() + .flowWithLocalLifecycle().collectAsState() val settings by model.settings - .flowWithLocalLifecycle() - .collectAsState() + .flowWithLocalLifecycle().collectAsState() + + val allowNetwork by model.allowVoicesRequiringNetwork + .flowWithLocalLifecycle().collectAsState() if (state.showControls) { TtsControls( playing = state.isPlaying, - rateRange = settings.rateRange, + availableRates = listOf(0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0) + .filter { it in settings.rateRange }, availableLanguages = settings.availableLanguages, availableVoices = settings.availableVoices, config = settings.config, onConfigChange = model::setConfig, + allowNetwork = allowNetwork, + onAllowNetworkChange = { + model.setConfig(settings.config.copy(voice = null)) + model.allowVoicesRequiringNetwork.value = it + }, onPlayPause = model::playPause, onStop = model::stop, onPrevious = model::previous, @@ -55,11 +63,13 @@ fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { @Composable fun TtsControls( playing: Boolean, - rateRange: ClosedRange, + availableRates: List, availableLanguages: List, availableVoices: List, config: Configuration?, onConfigChange: (Configuration) -> Unit, + allowNetwork: Boolean, + onAllowNetworkChange: (Boolean) -> Unit, onPlayPause: () -> Unit, onStop: () -> Unit, onPrevious: () -> Unit, @@ -70,11 +80,13 @@ fun TtsControls( if (config != null && showSettings) { TtsSettingsDialog( - rateRange = rateRange, + availableRates = availableRates, availableLanguages = availableLanguages, availableVoices = availableVoices, config = config, onConfigChange = onConfigChange, + allowNetwork = allowNetwork, + onAllowNetworkChange = onAllowNetworkChange, onDismiss = { showSettings = false } ) } @@ -86,6 +98,8 @@ fun TtsControls( horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically, ) { + val largeButtonModifier = Modifier.size(40.dp) + IconButton(onClick = onPrevious) { Icon( imageVector = Icons.Default.SkipPrevious, @@ -103,7 +117,7 @@ fun TtsControls( if (playing) R.string.tts_pause else R.string.tts_play ), - modifier = Modifier.then(IconButtonLargeSizeModifier) + modifier = Modifier.then(largeButtonModifier) ) } IconButton( @@ -112,7 +126,7 @@ fun TtsControls( Icon( imageVector = Icons.Default.Stop, contentDescription = stringResource(R.string.tts_stop), - modifier = Modifier.then(IconButtonLargeSizeModifier) + modifier = Modifier.then(largeButtonModifier) ) } IconButton(onClick = onNext) { @@ -134,19 +148,24 @@ fun TtsControls( } } -private val IconButtonLargeSizeModifier = Modifier.size(40.dp) - -private val availableRates = listOf(0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0) - +@OptIn(ExperimentalMaterialApi::class) @Composable private fun TtsSettingsDialog( - rateRange: ClosedRange, + availableRates: List, availableLanguages: List, availableVoices: List, config: Configuration, onConfigChange: (Configuration) -> Unit, + allowNetwork: Boolean, + onAllowNetworkChange: (Boolean) -> Unit, onDismiss: () -> Unit ) { + val context = LocalContext.current + + val voiceNames = remember(availableVoices) { + availableVoices.namesByIdentifier(context) + } + AlertDialog( onDismissRequest = onDismiss, confirmButton = { @@ -157,13 +176,14 @@ private fun TtsSettingsDialog( title = { Text(stringResource(R.string.tts_settings)) }, text = { Column { - if (rateRange.start < rateRange.endInclusive) { + if (availableRates.size > 1) { SelectorListItem( label = stringResource(R.string.tts_rate), - values = availableRates - .filter { it in rateRange }, + values = availableRates, selection = config.rate, - titleOfSelection = { DecimalFormat("x#.##").format(it) }, + titleForValue = { rate -> + DecimalFormat("x#.##").format(rate) + }, onSelected = { onConfigChange(config.copy(rate = it)) } @@ -174,7 +194,10 @@ private fun TtsSettingsDialog( label = stringResource(R.string.language), values = availableLanguages, selection = config.defaultLanguage, - titleOfSelection = { it?.locale?.displayName ?: stringResource(R.string.auto) }, + titleForValue = { language -> + language?.locale?.displayName + ?: stringResource(R.string.auto) + }, onSelected = { onConfigChange(config.copy(defaultLanguage = it, voice = null)) } ) @@ -182,10 +205,42 @@ private fun TtsSettingsDialog( label = stringResource(R.string.voice), values = availableVoices, selection = config.voice, - titleOfSelection = { it?.name ?: stringResource(R.string.auto) }, + titleForValue = { voice -> voice?.let { voiceNames[it.identifier] } ?: stringResource(R.string.auto) }, onSelected = { onConfigChange(config.copy(voice = it)) } ) + + ListItem( + modifier = Modifier + .clickable { onAllowNetworkChange(!allowNetwork) }, + text = { + Text(stringResource(R.string.tts_higher_quality_voices)) + }, + trailing = { + Switch(checked = allowNetwork, onCheckedChange = onAllowNetworkChange) + } + ) } } ) +} + + +fun List.namesByIdentifier(context: Context): Map { + val byCountryCount = mutableMapOf() + + return associate { voice -> + voice.identifier to + if (voice.name != null) { + voice.name as String + } else { + val country = voice.language.locale.country + val number = ((byCountryCount[country] ?: 0) + 1) + .also { byCountryCount[country] = it } + + listOfNotNull( + voice.language.locale.displayCountry.takeIf { it.isNotEmpty() }, + context.getString(R.string.voice_number, number) + ).joinToString(" - ") + } + } } \ No newline at end of file diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index c60167e21c..0a455f98b5 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -68,6 +68,7 @@ class TtsViewModel( private val _events: Channel = Channel(Channel.BUFFERED) val events: Flow = _events.receiveAsFlow() + val allowVoicesRequiringNetwork = MutableStateFlow(true) private val isEnabled = MutableStateFlow(false) private lateinit var controller: TtsController @@ -135,10 +136,12 @@ class TtsViewModel( val voicesForSelectedLanguage: Flow> = combine( controller.config.map { it.defaultLanguage }, - voicesByLanguage - ) { language, voices -> + voicesByLanguage, + allowVoicesRequiringNetwork + ) { language, voices, allowNetwork -> language ?.let { voices[it.removeRegion()] } + ?.filter { allowNetwork || !it.requiresNetwork } ?.sortedBy { it.language.locale.displayCountry } ?: emptyList() } diff --git a/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt b/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt index fe9211a737..7a168ddecd 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/shared/views/List.kt @@ -7,6 +7,7 @@ package org.readium.r2.testapp.shared.views import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Spacer import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier @@ -21,7 +22,7 @@ fun SelectorListItem( label: String, values: List, selection: T, - titleOfSelection: @Composable (T) -> String, + titleForValue: @Composable (T) -> String, onSelected: (T) -> Unit, enabled: Boolean = values.isNotEmpty(), ) { @@ -40,7 +41,7 @@ fun SelectorListItem( }, trailing = { Group(enabled = enabled) { - Text(titleOfSelection(selection)) + Text(titleForValue(selection)) } DropdownMenu( @@ -54,7 +55,7 @@ fun SelectorListItem( dismiss() } ) { - Text(titleOfSelection(value)) + Text(titleForValue(value)) } } } diff --git a/test-app/src/main/res/values/strings.xml b/test-app/src/main/res/values/strings.xml index a3a5b3aadc..57555e5f9b 100644 --- a/test-app/src/main/res/values/strings.xml +++ b/test-app/src/main/res/values/strings.xml @@ -212,4 +212,6 @@ A TTS error occurred Auto Voice + Voice %d + Higher quality voices (requires network) From 97832384881cacb15fa8eb21a5700de9e7c17cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 30 Jun 2022 14:04:38 +0200 Subject: [PATCH 31/59] Fix performance issue with compositions --- .../r2/navigator/DecorableNavigator.kt | 2 +- .../r2/navigator/tts/AndroidTtsEngine.kt | 2 +- .../r2/testapp/reader/VisualReaderFragment.kt | 6 +--- .../r2/testapp/reader/tts/TtsControls.kt | 18 ++++------ .../r2/testapp/utils/extensions/Flow.kt | 35 +++++++++++++++++-- 5 files changed, 43 insertions(+), 20 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/DecorableNavigator.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/DecorableNavigator.kt index bd9bc56666..5357c61c90 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/DecorableNavigator.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/DecorableNavigator.kt @@ -154,7 +154,7 @@ sealed class DecorationChange { * The changes need to be applied in the same order, one by one. */ @ExperimentalDecorator -suspend fun List.changesByHref(target: List): Map> = withContext(Dispatchers.IO) { +suspend fun List.changesByHref(target: List): Map> = withContext(Dispatchers.Default) { val source = this@changesByHref val result = DiffUtil.calculateDiff(object : DiffUtil.Callback() { override fun getOldListSize(): Int = source.size diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index 238f267b98..e1bc157886 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -60,7 +60,7 @@ class AndroidTtsEngine( EngineError.getOrDefault(code) } - private val scope = MainScope() + private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) private val engineListener = EngineListener() diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index c782cb6b66..0547da1758 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -20,8 +20,6 @@ import androidx.annotation.ColorInt import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.layout.* import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @@ -42,13 +40,11 @@ import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R import org.readium.r2.testapp.databinding.FragmentReaderBinding import org.readium.r2.testapp.domain.model.Highlight -import org.readium.r2.testapp.reader.tts.TtsViewModel import org.readium.r2.testapp.reader.tts.TtsControls +import org.readium.r2.testapp.reader.tts.TtsViewModel import org.readium.r2.testapp.utils.* import org.readium.r2.testapp.utils.extensions.confirmDialog -import org.readium.r2.testapp.utils.extensions.flowWithLocalLifecycle import org.readium.r2.testapp.utils.extensions.throttleLatest -import java.util.* import kotlin.time.Duration.Companion.seconds /* diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index 9cd259e31a..e7eb2b8699 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -23,23 +23,19 @@ import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R import org.readium.r2.testapp.shared.views.SelectorListItem -import org.readium.r2.testapp.utils.extensions.flowWithLocalLifecycle +import org.readium.r2.testapp.utils.extensions.asStateWhenStarted import java.text.DecimalFormat @Composable fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { - val state by model.state - .flowWithLocalLifecycle().collectAsState() + val showControls by model.state.asStateWhenStarted { it.showControls } + val isPlaying by model.state.asStateWhenStarted { it.isPlaying } + val allowNetwork by model.allowVoicesRequiringNetwork.asStateWhenStarted() + val settings by model.settings.asStateWhenStarted() - val settings by model.settings - .flowWithLocalLifecycle().collectAsState() - - val allowNetwork by model.allowVoicesRequiringNetwork - .flowWithLocalLifecycle().collectAsState() - - if (state.showControls) { + if (showControls) { TtsControls( - playing = state.isPlaying, + playing = isPlaying, availableRates = listOf(0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0) .filter { it in settings.rateRange }, availableLanguages = settings.availableLanguages, diff --git a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt index 516517f8d4..9ffbe7177a 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt @@ -7,6 +7,8 @@ package org.readium.r2.testapp.utils.extensions import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.lifecycle.Lifecycle @@ -17,6 +19,33 @@ import kotlinx.coroutines.flow.* import kotlin.time.Duration /** + * Collects safely the [Flow] as a [State] when the local lifecycle is started. + */ +@Composable +fun Flow.asStateWhenStarted(initialValue: T): State = + flowWithLocalLifecycle() + .collectAsState(initial = initialValue) + +/** + * Collects safely the [StateFlow] as a [State] when the local lifecycle is started. + */ +@Composable +fun StateFlow.asStateWhenStarted(): State = + asStateWhenStarted(transform = { it }) + +/** + * Collects safely the [StateFlow] as a [State] when the local lifecycle is started, transforming the + * value first. + */ +@Composable +fun StateFlow.asStateWhenStarted(transform: (T) -> R): State = + map(transform) + .flowWithLocalLifecycle() + .collectAsState(initial = transform(value)) + +/** + * Creates a [Flow] emitting values only when the local lifecycle is started. + * * See https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda */ @Composable @@ -32,11 +61,13 @@ fun StateFlow.flowWithLocalLifecycle(minActiveState: Lifecycle.State = Li val lifecycleOwner = LocalLifecycleOwner.current return remember(this, lifecycleOwner) { this.flowWithLifecycle(lifecycleOwner.lifecycle, minActiveState) - .stateIn(lifecycleOwner.lifecycleScope, SharingStarted.Eagerly, initialValue = value) + .stateIn(lifecycleOwner.lifecycleScope, SharingStarted.WhileSubscribed(), initialValue = value) } } /** + * Throttles the values of the [Flow] in the given [period]. + * * Taken from https://github.com/Kotlin/kotlinx.coroutines/issues/1107#issuecomment-1083076517 */ fun Flow.throttleLatest(period: Duration): Flow = @@ -45,4 +76,4 @@ fun Flow.throttleLatest(period: Duration): Flow = emit(it) delay(period) } - } \ No newline at end of file + } From a6807f10e502e2115b97e71091074667c98b7652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 30 Jun 2022 14:41:00 +0200 Subject: [PATCH 32/59] Simplify view model and controls --- .../r2/testapp/reader/VisualReaderFragment.kt | 4 +- .../r2/testapp/reader/tts/TtsControls.kt | 53 +--------------- .../r2/testapp/reader/tts/TtsViewModel.kt | 62 +++++++++++-------- 3 files changed, 39 insertions(+), 80 deletions(-) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index 0547da1758..23cf9f6a96 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -126,9 +126,9 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List .launchIn(this) ttsModel.state - .map { it.decorations } + .map { it.playingHighlight } .distinctUntilChanged() - .onEach { navigator.applyDecorations(it, "tts") } + .onEach { navigator.applyDecorations(listOfNotNull(it), "tts") } .launchIn(this) } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index e7eb2b8699..652268f157 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -30,8 +30,7 @@ import java.text.DecimalFormat fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { val showControls by model.state.asStateWhenStarted { it.showControls } val isPlaying by model.state.asStateWhenStarted { it.isPlaying } - val allowNetwork by model.allowVoicesRequiringNetwork.asStateWhenStarted() - val settings by model.settings.asStateWhenStarted() + val settings by model.state.asStateWhenStarted { it.settings } if (showControls) { TtsControls( @@ -42,11 +41,6 @@ fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { availableVoices = settings.availableVoices, config = settings.config, onConfigChange = model::setConfig, - allowNetwork = allowNetwork, - onAllowNetworkChange = { - model.setConfig(settings.config.copy(voice = null)) - model.allowVoicesRequiringNetwork.value = it - }, onPlayPause = model::playPause, onStop = model::stop, onPrevious = model::previous, @@ -64,8 +58,6 @@ fun TtsControls( availableVoices: List, config: Configuration?, onConfigChange: (Configuration) -> Unit, - allowNetwork: Boolean, - onAllowNetworkChange: (Boolean) -> Unit, onPlayPause: () -> Unit, onStop: () -> Unit, onPrevious: () -> Unit, @@ -81,8 +73,6 @@ fun TtsControls( availableVoices = availableVoices, config = config, onConfigChange = onConfigChange, - allowNetwork = allowNetwork, - onAllowNetworkChange = onAllowNetworkChange, onDismiss = { showSettings = false } ) } @@ -144,7 +134,6 @@ fun TtsControls( } } -@OptIn(ExperimentalMaterialApi::class) @Composable private fun TtsSettingsDialog( availableRates: List, @@ -152,16 +141,10 @@ private fun TtsSettingsDialog( availableVoices: List, config: Configuration, onConfigChange: (Configuration) -> Unit, - allowNetwork: Boolean, - onAllowNetworkChange: (Boolean) -> Unit, onDismiss: () -> Unit ) { val context = LocalContext.current - val voiceNames = remember(availableVoices) { - availableVoices.namesByIdentifier(context) - } - AlertDialog( onDismissRequest = onDismiss, confirmButton = { @@ -201,42 +184,10 @@ private fun TtsSettingsDialog( label = stringResource(R.string.voice), values = availableVoices, selection = config.voice, - titleForValue = { voice -> voice?.let { voiceNames[it.identifier] } ?: stringResource(R.string.auto) }, + titleForValue = { it?.name ?: it?.identifier ?: stringResource(R.string.auto) }, onSelected = { onConfigChange(config.copy(voice = it)) } ) - - ListItem( - modifier = Modifier - .clickable { onAllowNetworkChange(!allowNetwork) }, - text = { - Text(stringResource(R.string.tts_higher_quality_voices)) - }, - trailing = { - Switch(checked = allowNetwork, onCheckedChange = onAllowNetworkChange) - } - ) } } ) -} - - -fun List.namesByIdentifier(context: Context): Map { - val byCountryCount = mutableMapOf() - - return associate { voice -> - voice.identifier to - if (voice.name != null) { - voice.name as String - } else { - val country = voice.language.locale.country - val number = ((byCountryCount[country] ?: 0) + 1) - .also { byCountryCount[country] = it } - - listOfNotNull( - voice.language.locale.displayCountry.takeIf { it.isNotEmpty() }, - context.getString(R.string.voice_number, number) - ).joinToString(" - ") - } - } } \ No newline at end of file diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 0a455f98b5..c0ebd7b8b2 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -40,11 +40,19 @@ class TtsViewModel( publication: Publication ) : AndroidViewModel(application) { + /** + * @param showControls Whether the TTS was enabled by the user. + * @param isPlaying Whether the TTS is currently speaking. + * @param playingRange Locator to the currently spoken word. + * @param playingHighlight Decoration for the currently spoken utterance. + * @param settings Current user settings and their constraints. + */ data class State( val showControls: Boolean = false, val isPlaying: Boolean = false, val playingRange: Locator? = null, - val decorations: List = emptyList(), + val playingHighlight: Decoration? = null, + val settings: Settings = Settings() ) data class Settings( @@ -63,12 +71,10 @@ class TtsViewModel( get() = ::controller.isInitialized val state: StateFlow - val settings: StateFlow private val _events: Channel = Channel(Channel.BUFFERED) val events: Flow = _events.receiveAsFlow() - val allowVoicesRequiringNetwork = MutableStateFlow(true) private val isEnabled = MutableStateFlow(false) private lateinit var controller: TtsController @@ -76,7 +82,6 @@ class TtsViewModel( val tts = TtsController(application, publication) if (tts == null) { state = MutableStateFlow(State()) - settings = MutableStateFlow(Settings()) } else { controller = tts @@ -99,23 +104,6 @@ class TtsViewModel( .onEach(::handleTtsException) .launchIn(viewModelScope) - state = combine(isEnabled, controller.state) { isEnabled, state -> - val playing = (state as? TtsState.Playing) - - State( - showControls = isEnabled, - isPlaying = (playing != null), - playingRange = playing?.range, - decorations = listOfNotNull(playing?.run { - Decoration( - id = "tts", - locator = utterance.locator, - style = Decoration.Style.Highlight(tint = Color.RED) - ) - }) - ) - }.stateIn(viewModelScope, SharingStarted.Eagerly, initialValue = State()) - val rateRange: Flow> = controller.configConstraints .map { it.rateRange } @@ -137,16 +125,14 @@ class TtsViewModel( combine( controller.config.map { it.defaultLanguage }, voicesByLanguage, - allowVoicesRequiringNetwork - ) { language, voices, allowNetwork -> + ) { language, voices -> language ?.let { voices[it.removeRegion()] } - ?.filter { allowNetwork || !it.requiresNetwork } - ?.sortedBy { it.language.locale.displayCountry } + ?.sortedBy { it.name ?: it.identifier } ?: emptyList() } - settings = combine( + val settings: Flow = combine( controller.config, rateRange, languages, @@ -158,7 +144,29 @@ class TtsViewModel( availableLanguages = langs, availableVoices = voices ) - }.stateIn(viewModelScope, SharingStarted.Eagerly, initialValue = Settings()) + } + + state = combine( + isEnabled, + controller.state, + settings + ) { isEnabled, state, currentSettings -> + val playing = (state as? TtsState.Playing) + + State( + showControls = isEnabled, + isPlaying = (playing != null), + playingRange = playing?.range, + playingHighlight = playing?.run { + Decoration( + id = "tts", + locator = utterance.locator, + style = Decoration.Style.Highlight(tint = Color.RED) + ) + }, + settings = currentSettings + ) + }.stateIn(viewModelScope, SharingStarted.Eagerly, initialValue = State()) } } From b98cf6bebb2e15e2e5278155df7af22515760e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 30 Jun 2022 16:24:50 +0200 Subject: [PATCH 33/59] Simplify `TtsViewModel` --- .../r2/testapp/reader/ReaderActivity.kt | 22 +- .../r2/testapp/reader/ReaderViewModel.kt | 23 +- .../r2/testapp/reader/VisualReaderFragment.kt | 86 +++---- .../r2/testapp/reader/tts/TtsControls.kt | 2 - .../r2/testapp/reader/tts/TtsViewModel.kt | 224 ++++++++++-------- .../r2/testapp/utils/ViewModelFactory.kt | 21 -- 6 files changed, 185 insertions(+), 193 deletions(-) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt index a65cb82ddc..a73dbd4d0f 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderActivity.kt @@ -20,9 +20,7 @@ import androidx.fragment.app.FragmentResultListener import androidx.fragment.app.commit import androidx.fragment.app.commitNow import androidx.lifecycle.ViewModelProvider -import kotlinx.coroutines.ExperimentalCoroutinesApi import org.readium.navigator.media2.ExperimentalMedia2 -import org.readium.r2.navigator.ExperimentalDecorator import org.readium.r2.shared.UserException import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication @@ -33,37 +31,19 @@ import org.readium.r2.testapp.drm.DrmManagementContract import org.readium.r2.testapp.drm.DrmManagementFragment import org.readium.r2.testapp.outline.OutlineContract import org.readium.r2.testapp.outline.OutlineFragment -import org.readium.r2.testapp.reader.tts.TtsViewModel -import org.readium.r2.testapp.utils.CompositeViewModelFactory /* * An activity to read a publication * * This class can be used as it is or be inherited from. */ -@OptIn(ExperimentalCoroutinesApi::class, ExperimentalDecorator::class) open class ReaderActivity : AppCompatActivity() { private val model: ReaderViewModel by viewModels() - private val ttsModel: TtsViewModel by viewModels() override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory { - val app = application as Application val arguments = ReaderActivityContract.parseIntent(this) - val readerInitData = - try { - val readerRepository = app.readerRepository.getCompleted() - checkNotNull(readerRepository[arguments.bookId]) - } catch (e: Exception) { - // Fallbacks on a dummy Publication to avoid crashing the app until the Activity finishes. - DummyReaderInitData(arguments.bookId) - } - - return CompositeViewModelFactory( - ReaderViewModel.createFactory(app, readerInitData), - TtsViewModel.createFactory(app, readerInitData.publication), - ViewModelProvider.AndroidViewModelFactory(app) - ) + return ReaderViewModel.createFactory(application as Application, arguments) } private lateinit var binding: ActivityReaderBinding diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt index ee0d5f6a31..b1560f3a7d 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/ReaderViewModel.kt @@ -30,12 +30,14 @@ import org.readium.r2.shared.util.Try import org.readium.r2.testapp.Application import org.readium.r2.testapp.bookshelf.BookRepository import org.readium.r2.testapp.domain.model.Highlight +import org.readium.r2.testapp.reader.tts.TtsViewModel import org.readium.r2.testapp.search.SearchPagingSource import org.readium.r2.testapp.utils.EventChannel import org.readium.r2.testapp.utils.createViewModelFactory @OptIn(Search::class, ExperimentalDecorator::class, ExperimentalCoroutinesApi::class) class ReaderViewModel( + application: Application, val readerInitData: ReaderInitData, private val bookRepository: BookRepository, ) : ViewModel() { @@ -52,6 +54,14 @@ class ReaderViewModel( val fragmentChannel: EventChannel = EventChannel(Channel(Channel.BUFFERED), viewModelScope) + val tts: TtsViewModel? = + TtsViewModel(application, readerInitData.publication, viewModelScope) + + override fun onCleared() { + super.onCleared() + tts?.onCleared() + } + fun saveProgression(locator: Locator) = viewModelScope.launch { bookRepository.saveProgression(locator, bookId) } @@ -227,9 +237,18 @@ class ReaderViewModel( } companion object { - fun createFactory(application: Application, readerInitData: ReaderInitData) = + fun createFactory(application: Application, arguments: ReaderActivityContract.Arguments) = createViewModelFactory { - ReaderViewModel(readerInitData, application.bookRepository) + val readerInitData = + try { + val readerRepository = application.readerRepository.getCompleted() + checkNotNull(readerRepository[arguments.bookId]) + } catch (e: Exception) { + // Fallbacks on a dummy Publication to avoid crashing the app until the Activity finishes. + DummyReaderInitData(arguments.bookId) + } + + ReaderViewModel(application, readerInitData, application.bookRepository) } } } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index 23cf9f6a96..6a688978ae 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -55,8 +55,6 @@ import kotlin.time.Duration.Companion.seconds @OptIn(ExperimentalDecorator::class) abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.Listener { - protected val ttsModel: TtsViewModel by activityViewModels() - protected var binding: FragmentReaderBinding by viewLifecycle() private lateinit var navigatorFragment: Fragment @@ -77,7 +75,7 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { - setupObservers() + setupObserversIn(this) } } @@ -101,57 +99,61 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List @Composable private fun BoxScope.Overlay() { - TtsControls( - model = ttsModel, - modifier = Modifier - .align(Alignment.BottomCenter) - .padding(8.dp) - ) + model.tts?.let { tts -> + TtsControls( + model = tts, + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(8.dp) + ) + } } - private suspend fun CoroutineScope.setupObservers() { + private suspend fun setupObserversIn(scope: CoroutineScope) { navigator.currentLocator .onEach { model.saveProgression(it) } - .launchIn(this) + .launchIn(scope) (navigator as? DecorableNavigator)?.let { navigator -> navigator.addDecorationListener("highlights", decorationListener) model.highlightDecorations .onEach { navigator.applyDecorations(it, "highlights") } - .launchIn(this) + .launchIn(scope) model.searchDecorations .onEach { navigator.applyDecorations(it, "search") } - .launchIn(this) + .launchIn(scope) - ttsModel.state - .map { it.playingHighlight } - .distinctUntilChanged() - .onEach { navigator.applyDecorations(listOfNotNull(it), "tts") } - .launchIn(this) + model.tts?.state + ?.map { it.playingHighlight } + ?.distinctUntilChanged() + ?.onEach { navigator.applyDecorations(listOfNotNull(it), "tts") } + ?.launchIn(scope) } - ttsModel.events - .onEach { event -> - when (event) { - is TtsViewModel.Event.OnError -> - showError(event.error) + model.tts?.apply { + events + .onEach { event -> + when (event) { + is TtsViewModel.Event.OnError -> + showError(event.error) - is TtsViewModel.Event.OnMissingVoiceData -> - confirmAndInstallTtsVoice(event.language) + is TtsViewModel.Event.OnMissingVoiceData -> + confirmAndInstallTtsVoice(event.language) + } } - } - .launchIn(this) - - ttsModel.state - .map { it.playingRange } - .filterNotNull() - .throttleLatest(1.seconds) - .onEach { locator -> - navigator.go(locator, animated = false) - } - .launchIn(this) + .launchIn(scope) + + state + .map { it.playingRange } + .filterNotNull() + .throttleLatest(1.seconds) + .onEach { locator -> + navigator.go(locator, animated = false) + } + .launchIn(scope) + } } private fun showError(error: UserException) { @@ -161,12 +163,14 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List private suspend fun confirmAndInstallTtsVoice(language: Language) { val activity = activity ?: return + val tts = model.tts ?: return + if ( activity.confirmDialog( getString(R.string.tts_error_language_support_incomplete, language.locale.displayLanguage) ) ) { - ttsModel.requestInstallVoice(activity) + tts.requestInstallVoice(activity) } } @@ -178,9 +182,7 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List override fun onStop() { super.onStop() - if (ttsModel.isAvailable) { - ttsModel.pause() - } + model.tts?.pause() } override fun onHiddenChanged(hidden: Boolean) { @@ -191,13 +193,13 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) { super.onCreateOptionsMenu(menu, menuInflater) - menu.findItem(R.id.tts).isVisible = ttsModel.isAvailable + menu.findItem(R.id.tts).isVisible = (model.tts != null) } override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.tts -> { - ttsModel.play(navigator) + checkNotNull(model.tts).play(navigator) } else -> return super.onOptionsItemSelected(item) } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index 652268f157..fdc6444b72 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -6,8 +6,6 @@ package org.readium.r2.testapp.reader.tts -import android.content.Context -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.material.icons.Icons diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index c0ebd7b8b2..392a0e0577 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -6,11 +6,9 @@ package org.readium.r2.testapp.reader.tts -import android.app.Application import android.content.Context import android.graphics.Color -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch @@ -31,14 +29,30 @@ import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R -import org.readium.r2.testapp.utils.createViewModelFactory import org.readium.r2.navigator.tts.TtsController.State as TtsState +/** + * View model driving the text to speech controller. + */ @OptIn(ExperimentalReadiumApi::class, ExperimentalDecorator::class) -class TtsViewModel( - application: Application, - publication: Publication -) : AndroidViewModel(application) { +class TtsViewModel private constructor( + private val controller: TtsController, + private val scope: CoroutineScope +) { + + companion object { + /** + * Returns an instance of [TtsViewModel] if the given [publication] can be played with the + * TTS engine. + */ + operator fun invoke( + context: Context, + publication: Publication, + scope: CoroutineScope + ): TtsViewModel? = + TtsController(context, publication) + ?.let { TtsViewModel(it, scope) } + } /** * @param showControls Whether the TTS was enabled by the user. @@ -55,6 +69,12 @@ class TtsViewModel( val settings: Settings = Settings() ) + /** + * @param config Currently selected user settings. + * @param rateRange Supported range for the rate setting. + * @param availableLanguages Languages supported by the TTS engine. + * @param availableVoices Voices supported by the TTS engine, for the selected language. + */ data class Settings( val config: TtsEngine.Configuration = TtsEngine.Configuration(), val rateRange: ClosedRange = 1.0..1.0, @@ -63,114 +83,119 @@ class TtsViewModel( ) sealed class Event { + /** + * Emitted when the [TtsController] fails with an error. + */ class OnError(val error: UserException) : Event() + + /** + * Emitted when the selected language cannot be played because it is missing voice data. + */ class OnMissingVoiceData(val language: Language) : Event() } - val isAvailable: Boolean - get() = ::controller.isInitialized - + /** + * Current state of the view model. + */ val state: StateFlow private val _events: Channel = Channel(Channel.BUFFERED) val events: Flow = _events.receiveAsFlow() + /** + * Indicates whether the user enabled the TTS playback. + * It doesn't mean the TTS is actually speaking utterances at the moment. + */ private val isEnabled = MutableStateFlow(false) - private lateinit var controller: TtsController init { - val tts = TtsController(application, publication) - if (tts == null) { - state = MutableStateFlow(State()) - - } else { - controller = tts - - tts.listener = object : TtsController.Listener { - override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) { - handleTtsException(error) - - // When the voice data is incomplete, the user will be requested to install it. - // For other errors, we jump to the next utterance. - if (error !is TtsEngine.Exception.LanguageSupportIncomplete) { - next() - } + controller.listener = object : TtsController.Listener { + override fun onUtteranceError( + utterance: TtsEngine.Utterance, + error: TtsEngine.Exception + ) { + handleTtsException(error) + + // When the voice data is incomplete, the user will be requested to install it. + // For other errors, we jump to the next utterance. + if (error !is TtsEngine.Exception.LanguageSupportIncomplete) { + next() } } + } - tts.state - .filterIsInstance() - .map(::error) - .onEach(::handleTtsException) - .launchIn(viewModelScope) - - val rateRange: Flow> = - controller.configConstraints - .map { it.rateRange } + controller.state + .filterIsInstance() + .map(::error) + .onEach(::handleTtsException) + .launchIn(scope) - val voicesByLanguage: Flow>> = - controller.configConstraints - .map { - it.availableVoices - .groupBy { v -> v.language.removeRegion() } - } + val rateRange: Flow> = + controller.configConstraints + .map { it.rateRange } - val languages: Flow> = voicesByLanguage + val voicesByLanguage: Flow>> = + controller.configConstraints .map { - it.keys - .sortedBy { l -> l.locale.displayName } + it.availableVoices + .groupBy { v -> v.language.removeRegion() } } - val voicesForSelectedLanguage: Flow> = - combine( - controller.config.map { it.defaultLanguage }, - voicesByLanguage, - ) { language, voices -> - language - ?.let { voices[it.removeRegion()] } - ?.sortedBy { it.name ?: it.identifier } - ?: emptyList() - } + val languages: Flow> = voicesByLanguage + .map { + it.keys + .sortedBy { l -> l.locale.displayName } + } - val settings: Flow = combine( - controller.config, - rateRange, - languages, - voicesForSelectedLanguage, - ) { config, rates, langs, voices -> - Settings( - config = config, - rateRange = rates, - availableLanguages = langs, - availableVoices = voices - ) + val voicesForSelectedLanguage: Flow> = + combine( + controller.config.map { it.defaultLanguage }, + voicesByLanguage, + ) { language, voices -> + language + ?.let { voices[it.removeRegion()] } + ?.sortedBy { it.name ?: it.identifier } + ?: emptyList() } - state = combine( - isEnabled, - controller.state, - settings - ) { isEnabled, state, currentSettings -> - val playing = (state as? TtsState.Playing) - - State( - showControls = isEnabled, - isPlaying = (playing != null), - playingRange = playing?.range, - playingHighlight = playing?.run { - Decoration( - id = "tts", - locator = utterance.locator, - style = Decoration.Style.Highlight(tint = Color.RED) - ) - }, - settings = currentSettings - ) - }.stateIn(viewModelScope, SharingStarted.Eagerly, initialValue = State()) + val settings: Flow = combine( + controller.config, + rateRange, + languages, + voicesForSelectedLanguage, + ) { config, rates, langs, voices -> + Settings( + config = config, + rateRange = rates, + availableLanguages = langs, + availableVoices = voices + ) } + + state = combine( + isEnabled, + controller.state, + settings + ) { isEnabled, state, currentSettings -> + val playing = (state as? TtsState.Playing) + + State( + showControls = isEnabled, + isPlaying = (playing != null), + playingRange = playing?.range, + playingHighlight = playing?.run { + Decoration( + id = "tts", + locator = utterance.locator, + style = Decoration.Style.Highlight(tint = Color.RED) + ) + }, + settings = currentSettings + ) + }.stateIn(scope, SharingStarted.Eagerly, initialValue = State()) } - private fun handleTtsException(error: TtsEngine.Exception) = viewModelScope.launch { + private fun handleTtsException(error: TtsEngine.Exception) = scope.launch { if (error is TtsEngine.Exception.LanguageSupportIncomplete) { _events.send(Event.OnMissingVoiceData(error.language)) } else { @@ -192,13 +217,9 @@ class TtsViewModel( UserException(R.string.tts_error_other) } - override fun onCleared() { - super.onCleared() - - if (isAvailable) { - runBlocking { - controller.close() - } + fun onCleared() { + runBlocking { + controller.close() } } @@ -207,7 +228,7 @@ class TtsViewModel( } @OptIn(InternalReadiumApi::class) // FIXME - fun play(navigator: Navigator) = viewModelScope.launch { + fun play(navigator: Navigator) = scope.launch { controller.play( start = (navigator as? EpubNavigatorFragment)?.firstVisibleElementLocator() ?: navigator.currentLocator.value @@ -241,11 +262,4 @@ class TtsViewModel( fun requestInstallVoice(context: Context) { controller.engine.requestInstallMissingVoice(context) } - - companion object { - fun createFactory(application: Application, publication: Publication) = - createViewModelFactory { - TtsViewModel(application, publication) - } - } } diff --git a/test-app/src/main/java/org/readium/r2/testapp/utils/ViewModelFactory.kt b/test-app/src/main/java/org/readium/r2/testapp/utils/ViewModelFactory.kt index 3725b49b2e..213de13a78 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/utils/ViewModelFactory.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/utils/ViewModelFactory.kt @@ -25,24 +25,3 @@ inline fun createViewModelFactory(crossinline factory: ( return factory() as V } } - -/** - * A [ViewModelProvider.Factory] which will iterate over a provided list of [factories] until - * finding one instantiating successfully the requested [ViewModel]. - */ -class CompositeViewModelFactory(private vararg val factories: ViewModelProvider.Factory) : ViewModelProvider.Factory { - - override fun create(modelClass: Class): T { - for (factory in factories) { - try { - return factory.create(modelClass) - } catch (e: IllegalAccessException) { - // Ignored, because the factory didn't handle this model class. - } catch (e: Exception) { - Timber.e(e) - } - } - - throw IllegalAccessException("Unknown ViewModel class") - } -} From 40ae74069eae70dfbc90f4d0d056dd205844296a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 30 Jun 2022 16:25:21 +0200 Subject: [PATCH 34/59] More refactoring --- .../org/readium/r2/navigator/Navigator.kt | 8 ++ .../navigator/epub/EpubNavigatorFragment.kt | 8 +- .../r2/navigator/tts/AndroidTtsEngine.kt | 6 +- .../r2/testapp/reader/tts/TtsViewModel.kt | 86 +++++++++++-------- 4 files changed, 68 insertions(+), 40 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/Navigator.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/Navigator.kt index 9188b2179b..9de60b5efa 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/Navigator.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/Navigator.kt @@ -11,6 +11,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow import org.readium.r2.navigator.media.MediaPlayback +import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.publication.Link import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication @@ -52,6 +53,13 @@ interface Navigator { */ val currentLocator: StateFlow + /** + * Returns the [Locator] to the first content element that begins on the current screen. + */ + @ExperimentalReadiumApi + suspend fun firstVisibleElementLocator(): Locator? = + currentLocator.value + /** * Moves to the position in the publication corresponding to the given [Locator]. */ diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index 728ec2f0f6..b6b4dd9745 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -42,6 +42,7 @@ import org.readium.r2.navigator.pager.R2PagerAdapter.PageResource import org.readium.r2.navigator.pager.R2ViewPager import org.readium.r2.navigator.util.createFragmentFactory import org.readium.r2.shared.COLUMN_COUNT_REF +import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.SCROLL_REF import org.readium.r2.shared.extensions.addPrefix @@ -684,8 +685,11 @@ class EpubNavigatorFragment private constructor( ?: requireNotNull(publication.locatorFromLink(publication.readingOrder.first())) ) - @InternalReadiumApi - suspend fun firstVisibleElementLocator(): Locator? { + /** + * Returns the [Locator] to the first HTML element that begins on the current screen. + */ + @ExperimentalReadiumApi + override suspend fun firstVisibleElementLocator(): Locator? { if (!::resourcePager.isInitialized) return null val resource = publication.readingOrder[resourcePager.currentItem] diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index e1bc157886..8a9bd71227 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -18,12 +18,16 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import org.readium.r2.navigator.tts.TtsEngine.Configuration import org.readium.r2.navigator.tts.TtsEngine.ConfigurationConstraints +import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.MapWithDefaultCompanion -@OptIn(InternalReadiumApi::class) +/** + * Default [TtsEngine] implementation using Android's native text to speech engine. + */ +@ExperimentalReadiumApi class AndroidTtsEngine( context: Context, config: Configuration = Configuration(), diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 392a0e0577..eb0e8e5b9b 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -16,14 +16,12 @@ import kotlinx.coroutines.runBlocking import org.readium.r2.navigator.Decoration import org.readium.r2.navigator.ExperimentalDecorator import org.readium.r2.navigator.Navigator -import org.readium.r2.navigator.epub.EpubNavigatorFragment import org.readium.r2.navigator.tts.AndroidTtsEngine import org.readium.r2.navigator.tts.TtsController import org.readium.r2.navigator.tts.TtsEngine import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.DelicateReadiumApi import org.readium.r2.shared.ExperimentalReadiumApi -import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.UserException import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication @@ -106,24 +104,12 @@ class TtsViewModel private constructor( * Indicates whether the user enabled the TTS playback. * It doesn't mean the TTS is actually speaking utterances at the moment. */ - private val isEnabled = MutableStateFlow(false) + private val isStarted = MutableStateFlow(false) init { - controller.listener = object : TtsController.Listener { - override fun onUtteranceError( - utterance: TtsEngine.Utterance, - error: TtsEngine.Exception - ) { - handleTtsException(error) - - // When the voice data is incomplete, the user will be requested to install it. - // For other errors, we jump to the next utterance. - if (error !is TtsEngine.Exception.LanguageSupportIncomplete) { - next() - } - } - } + controller.listener = ControllerListener() + // Handle global [TtsController] failures. controller.state .filterIsInstance() .map(::error) @@ -173,14 +159,14 @@ class TtsViewModel private constructor( } state = combine( - isEnabled, + isStarted, controller.state, settings - ) { isEnabled, state, currentSettings -> + ) { isStarted, state, currentSettings -> val playing = (state as? TtsState.Playing) State( - showControls = isEnabled, + showControls = isStarted, isPlaying = (playing != null), playingRange = playing?.range, playingHighlight = playing?.run { @@ -195,14 +181,40 @@ class TtsViewModel private constructor( }.stateIn(scope, SharingStarted.Eagerly, initialValue = State()) } - private fun handleTtsException(error: TtsEngine.Exception) = scope.launch { - if (error is TtsEngine.Exception.LanguageSupportIncomplete) { - _events.send(Event.OnMissingVoiceData(error.language)) - } else { - _events.send(Event.OnError(error.toUserException())) + private inner class ControllerListener : TtsController.Listener { + override fun onUtteranceError( + utterance: TtsEngine.Utterance, + error: TtsEngine.Exception + ) { + scope.launch { + val shouldContinuePlayback = handleTtsException(error) + + if (shouldContinuePlayback) { + next() + } + } + } } + /** + * Handles the given error and returns whether the playback should continue. + */ + private suspend fun handleTtsException(error: TtsEngine.Exception): Boolean = + when (error) { + // The `LanguageSupportIncomplete` exception is a special case. We can recover from + // it by asking the user to download the missing voice data. + is TtsEngine.Exception.LanguageSupportIncomplete -> { + _events.send(Event.OnMissingVoiceData(error.language)) + false + } + + else -> { + _events.send(Event.OnError(error.toUserException())) + true + } + } + private fun TtsEngine.Exception.toUserException(): UserException = when (this) { is TtsEngine.Exception.InitializationFailed -> @@ -223,18 +235,19 @@ class TtsViewModel private constructor( } } - fun setConfig(config: TtsEngine.Configuration) { - controller.setConfig(config) - } - - @OptIn(InternalReadiumApi::class) // FIXME - fun play(navigator: Navigator) = scope.launch { + /** + * Begins the TTS playback in the given [navigator]. + */ + fun start(navigator: Navigator) = scope.launch { controller.play( - start = (navigator as? EpubNavigatorFragment)?.firstVisibleElementLocator() - ?: navigator.currentLocator.value + start = navigator.firstVisibleElementLocator() ) + isStarted.value = true + } - isEnabled.value = true + fun stop() { + controller.pause() + isStarted.value = false } fun playPause() { @@ -253,9 +266,8 @@ class TtsViewModel private constructor( controller.next() } - fun stop() { - controller.pause() - isEnabled.value = false + fun setConfig(config: TtsEngine.Configuration) { + controller.setConfig(config) } @OptIn(DelicateReadiumApi::class) From afa637855202346d81d2f5bca691beb449aa90e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 4 Jul 2022 14:24:37 +0200 Subject: [PATCH 35/59] More refactoring --- .../r2/navigator/tts/AndroidTtsEngine.kt | 172 ++++----- .../readium/r2/navigator/tts/TtsController.kt | 355 +++++++++++------- .../org/readium/r2/navigator/tts/TtsEngine.kt | 105 ++++-- .../readium/r2/shared/publication/Locator.kt | 8 +- .../java/org/readium/r2/shared/util/Either.kt | 17 +- .../r2/testapp/reader/VisualReaderFragment.kt | 3 +- .../r2/testapp/reader/tts/TtsControls.kt | 10 +- .../r2/testapp/reader/tts/TtsViewModel.kt | 157 ++++---- 8 files changed, 470 insertions(+), 357 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index 8a9bd71227..1560a1fa4f 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -10,19 +10,16 @@ import android.content.Context import android.content.Intent import android.speech.tts.TextToSpeech import android.speech.tts.UtteranceProgressListener -import android.speech.tts.Voice import kotlinx.coroutines.* -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update -import org.readium.r2.navigator.tts.TtsEngine.Configuration -import org.readium.r2.navigator.tts.TtsEngine.ConfigurationConstraints +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import org.readium.r2.navigator.tts.TtsEngine.* import org.readium.r2.shared.ExperimentalReadiumApi -import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.MapWithDefaultCompanion +import kotlin.Exception +import android.speech.tts.Voice as AndroidVoice /** * Default [TtsEngine] implementation using Android's native text to speech engine. @@ -30,8 +27,7 @@ import org.readium.r2.shared.util.MapWithDefaultCompanion @ExperimentalReadiumApi class AndroidTtsEngine( context: Context, - config: Configuration = Configuration(), - private val listener: TtsEngine.Listener + private val listener: Listener ) : TtsEngine { /** @@ -70,7 +66,6 @@ class AndroidTtsEngine( private val engine = TextToSpeech(context, engineListener).apply { setOnUtteranceProgressListener(engineListener) - setConfig(config) } /** @@ -94,75 +89,57 @@ class AndroidTtsEngine( return true } - private val _config = MutableStateFlow(config) - override val config: StateFlow = _config.asStateFlow() - - private var _configConstraints = MutableStateFlow(ConfigurationConstraints( - rateRange = 0.1..3.0 - )) - override val configConstraints: StateFlow = _configConstraints.asStateFlow() - - override fun setConfig(config: Configuration): Configuration { - engine.setConfig(config) - _config.value = config - return config - } - - private suspend fun updateConfigConstraints() = withContext(Dispatchers.Default) { - _configConstraints.update { constraints -> - constraints.copy( - availableVoices = engine.voices.map { it.toVoice() } - ) - } - } + override val rateRange: ClosedRange = 0.1..3.0 + override var availableVoices: List = emptyList() + private set private var speakJob: Job? = null + private val mutex = Mutex() - override fun speak(utterance: TtsEngine.Utterance) { - speakJob?.cancel() + override fun speak(utterance: Utterance) { + cancel() speakJob = scope.launch { init.await() - if (!setupVoiceForUtterance(utterance)) { - return@launch + mutex.withLock { + speakSync(utterance) } - - val id = nextId() - utterances[id] = utterance - engine.speak(utterance.text, TextToSpeech.QUEUE_FLUSH, null, id) } } - private fun setupVoiceForUtterance(utterance: TtsEngine.Utterance): Boolean { - // Setup the user selected voice. - val voice = config.value.voice - val language = utterance.languageOrDefault - if (voice != null && voice.language.removeRegion() == language.removeRegion()) { - engine.voices - .firstOrNull { it.name == voice.identifier } - ?.let { - engine.voice = it - return true - } - } - - // Or fallback on the language. - val localeResult = engine.setLanguage(language.locale) - if (localeResult < TextToSpeech.LANG_AVAILABLE) { - val error = - if (localeResult == TextToSpeech.LANG_MISSING_DATA) - TtsEngine.Exception.LanguageSupportIncomplete(language) - else - TtsEngine.Exception.LanguageNotSupported(language) + private fun speakSync(utterance: Utterance) { + try { + engine.setupFor(utterance) + engine.speak(utterance.text, TextToSpeech.QUEUE_FLUSH, null, utterance.id) - listener.onUtteranceError(utterance, error) - return false + } catch (e: kotlin.Exception) { + listener.onUtteranceError(utterance.id, TtsEngine.Exception.wrap(e)) } + } - return true + private fun TextToSpeech.setupFor(utterance: Utterance) { + setSpeechRate(utterance.rate.toFloat()) + + utterance.voiceOrLanguage + .onLeft { voice -> + // Setup the user selected voice. + engine.voice = engine.voices + .firstOrNull { it.name == voice.id } + ?: throw IllegalStateException("Unknown Android voice ${voice.id}") + } + .onRight { language -> + // Or fallback on the language. + val localeResult = engine.setLanguage(language.locale) + if (localeResult < TextToSpeech.LANG_AVAILABLE) { + if (localeResult == TextToSpeech.LANG_MISSING_DATA) + throw TtsEngine.Exception.LanguageSupportIncomplete(language) + else + throw TtsEngine.Exception.LanguageNotSupported(language) + } + } } - override fun stop() { + override fun cancel() { speakJob?.cancel() speakJob = null @@ -174,36 +151,20 @@ class AndroidTtsEngine( } override suspend fun close() { - stop() + cancel() engine.shutdown() scope.cancel() } - private val utterances = mutableMapOf() - - private var idCount: Int = 0 - - private fun nextId(): String = - idCount++.toString() - - private val TtsEngine.Utterance.languageOrDefault: Language get() = - language - ?: config.value.defaultLanguage - ?: Language(engine.voice.locale) - // Engine private val init = CompletableDeferred() - private fun TextToSpeech.setConfig(config: Configuration) { - setSpeechRate(config.rate.toFloat()) - } - private inner class EngineListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { override fun onInit(status: Int) { if (status == TextToSpeech.SUCCESS) { scope.launch { - updateConfigConstraints() + updateVoices() init.complete(Unit) } } else { @@ -213,13 +174,11 @@ class AndroidTtsEngine( override fun onStart(utteranceId: String?) {} - override fun onStop(utteranceId: String?, interrupted: Boolean) { - utterances.remove(utteranceId) - } + override fun onStop(utteranceId: String?, interrupted: Boolean) {} override fun onDone(utteranceId: String?) { - utterances.remove(utteranceId) - listener.onStop() + utteranceId ?: return + listener.onDone(utteranceId) } @Deprecated("Deprecated in the interface", ReplaceWith("onError(utteranceId, -1)")) @@ -228,39 +187,38 @@ class AndroidTtsEngine( } override fun onError(utteranceId: String?, errorCode: Int) { - val utterance = utterances.remove(utteranceId) ?: return + utteranceId ?: return val error = EngineException(errorCode) - listener.onUtteranceError(utterance, when (error.error) { + listener.onUtteranceError(utteranceId, when (error.error) { EngineError.Network, EngineError.NetworkTimeout -> TtsEngine.Exception.Network(error) - EngineError.NotInstalledYet -> TtsEngine.Exception.LanguageSupportIncomplete(utterance.languageOrDefault) else -> TtsEngine.Exception.Other(error) }) } override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { - val utterance = utterances[utteranceId] ?: return - - listener.onSpeakRangeAt( - locator = utterance.locator.copy( - text = utterance.locator.text.substring(start, end) - ), - utterance = utterance - ) + utteranceId ?: return + listener.onSpeakRange(utteranceId, start until end) } } + + private fun updateVoices() { + availableVoices = engine.voices.map { it.toVoice() } + listener.onAvailableVoicesChange(availableVoices) + } } -private fun Voice.toVoice(): TtsEngine.Voice = - TtsEngine.Voice( - identifier = name, +@OptIn(ExperimentalReadiumApi::class) +private fun AndroidVoice.toVoice(): Voice = + Voice( + id = name, name = null, language = Language(locale), quality = when (quality) { - Voice.QUALITY_VERY_HIGH -> TtsEngine.Voice.Quality.Highest - Voice.QUALITY_HIGH -> TtsEngine.Voice.Quality.High - Voice.QUALITY_LOW -> TtsEngine.Voice.Quality.Low - Voice.QUALITY_VERY_LOW -> TtsEngine.Voice.Quality.Lowest - else -> TtsEngine.Voice.Quality.Normal + AndroidVoice.QUALITY_VERY_HIGH -> Voice.Quality.Highest + AndroidVoice.QUALITY_HIGH -> Voice.Quality.High + AndroidVoice.QUALITY_LOW -> Voice.Quality.Low + AndroidVoice.QUALITY_VERY_LOW -> Voice.Quality.Lowest + else -> Voice.Quality.Normal }, requiresNetwork = isNetworkConnectionRequired ) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index 7b8b8fdda6..88cb4a198b 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -7,28 +7,28 @@ package org.readium.r2.navigator.tts import android.content.Context +import android.database.Cursor import kotlinx.coroutines.* -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update -import org.readium.r2.navigator.tts.TtsEngine.Configuration -import org.readium.r2.navigator.tts.TtsEngine.ConfigurationConstraints +import kotlinx.coroutines.flow.* +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import org.readium.r2.shared.DelicateReadiumApi import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.services.content.Content -import org.readium.r2.shared.publication.services.content.Content.Data import org.readium.r2.shared.publication.services.content.ContentIterator import org.readium.r2.shared.publication.services.content.contentIterator import org.readium.r2.shared.publication.services.content.isContentIterable +import org.readium.r2.shared.util.Either import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.SuspendingCloseable import org.readium.r2.shared.util.tokenizer.ContentTokenizer import org.readium.r2.shared.util.tokenizer.TextContentTokenizer import org.readium.r2.shared.util.tokenizer.TextUnit +import timber.log.Timber import java.util.* @ExperimentalReadiumApi @@ -41,20 +41,78 @@ fun interface TtsTokenizerFactory { fun create(defaultLanguage: Language?): ContentTokenizer } +class CursorList( + private val list: List = emptyList(), + private val startIndex: Int = 0 +) : List by list { + private var index: Int? = null + + fun current(): E? = + moveAndGet(index ?: startIndex) + + fun previous(): E? = + moveAndGet(index + ?.let { it - 1} + ?: startIndex + ) + + fun next(): E? = + moveAndGet(index?.let { it + 1} + ?: startIndex + ) + + private fun moveAndGet(index: Int): E? { + if (!list.indices.contains(index)) { + return null + } + this.index = index + return get(index) + } +} + @OptIn(DelicateReadiumApi::class) @ExperimentalReadiumApi class TtsController private constructor( private val publication: Publication, + config: Configuration, engineFactory: TtsEngineFactory, - private val tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory, - var listener: Listener? = null + private val tokenizerFactory: TtsTokenizerFactory, + var listener: Listener? = null, ) : SuspendingCloseable { + @ExperimentalReadiumApi + sealed class Exception private constructor( + override val message: String, + cause: Throwable? = null + ) : kotlin.Exception(message, cause) { + class Engine(val error: TtsEngine.Exception) + : Exception(error.message, error) + } + + data class Configuration( + val defaultLanguage: Language? = null, + val voice: TtsEngine.Voice? = null, + val rate: Double = 1.0, + ) + + data class Utterance( + val text: String, + val locator: Locator, + + internal val language: Language?, + internal val id: String, + ) + interface Listener { /** * Notifies an [error] occurred while speaking [utterance]. */ - fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) + fun onUtteranceError(utterance: Utterance, error: Exception) + + /** + * Notifies a global [error] occurred. + */ + fun onError(error: Exception) } companion object { @@ -63,24 +121,24 @@ class TtsController private constructor( operator fun invoke( context: Context, publication: Publication, - config: Configuration = Configuration( - defaultLanguage = publication.metadata.language - ), + config: Configuration = Configuration(), tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory ): TtsController? = invoke( publication, - engineFactory = { listener -> AndroidTtsEngine(context, config, listener) }, + config = config, + engineFactory = { listener -> AndroidTtsEngine(context, listener) }, tokenizerFactory = tokenizerFactory ) operator fun invoke( publication: Publication, + config: Configuration = Configuration(), engineFactory: TtsEngineFactory, tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory ): TtsController? { if (!canSpeak(publication)) return null - return TtsController(publication, engineFactory, tokenizerFactory) + return TtsController(publication, config, engineFactory, tokenizerFactory) } fun canSpeak(publication: Publication): Boolean = @@ -88,14 +146,26 @@ class TtsController private constructor( } sealed class State { - object Idle : State() - class Playing(val utterance: TtsEngine.Utterance, val range: Locator? = null) : State() - class Failure(val error: TtsEngine.Exception) : State() + object Stopped : State() + object Paused : State() + class Playing(val utterance: Utterance, val range: Locator? = null) : State() + class Failure(val error: Exception) : State() } - private val _state = MutableStateFlow(State.Idle) + private val _state = MutableStateFlow(State.Stopped) val state: StateFlow = _state.asStateFlow() + var publicationIterator: ContentIterator? = null + set(value) { + field?.let { + scope.launch { it.close() } + } + field = value + utterances = CursorList() + } + + var utterances: CursorList = CursorList() + /** * Underlying [TtsEngine] instance. * @@ -105,7 +175,9 @@ class TtsController private constructor( */ @DelicateReadiumApi val engine: E by lazy { engineFactory.create(EngineListener()) } + private val scope = MainScope() + private val mutex = Mutex() init { require(canSpeak(publication)) { "The publication cannot be spoken with TtsController, as its content is not iterable" } @@ -114,55 +186,67 @@ class TtsController private constructor( override suspend fun close() { tryOrLog { engine.close() + scope.cancel() } - scope.cancel() } - val config: StateFlow - get() = engine.config - - val configConstraints: StateFlow - get() = engine.configConstraints + private val _config = MutableStateFlow(config) + val config: StateFlow = _config.asStateFlow() fun setConfig(config: Configuration): Configuration = - engine.setConfig(config) + _config.updateAndGet { + config.copy( + rate = config.rate.coerceIn(engine.rateRange), + ) + } - fun voiceWithIdentifier(identifier: String): TtsEngine.Voice? = - configConstraints.value.availableVoices.firstOrNull { it.identifier == identifier } + val rateRange: ClosedRange + get() = engine.rateRange - fun playPause() { - when (state.value) { - is State.Failure -> return - State.Idle -> play() - is State.Playing -> pause() + private val _availableVoices = MutableStateFlow>(emptyList()) + val availableVoices: StateFlow> = _availableVoices.asStateFlow() + + fun voiceWithId(id: String): TtsEngine.Voice? = + engine.voiceWithId(id) + + fun start(fromLocator: Locator? = null) { + replacePlaybackJob { + publicationIterator = publication.contentIterator(fromLocator) + playNextUtterance(Direction.Forward) } } - fun play(start: Locator? = null) { + fun stop() { replacePlaybackJob { - if (start != null) { - speakingUtteranceIndex = null - utterances = emptyList() - contentIterator = publication.contentIterator(start) - } + _state.value = State.Stopped + publicationIterator = null + engine.cancel() + } + } - if (contentIterator == null) { - contentIterator = publication.contentIterator(null) + fun pause() { + replacePlaybackJob { + if (state.value is State.Playing) { + _state.value = State.Paused + engine.cancel() } + } + } - val utterance = currentUtterance - if (utterance != null) { - play(utterance) - } else { - playNextUtterance(Direction.Forward) + fun resume() { + replacePlaybackJob { + if (state.value is State.Paused) { + utterances.current() + ?.let(::play) } } } - fun pause() { - replacePlaybackJob { - _state.value = State.Idle - engine.stop() + fun resumeOrPause() { + when (state.value) { + is State.Failure, State.Stopped -> return + is State.Playing -> pause() + is State.Paused -> resume() } } @@ -182,93 +266,90 @@ class TtsController private constructor( Forward, Backward; } - private var contentIterator: ContentIterator? = null - set(value) { - contentIterator?.let { previous -> - scope.launch { previous.close() } - } - field = value - } - - private var speakingUtteranceIndex: Int? = null - - private var utterances = emptyList() - - private val currentUtterance: TtsEngine.Utterance? get() = - speakingUtteranceIndex?.let { utterances[it] } - private suspend fun playNextUtterance(direction: Direction) { val utterance = nextUtterance(direction) if (utterance != null) { play(utterance) } else { - _state.value = State.Idle + _state.value = State.Stopped } } - private fun play(utterance: TtsEngine.Utterance) { + private fun play(utterance: Utterance) { _state.value = State.Playing(utterance) - engine.speak(utterance) - } - - private suspend fun nextUtterance(direction: Direction): TtsEngine.Utterance? { - val nextIndex = nextUtteranceIndex(direction) - if (nextIndex == null) { - return if (loadNextUtterances(direction)) { - nextUtterance(direction) - } else { - null - } - } - speakingUtteranceIndex = nextIndex - return utterances[nextIndex] + engine.speak(TtsEngine.Utterance( + id = utterance.id, + text = utterance.text, + rate = config.value.rate, + voiceOrLanguage = utterance.voiceOrLanguage() + )) } - private fun nextUtteranceIndex(direction: Direction): Int? { - val index = when (direction) { - Direction.Forward -> (speakingUtteranceIndex ?: -1) + 1 - Direction.Backward -> (speakingUtteranceIndex ?: utterances.size) - 1 - } - - return index - .takeIf { utterances.indices.contains(it) } + private fun Utterance.voiceOrLanguage(): Either { + // User selected voice, if it's compatible with the given language. + config.value.voice + ?.takeIf { language == null || it.language.removeRegion() == language.removeRegion() } + ?.let { return Either.Left(it) } + + // Or fallback on the languages. + return Either.Right( + language + ?.takeIf { it != publication.metadata.language } + ?: config.value.defaultLanguage + ?: publication.metadata.language + ?: Language(Locale.getDefault()) + ) } - private suspend fun loadNextUtterances(direction: Direction): Boolean { - val content = when (direction) { - Direction.Forward -> contentIterator?.next() - Direction.Backward -> contentIterator?.previous() - } + private suspend fun nextUtterance(direction: Direction): Utterance? = + utterances.nextIn(direction) + ?: ( + if (loadUtterances(direction)) nextUtterance(direction) + else null + ) - utterances = content + + private suspend fun loadUtterances(direction: Direction): Boolean { + val utterancesList = publicationIterator + ?.nextIn(direction) ?.tokenize() ?.flatMap { it.utterances() } - ?: emptyList() - - speakingUtteranceIndex = null + ?.let { CursorList(it) } + ?: CursorList() + utterances = cursorList(utterancesList, direction) return utterances.isNotEmpty() } + private fun cursorList(list: List, direction: Direction): CursorList = + CursorList( + list = list, + startIndex = when (direction) { + Direction.Forward -> 0 + Direction.Backward -> list.size - 1 + } + ) + private fun Content.tokenize(): List = tokenizerFactory.create(config.value.defaultLanguage) .tokenize(this) - private fun Content.utterances(): List { - fun utterance(text: String, locator: Locator, language: Language? = null): TtsEngine.Utterance? { + private fun Content.utterances(): List { + fun utterance(text: String, locator: Locator, language: Language? = null): Utterance? { if (!text.any { it.isLetterOrDigit() }) return null - return TtsEngine.Utterance( + return Utterance( + id = UUID.randomUUID().toString(), text = text, locator = locator, - language = language?.takeIf { it != publication.metadata.language } + language = language ) } return when (val data = data) { - is Data.Image -> { + is Content.Data.Image -> { listOfNotNull( data.description ?.takeIf { it.isNotBlank() } @@ -276,7 +357,7 @@ class TtsController private constructor( ) } - is Data.Text -> { + is Content.Data.Text -> { data.spans.mapNotNull { span -> utterance( text = span.text, @@ -293,45 +374,65 @@ class TtsController private constructor( private var playbackJob: Job? = null /** - * Cancels the previous playback-related job and starts a new one witht he given suspending + * Cancels the previous playback-related job and starts a new one with the given suspending * [block]. */ private fun replacePlaybackJob(block: suspend CoroutineScope.() -> Unit) { - playbackJob?.cancel() - playbackJob = scope.launch(block = block) + scope.launch { + playbackJob?.cancelAndJoin() + playbackJob = launch { + mutex.withLock { + block() + } + } + } } private inner class EngineListener : TtsEngine.Listener { - override fun onSpeakRangeAt(locator: Locator, utterance: TtsEngine.Utterance) { - scope.launch { - _state.value = State.Playing(utterance, range = locator) - } + override fun onSpeakRange(utteranceId: String, range: IntRange) { + val utterance = utterances.current()?.takeIf { it.id == utteranceId } ?: return + Timber.e("FIND RANGE") + _state.value = State.Playing( + utterance = utterance, + range = utterance.locator.copy( + text = utterance.locator.text.substring(range) + ) + ) } - override fun onStop() { - scope.launch { - if (state.value is State.Playing) { - next() - } + override fun onDone(utteranceId: String) { + if (state.value is State.Playing) { + next() } } override fun onEngineError(error: TtsEngine.Exception) { - scope.launch { - _state.value = State.Idle - } + listener?.onError(Exception.Engine(error)) + _state.value = State.Failure(Exception.Engine(error)) } - override fun onUtteranceError(utterance: TtsEngine.Utterance, error: TtsEngine.Exception) { - scope.launch { - listener?.onUtteranceError(utterance, error) + override fun onUtteranceError(utteranceId: String, error: TtsEngine.Exception) { + val utterance = utterances.current()?.takeIf { it.id == utteranceId } ?: return - _state.update { state -> - if (state is State.Playing) State.Idle - else state - } - } + listener?.onUtteranceError(utterance, Exception.Engine(error)) + _state.value = State.Paused + } + + override fun onAvailableVoicesChange(voices: List) { + _availableVoices.value = voices } } + + private fun CursorList.nextIn(direction: Direction): E? = + when (direction) { + Direction.Forward -> next() + Direction.Backward -> previous() + } + + private suspend fun ContentIterator.nextIn(direction: Direction): Content? = + when (direction) { + Direction.Forward -> next() + Direction.Backward -> previous() + } } \ No newline at end of file diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index de84786646..934dae74ee 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -6,46 +6,86 @@ package org.readium.r2.navigator.tts -import kotlinx.coroutines.flow.StateFlow -import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.util.Either import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.SuspendingCloseable -import java.util.* +/** + * A text-to-speech engine plays text utterances (e.g. sentence) to the user. + * + * Implement this interface to support third-party eniines with [TtsController]. + */ +@ExperimentalReadiumApi interface TtsEngine : SuspendingCloseable { + @ExperimentalReadiumApi sealed class Exception private constructor( override val message: String, cause: Throwable? = null ) : kotlin.Exception(message, cause) { /** Failed to initialize the TTS engine. */ - class InitializationFailed(cause: Throwable? = null) : Exception("The TTS engine failed to initialize", cause) - class LanguageNotSupported(val language: Language, cause: Throwable? = null) : Exception("The language ${language.code} is not supported by the TTS engine", cause) - class LanguageSupportIncomplete(val language: Language, cause: Throwable? = null) : Exception("The language ${language.code} requires additional files by the TTS engine", cause) - class Network(cause: Throwable? = null) : Exception("A network error occurred", cause) - class Other(override val cause: Throwable) : Exception(cause.message ?: "An unknown error occurred", cause) + class InitializationFailed(cause: Throwable? = null) + : Exception("The TTS engine failed to initialize", cause) + + class LanguageNotSupported(val language: Language, cause: Throwable? = null) + : Exception("The language ${language.code} is not supported by the TTS engine", cause) + + class LanguageSupportIncomplete(val language: Language, cause: Throwable? = null) + : Exception("The language ${language.code} requires additional files by the TTS engine", cause) + + class Network(cause: Throwable? = null) + : Exception("A network error occurred", cause) + + class Other(override val cause: Throwable) + : Exception(cause.message ?: "An unknown error occurred", cause) + + companion object { + fun wrap(e: Throwable): Exception = when (e) { + is Exception -> e + else -> Other(e) + } + } } + @ExperimentalReadiumApi interface Listener { - fun onSpeakRangeAt(locator: Locator, utterance: Utterance) - fun onStop() + fun onSpeakRange(utteranceId: String, range: IntRange) + fun onDone(utteranceId: String) + fun onEngineError(error: Exception) - fun onUtteranceError(utterance: Utterance, error: Exception) - } + fun onUtteranceError(utteranceId: String, error: Exception) - data class Configuration( - val defaultLanguage: Language? = null, - val voice: Voice? = null, - val rate: Double = 1.0, - ) + fun onAvailableVoicesChange(voices: List) + } - data class ConfigurationConstraints( - val rateRange: ClosedRange = 1.0..1.0, - val availableVoices: List = emptyList() + /** + * An utterance is a short text that can be synthesized by the TTS engine. + * + * @param id Unique identifier for this utterance, in the context of the caller. + * @param text Text to be spoken. + */ + @ExperimentalReadiumApi + data class Utterance( + val id: String, + val text: String, + val rate: Double, + val voiceOrLanguage: Either ) + /** + * Represents a voice provided by the TTS engine which can speak an utterance. + * + * @param id Unique and stable identifier for this voice. Can be used to store and retrieve the + * voice in the user preferences. + * @param name Human-friendly name for this voice, when available. + * @param language Language (and region) this voice belongs to. + * @param quality Voice quality. + * @param requiresNetwork Indicates whether using this voice requires an Internet connection. + */ + @ExperimentalReadiumApi data class Voice( - val identifier: String, + val id: String, val name: String? = null, val language: Language, val quality: Quality = Quality.Normal, @@ -56,16 +96,19 @@ interface TtsEngine : SuspendingCloseable { } } - val config: StateFlow - val configConstraints: StateFlow - fun setConfig(config: Configuration): Configuration + /** + * Requests to speak the given utterance. + */ + fun speak(utterance: Utterance) - data class Utterance( - val text: String, - val locator: Locator, - val language: Language? - ) + /** + * Cancels the currently spoken utterance. + */ + fun cancel() - fun speak(utterance: Utterance) - fun stop() + val rateRange: ClosedRange + val availableVoices: List + + fun voiceWithId(id: String): Voice? = + availableVoices.firstOrNull { it.id == id } } \ No newline at end of file diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Locator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Locator.kt index 5c0359c5a3..5e3cc66c6a 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Locator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Locator.kt @@ -129,12 +129,12 @@ data class Locator( put("after", after) } - fun substring(start: Int, end: Int): Text { + fun substring(range: IntRange): Text { highlight ?: return this return copy( - before = (before ?: "") + highlight.substring(0, start), - highlight = highlight.substring(start, end), - after = highlight.substring(end) + (after ?: "") + before = (before ?: "") + highlight.substring(0, range.first), + highlight = highlight.substring(range), + after = highlight.substring(range.last) + (after ?: "") ) } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt index ee9d4b7359..ad44b00807 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt @@ -1,9 +1,20 @@ package org.readium.r2.shared.util -import org.readium.r2.shared.InternalReadiumApi - -@InternalReadiumApi sealed class Either { class Left(val left: A) : Either() class Right(val right: B) : Either() + + inline fun onLeft(action: (value: A) -> Unit): Either { + (this as? Left)?.let { + action(it.left) + } + return this + } + + inline fun onRight(action: (value: B) -> Unit): Either { + (this as? Right)?.let { + action(it.right) + } + return this + } } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index 6a688978ae..b0f8711dd5 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -24,7 +24,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.fragment.app.Fragment -import androidx.fragment.app.activityViewModels import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle @@ -199,7 +198,7 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.tts -> { - checkNotNull(model.tts).play(navigator) + checkNotNull(model.tts).start(navigator) } else -> return super.onOptionsItemSelected(item) } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index fdc6444b72..af12d28fcc 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -16,14 +16,16 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import org.readium.r2.navigator.tts.TtsEngine.Configuration +import org.readium.r2.navigator.tts.TtsController.Configuration import org.readium.r2.navigator.tts.TtsEngine.Voice +import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R import org.readium.r2.testapp.shared.views.SelectorListItem import org.readium.r2.testapp.utils.extensions.asStateWhenStarted import java.text.DecimalFormat +@OptIn(ExperimentalReadiumApi::class) @Composable fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { val showControls by model.state.asStateWhenStarted { it.showControls } @@ -39,7 +41,7 @@ fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { availableVoices = settings.availableVoices, config = settings.config, onConfigChange = model::setConfig, - onPlayPause = model::playPause, + onPlayPause = model::resumeOrPause, onStop = model::stop, onPrevious = model::previous, onNext = model::next, @@ -48,6 +50,7 @@ fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { } } +@OptIn(ExperimentalReadiumApi::class) @Composable fun TtsControls( playing: Boolean, @@ -132,6 +135,7 @@ fun TtsControls( } } +@OptIn(ExperimentalReadiumApi::class) @Composable private fun TtsSettingsDialog( availableRates: List, @@ -182,7 +186,7 @@ private fun TtsSettingsDialog( label = stringResource(R.string.voice), values = availableVoices, selection = config.voice, - titleForValue = { it?.name ?: it?.identifier ?: stringResource(R.string.auto) }, + titleForValue = { it?.name ?: it?.id ?: stringResource(R.string.auto) }, onSelected = { onConfigChange(config.copy(voice = it)) } ) } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index eb0e8e5b9b..21e62e36b4 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -18,6 +18,7 @@ import org.readium.r2.navigator.ExperimentalDecorator import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.tts.AndroidTtsEngine import org.readium.r2.navigator.tts.TtsController +import org.readium.r2.navigator.tts.TtsController.Configuration import org.readium.r2.navigator.tts.TtsEngine import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.DelicateReadiumApi @@ -74,7 +75,7 @@ class TtsViewModel private constructor( * @param availableVoices Voices supported by the TTS engine, for the selected language. */ data class Settings( - val config: TtsEngine.Configuration = TtsEngine.Configuration(), + val config: Configuration = Configuration(), val rateRange: ClosedRange = 1.0..1.0, val availableLanguages: List = emptyList(), val availableVoices: List = emptyList(), @@ -109,28 +110,13 @@ class TtsViewModel private constructor( init { controller.listener = ControllerListener() - // Handle global [TtsController] failures. - controller.state - .filterIsInstance() - .map(::error) - .onEach(::handleTtsException) - .launchIn(scope) - - val rateRange: Flow> = - controller.configConstraints - .map { it.rateRange } - val voicesByLanguage: Flow>> = - controller.configConstraints - .map { - it.availableVoices - .groupBy { v -> v.language.removeRegion() } - } + controller.availableVoices + .map { voices -> voices.groupBy { it.language } } val languages: Flow> = voicesByLanguage - .map { - it.keys - .sortedBy { l -> l.locale.displayName } + .map { voices -> + voices.keys.sortedBy { it.locale.displayName } } val voicesForSelectedLanguage: Flow> = @@ -139,20 +125,19 @@ class TtsViewModel private constructor( voicesByLanguage, ) { language, voices -> language - ?.let { voices[it.removeRegion()] } - ?.sortedBy { it.name ?: it.identifier } + ?.let { voices[it] } + ?.sortedBy { it.name ?: it.id } ?: emptyList() } val settings: Flow = combine( controller.config, - rateRange, languages, voicesForSelectedLanguage, - ) { config, rates, langs, voices -> + ) { config, langs, voices -> Settings( config = config, - rateRange = rates, + rateRange = controller.rateRange, availableLanguages = langs, availableVoices = voices ) @@ -181,54 +166,6 @@ class TtsViewModel private constructor( }.stateIn(scope, SharingStarted.Eagerly, initialValue = State()) } - private inner class ControllerListener : TtsController.Listener { - override fun onUtteranceError( - utterance: TtsEngine.Utterance, - error: TtsEngine.Exception - ) { - scope.launch { - val shouldContinuePlayback = handleTtsException(error) - - if (shouldContinuePlayback) { - next() - } - } - - } - } - - /** - * Handles the given error and returns whether the playback should continue. - */ - private suspend fun handleTtsException(error: TtsEngine.Exception): Boolean = - when (error) { - // The `LanguageSupportIncomplete` exception is a special case. We can recover from - // it by asking the user to download the missing voice data. - is TtsEngine.Exception.LanguageSupportIncomplete -> { - _events.send(Event.OnMissingVoiceData(error.language)) - false - } - - else -> { - _events.send(Event.OnError(error.toUserException())) - true - } - } - - private fun TtsEngine.Exception.toUserException(): UserException = - when (this) { - is TtsEngine.Exception.InitializationFailed -> - UserException(R.string.tts_error_initialization) - is TtsEngine.Exception.LanguageNotSupported -> - UserException(R.string.tts_error_language_not_supported, language.locale.displayName) - is TtsEngine.Exception.LanguageSupportIncomplete -> - UserException(R.string.tts_error_language_support_incomplete, language.locale.displayName) - is TtsEngine.Exception.Network -> - UserException(R.string.tts_error_network) - is TtsEngine.Exception.Other -> - UserException(R.string.tts_error_other) - } - fun onCleared() { runBlocking { controller.close() @@ -239,19 +176,17 @@ class TtsViewModel private constructor( * Begins the TTS playback in the given [navigator]. */ fun start(navigator: Navigator) = scope.launch { - controller.play( - start = navigator.firstVisibleElementLocator() - ) + controller.start(fromLocator = navigator.firstVisibleElementLocator()) isStarted.value = true } fun stop() { - controller.pause() + controller.stop() isStarted.value = false } - fun playPause() { - controller.playPause() + fun resumeOrPause() { + controller.resumeOrPause() } fun pause() { @@ -266,7 +201,7 @@ class TtsViewModel private constructor( controller.next() } - fun setConfig(config: TtsEngine.Configuration) { + fun setConfig(config: Configuration) { controller.setConfig(config) } @@ -274,4 +209,66 @@ class TtsViewModel private constructor( fun requestInstallVoice(context: Context) { controller.engine.requestInstallMissingVoice(context) } + + private inner class ControllerListener : TtsController.Listener { + override fun onUtteranceError( + utterance: TtsController.Utterance, + error: TtsController.Exception + ) { + scope.launch { + val shouldContinuePlayback = handleTtsException(error) + + if (shouldContinuePlayback) { + next() + } + } + + } + + override fun onError(error: TtsController.Exception) { + scope.launch { + handleTtsException(error) + } + } + + /** + * Handles the given error and returns whether the playback should continue. + */ + private suspend fun handleTtsException(error: TtsController.Exception): Boolean = + when (error) { + is TtsController.Exception.Engine -> when (val err = error.error) { + // The `LanguageSupportIncomplete` exception is a special case. We can recover from + // it by asking the user to download the missing voice data. + is TtsEngine.Exception.LanguageSupportIncomplete -> { + _events.send(Event.OnMissingVoiceData(err.language)) + false + } + + else -> { + _events.send(Event.OnError(err.toUserException())) + true + } + } + } + + private fun TtsEngine.Exception.toUserException(): UserException = + when (this) { + is TtsEngine.Exception.InitializationFailed -> + UserException(R.string.tts_error_initialization) + is TtsEngine.Exception.LanguageNotSupported -> + UserException( + R.string.tts_error_language_not_supported, + language.locale.displayName + ) + is TtsEngine.Exception.LanguageSupportIncomplete -> + UserException( + R.string.tts_error_language_support_incomplete, + language.locale.displayName + ) + is TtsEngine.Exception.Network -> + UserException(R.string.tts_error_network) + is TtsEngine.Exception.Other -> + UserException(R.string.tts_error_other) + } + } } From 9aaa66447e452eb8d3b4a39b956f69bb470c5f24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 4 Jul 2022 17:48:28 +0200 Subject: [PATCH 36/59] Disable touches during playback --- .../navigator/epub/EpubNavigatorFragment.kt | 1 - .../readium/r2/navigator/tts/TtsController.kt | 9 +- .../r2/testapp/reader/BaseReaderFragment.kt | 6 + .../r2/testapp/reader/VisualReaderFragment.kt | 108 ++++++++++++++---- .../r2/testapp/reader/tts/TtsViewModel.kt | 18 +-- 5 files changed, 100 insertions(+), 42 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index 830d0dee68..bb2af77e6f 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -342,7 +342,6 @@ class EpubNavigatorFragment private constructor( } if (publication.metadata.presentation.layout != EpubLayout.FIXED) { - pendingLocator = locator setCurrent(resourcesSingle) } else { diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt index 88cb4a198b..06f76c9589 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt @@ -7,14 +7,15 @@ package org.readium.r2.navigator.tts import android.content.Context -import android.database.Cursor import kotlinx.coroutines.* -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.updateAndGet import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import org.readium.r2.shared.DelicateReadiumApi import org.readium.r2.shared.ExperimentalReadiumApi -import org.readium.r2.shared.InternalReadiumApi import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication @@ -28,7 +29,6 @@ import org.readium.r2.shared.util.SuspendingCloseable import org.readium.r2.shared.util.tokenizer.ContentTokenizer import org.readium.r2.shared.util.tokenizer.TextContentTokenizer import org.readium.r2.shared.util.tokenizer.TextUnit -import timber.log.Timber import java.util.* @ExperimentalReadiumApi @@ -392,7 +392,6 @@ class TtsController private constructor( override fun onSpeakRange(utteranceId: String, range: IntRange) { val utterance = utterances.current()?.takeIf { it.id == utteranceId } ?: return - Timber.e("FIND RANGE") _state.value = State.Playing( utterance = utterance, range = utterance.locator.copy( diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt index c97bc9a563..4e76d70787 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt @@ -15,6 +15,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import org.readium.r2.lcp.lcpLicense import org.readium.r2.navigator.Navigator +import org.readium.r2.shared.UserException import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.testapp.R @@ -78,4 +79,9 @@ abstract class BaseReaderFragment : Fragment() { open fun go(locator: Locator, animated: Boolean) { navigator.go(locator, animated) } + + protected fun showError(error: UserException) { + val context = context ?: return + Toast.makeText(context, error.getUserMessage(context), Toast.LENGTH_LONG).show() + } } \ No newline at end of file diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index b0f8711dd5..cc3962134a 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -15,13 +15,21 @@ import android.os.Bundle import android.view.* import android.view.WindowInsets import android.view.inputmethod.InputMethodManager -import android.widget.* +import android.widget.EditText +import android.widget.LinearLayout +import android.widget.PopupWindow +import android.widget.TextView import androidx.annotation.ColorInt import androidx.appcompat.app.AppCompatActivity +import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.unit.dp import androidx.fragment.app.Fragment import androidx.lifecycle.Lifecycle @@ -34,7 +42,6 @@ import kotlinx.parcelize.Parcelize import org.readium.r2.navigator.* import org.readium.r2.navigator.util.BaseActionModeCallback import org.readium.r2.navigator.util.EdgeTapNavigation -import org.readium.r2.shared.UserException import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R import org.readium.r2.testapp.databinding.FragmentReaderBinding @@ -67,16 +74,17 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List return binding.root } + /** + * When true, the user won't be able to interact with the navigator. + */ + private var disableTouches by mutableStateOf(false) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) navigatorFragment = navigator as Fragment - viewLifecycleOwner.lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { - setupObserversIn(this) - } - } + setupObservers() childFragmentManager.addOnBackStackChangedListener { updateSystemUiVisibility() @@ -87,6 +95,19 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List } binding.overlay.setContent { + if (disableTouches) { + // Add an invisible box on top of the navigator to intercept touch gestures. + Box( + modifier = Modifier + .fillMaxSize() + .pointerInput(Unit) { + detectTapGestures { + requireActivity().toggleSystemUi() + } + } + ) + } + Box( modifier = Modifier .fillMaxSize() @@ -108,29 +129,42 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List } } - private suspend fun setupObserversIn(scope: CoroutineScope) { - navigator.currentLocator - .onEach { model.saveProgression(it) } - .launchIn(scope) + private fun setupObservers() { + viewLifecycleOwner.lifecycleScope.launch { + viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { + navigator.currentLocator + .onEach { model.saveProgression(it) } + .launchIn(this) + + setupHighlights(this) + setupSearch(this) + setupTts(this) + } + } + } + private suspend fun setupHighlights(scope: CoroutineScope) { (navigator as? DecorableNavigator)?.let { navigator -> navigator.addDecorationListener("highlights", decorationListener) model.highlightDecorations .onEach { navigator.applyDecorations(it, "highlights") } .launchIn(scope) + } + } + private suspend fun setupSearch(scope: CoroutineScope) { + (navigator as? DecorableNavigator)?.let { navigator -> model.searchDecorations .onEach { navigator.applyDecorations(it, "search") } .launchIn(scope) - - model.tts?.state - ?.map { it.playingHighlight } - ?.distinctUntilChanged() - ?.onEach { navigator.applyDecorations(listOfNotNull(it), "tts") } - ?.launchIn(scope) } + } + /** + * Setup text-to-speech observers, if available. + */ + private suspend fun setupTts(scope: CoroutineScope) { model.tts?.apply { events .onEach { event -> @@ -144,22 +178,48 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List } .launchIn(scope) - state - .map { it.playingRange } + // Navigate to the currently spoken word. + // This will automatically turn pages when needed. + state.map { it.playingWordRange } .filterNotNull() + // Improve performances by throttling the moves to maximum one per second. .throttleLatest(1.seconds) .onEach { locator -> navigator.go(locator, animated = false) } .launchIn(scope) - } - } - private fun showError(error: UserException) { - val context = context ?: return - Toast.makeText(context, error.getUserMessage(context), Toast.LENGTH_LONG).show() + // Prevent interacting with the publication (including page turns) while the TTS is + // playing. + state.map { it.isPlaying } + .distinctUntilChanged() + .onEach { isPlaying -> + disableTouches = isPlaying + } + .launchIn(scope) + + // Highlight the currently spoken utterance. + (navigator as? DecorableNavigator)?.let { navigator -> + state.map { it.playingUtterance } + .distinctUntilChanged() + .onEach { locator -> + val decoration = locator?.let { + Decoration( + id = "tts", + locator = it, + style = Decoration.Style.Highlight(tint = Color.RED) + ) + } + navigator.applyDecorations(listOfNotNull(decoration), "tts") + } + .launchIn(scope) + } + } } + /** + * Confirms with the user if they want to download the TTS voice data for the given language. + */ private suspend fun confirmAndInstallTtsVoice(language: Language) { val activity = activity ?: return val tts = model.tts ?: return diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 21e62e36b4..1c77f8085e 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -56,15 +56,15 @@ class TtsViewModel private constructor( /** * @param showControls Whether the TTS was enabled by the user. * @param isPlaying Whether the TTS is currently speaking. - * @param playingRange Locator to the currently spoken word. - * @param playingHighlight Decoration for the currently spoken utterance. + * @param playingWordRange Locator to the currently spoken word. + * @param playingUtterance Locator for the currently spoken utterance (e.g. sentence). * @param settings Current user settings and their constraints. */ data class State( val showControls: Boolean = false, val isPlaying: Boolean = false, - val playingRange: Locator? = null, - val playingHighlight: Decoration? = null, + val playingWordRange: Locator? = null, + val playingUtterance: Locator? = null, val settings: Settings = Settings() ) @@ -153,14 +153,8 @@ class TtsViewModel private constructor( State( showControls = isStarted, isPlaying = (playing != null), - playingRange = playing?.range, - playingHighlight = playing?.run { - Decoration( - id = "tts", - locator = utterance.locator, - style = Decoration.Style.Highlight(tint = Color.RED) - ) - }, + playingWordRange = playing?.range, + playingUtterance = playing?.utterance?.locator, settings = currentSettings ) }.stateIn(scope, SharingStarted.Eagerly, initialValue = State()) From 44847830f56dbceb008181e5f76bfc287470ecb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 4 Jul 2022 18:33:28 +0200 Subject: [PATCH 37/59] Fix lints --- .../src/main/assets/_scripts/src/dom.js | 3 +- .../assets/readium/scripts/readium-fixed.js | 2 +- .../readium/scripts/readium-reflowable.js | 2 +- .../r2/testapp/utils/extensions/Flow.kt | 43 ++++++++----------- 4 files changed, 20 insertions(+), 30 deletions(-) diff --git a/readium/navigator/src/main/assets/_scripts/src/dom.js b/readium/navigator/src/main/assets/_scripts/src/dom.js index ae94d981ae..21443514f5 100644 --- a/readium/navigator/src/main/assets/_scripts/src/dom.js +++ b/readium/navigator/src/main/assets/_scripts/src/dom.js @@ -4,7 +4,7 @@ // available in the top-level LICENSE file of the project. // -import { log as logNative, isScrollModeEnabled, pageWidth } from "./utils"; +import { isScrollModeEnabled, pageWidth } from "./utils"; import { getCssSelector } from "css-selector-generator"; export function findFirstVisibleLocator() { @@ -61,7 +61,6 @@ function elementRelativePosition(element, domRect /* nullable */) { const rect = domRect || element.getBoundingClientRect(); - const scrollElement = document.scrollingElement; if (isScrollModeEnabled()) { return rect.top >= 0 && rect.top <= document.documentElement.clientHeight; } else { diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js index 2ee9f8779a..811aa30d20 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-fixed.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n return scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n\n return true;\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n bindDragGesture(document);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n\nfunction bindDragGesture(element) {\n // passive: false is necessary to be able to prevent the default behavior.\n element.addEventListener("touchstart", onStart, {\n passive: false\n });\n element.addEventListener("touchend", onEnd, {\n passive: false\n });\n element.addEventListener("touchmove", onMove, {\n passive: false\n });\n var state = undefined;\n var isStartingDrag = false;\n var pixelRatio = window.devicePixelRatio;\n\n function onStart(event) {\n isStartingDrag = true;\n var startX = event.touches[0].clientX * pixelRatio;\n var startY = event.touches[0].clientY * pixelRatio;\n state = {\n defaultPrevented: event.defaultPrevented,\n startX: startX,\n startY: startY,\n currentX: startX,\n currentY: startY,\n offsetX: 0,\n offsetY: 0,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n }\n\n function onMove(event) {\n if (!state) return;\n state.currentX = event.touches[0].clientX * pixelRatio;\n state.currentY = event.touches[0].clientY * pixelRatio;\n state.offsetX = state.currentX - state.startX;\n state.offsetY = state.currentY - state.startY;\n var shouldPreventDefault = false; // Wait for a movement of at least 6 pixels before reporting a drag.\n\n if (isStartingDrag) {\n if (Math.abs(state.offsetX) >= 6 || Math.abs(state.offsetY) >= 6) {\n isStartingDrag = false;\n shouldPreventDefault = Android.onDragStart(JSON.stringify(state));\n }\n } else {\n shouldPreventDefault = Android.onDragMove(JSON.stringify(state));\n }\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n function onEnd(event) {\n if (!state) return;\n var shouldPreventDefault = Android.onDragEnd(JSON.stringify(state));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n state = undefined;\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFNLENBQUNxWSxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0FyWSxNQUFNLENBQUM0Wix1QkFBUCxHQUFpQ0EsdUJBQWpDO0FBQ0E1WixNQUFNLENBQUM0akIsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBNWpCLE1BQU0sQ0FBQzJqQiwyQkFBUCxHQUFxQ0EsMkJBQXJDO0FBQ0EzakIsTUFBTSxDQUFDK2pCLGFBQVAsR0FBdUJBLGFBQXZCLEM7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUEvakIsTUFBTSxDQUFDd2tCLE9BQVAsQ0FBZTVFLGFBQWYsR0FBK0IsSUFBL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1maXhlZC5qcz9kOTlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmVjdChyZWN0KSB7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gd2luZG93LmlubmVySGVpZ2h0IC8gMjtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1N0YXJ0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1N0YXJ0XCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbmQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvRW5kXCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoICogZmFjdG9yXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0O1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSBsZWZ0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCAtIHBhZ2VXaWR0aDtcbiAgdmFyIG1pbk9mZnNldCA9IGlzUlRMKCkgPyAtKGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGgpIDogMDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWF4KG9mZnNldCwgbWluT2Zmc2V0KSk7XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgcmlnaHQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFJpZ2h0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCArIHBhZ2VXaWR0aDtcbiAgdmFyIG1heE9mZnNldCA9IGlzUlRMKCkgPyAwIDogZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWluKG9mZnNldCwgbWF4T2Zmc2V0KSk7XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGdpdmVuIGxlZnQgb2Zmc2V0LlxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBzY3JvbGwgcG9zaXRpb24gaXMgYWxyZWFkeSBjbG9zZSBlbm91Z2ggdG8gdGhlIGdpdmVuIG9mZnNldC5cbmZ1bmN0aW9uIHNjcm9sbFRvT2Zmc2V0KG9mZnNldCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb09mZnNldCBcIiArIG9mZnNldCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBcIkNhbGxlZCBzY3JvbGxUb09mZnNldCgpIHdpdGggc2Nyb2xsIG1vZGUgZW5hYmxlZC4gVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHBhZ2luYXRlZCBtb2RlLlwiO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICAvLyBJbiBzb21lIGNhc2UgdGhlIHNjcm9sbFggY2Fubm90IHJlYWNoIHRoZSBwb3NpdGlvbiByZXNwZWN0aW5nIHRvIGlubmVyV2lkdGhcbiAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50T2Zmc2V0IC0gb2Zmc2V0KSAvIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIGRpZmYgPiAwLjAxO1xufVxuXG4vLyBTbmFwIHRoZSBvZmZzZXQgdG8gdGhlIHNjcmVlbiB3aWR0aCAocGFnZSB3aWR0aCkuXG5mdW5jdGlvbiBzbmFwT2Zmc2V0KG9mZnNldCkge1xuICB2YXIgdmFsdWUgPSBvZmZzZXQgKyAoaXNSVEwoKSA/IC0xIDogMSk7XG4gIHJldHVybiB2YWx1ZSAtICh2YWx1ZSAlIHBhZ2VXaWR0aCk7XG59XG5cbi8vIFNuYXBzIHRoZSBjdXJyZW50IG9mZnNldCB0byB0aGUgcGFnZSB3aWR0aC5cbmZ1bmN0aW9uIHNuYXBDdXJyZW50T2Zmc2V0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzbmFwQ3VycmVudE9mZnNldFwiKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICAvLyBBZGRzIGhhbGYgYSBwYWdlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzbmFwIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgdmFyIGRlbHRhID0gZmFjdG9yICogKHBhZ2VXaWR0aCAvIDIpO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KGN1cnJlbnRPZmZzZXQgKyBkZWx0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUZyb21Mb2NhdG9yKGxvY2F0b3IpIHtcbiAgbGV0IHRleHQgPSBsb2NhdG9yLnRleHQ7XG4gIGlmICghdGV4dCB8fCAhdGV4dC5oaWdobGlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHZhciByb290O1xuICAgIGxldCBsb2NhdGlvbnMgPSBsb2NhdG9yLmxvY2F0aW9ucztcbiAgICBpZiAobG9jYXRpb25zICYmIGxvY2F0aW9ucy5jc3NTZWxlY3Rvcikge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb25zLmNzc1NlbGVjdG9yKTtcbiAgICB9XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG4gIGJpbmREcmFnR2VzdHVyZShkb2N1bWVudCk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kRHJhZ0dlc3R1cmUoZWxlbWVudCkge1xuICAvLyBwYXNzaXZlOiBmYWxzZSBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIG9uU3RhcnQsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIG9uRW5kLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgb25Nb3ZlLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuXG4gIHZhciBzdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdmFyIGlzU3RhcnRpbmdEcmFnID0gZmFsc2U7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcblxuICBmdW5jdGlvbiBvblN0YXJ0KGV2ZW50KSB7XG4gICAgaXNTdGFydGluZ0RyYWcgPSB0cnVlO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYICogcGl4ZWxSYXRpbztcbiAgICBjb25zdCBzdGFydFkgPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFkgKiBwaXhlbFJhdGlvO1xuICAgIHN0YXRlID0ge1xuICAgICAgZGVmYXVsdFByZXZlbnRlZDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZCxcbiAgICAgIHN0YXJ0WDogc3RhcnRYLFxuICAgICAgc3RhcnRZOiBzdGFydFksXG4gICAgICBjdXJyZW50WDogc3RhcnRYLFxuICAgICAgY3VycmVudFk6IHN0YXJ0WSxcbiAgICAgIG9mZnNldFg6IDAsXG4gICAgICBvZmZzZXRZOiAwLFxuICAgICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW92ZShldmVudCkge1xuICAgIGlmICghc3RhdGUpIHJldHVybjtcblxuICAgIHN0YXRlLmN1cnJlbnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYICogcGl4ZWxSYXRpbztcbiAgICBzdGF0ZS5jdXJyZW50WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSAqIHBpeGVsUmF0aW87XG4gICAgc3RhdGUub2Zmc2V0WCA9IHN0YXRlLmN1cnJlbnRYIC0gc3RhdGUuc3RhcnRYO1xuICAgIHN0YXRlLm9mZnNldFkgPSBzdGF0ZS5jdXJyZW50WSAtIHN0YXRlLnN0YXJ0WTtcblxuICAgIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgIC8vIFdhaXQgZm9yIGEgbW92ZW1lbnQgb2YgYXQgbGVhc3QgNiBwaXhlbHMgYmVmb3JlIHJlcG9ydGluZyBhIGRyYWcuXG4gICAgaWYgKGlzU3RhcnRpbmdEcmFnKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoc3RhdGUub2Zmc2V0WCkgPj0gNiB8fCBNYXRoLmFicyhzdGF0ZS5vZmZzZXRZKSA+PSA2KSB7XG4gICAgICAgIGlzU3RhcnRpbmdEcmFnID0gZmFsc2U7XG4gICAgICAgIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vbkRyYWdTdGFydChKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25EcmFnTW92ZShKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRW5kKGV2ZW50KSB7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uRHJhZ0VuZChKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBzdGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDc3NTZWxlY3RvciB9IGZyb20gXCJjc3Mtc2VsZWN0b3ItZ2VuZXJhdG9yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcigpIHtcbiAgY29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBocmVmOiBcIiNcIixcbiAgICB0eXBlOiBcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiLFxuICAgIGxvY2F0aW9uczoge1xuICAgICAgY3NzU2VsZWN0b3I6IGdldENzc1NlbGVjdG9yKGVsZW1lbnQpLFxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiBlbGVtZW50LnRleHRDb250ZW50LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFbGVtZW50KHJvb3RFbGVtZW50KSB7XG4gIHZhciBmb3VuZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgY29uc3QgcG9zaXRpb24gPSBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihjaGlsZCwgdW5kZWZpbmVkKTtcbiAgICBpZiAocG9zaXRpb24gPT0gMCkge1xuICAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICBmb3VuZEVsZW1lbnQgPSBjaGlsZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgaWYgKCFmb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50KGZvdW5kRWxlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJvb3RFbGVtZW50O1xufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHJldHVybiB0cnVlO1xuXG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgIWRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGlmIChyZWN0LmxlZnQgPj0gcGFnZVdpZHRoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKHJlY3QubGVmdCA+PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIGZpeGVkIGxheW91dHMgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzRml4ZWRMYXlvdXQgPSB0cnVlO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImJpbmREcmFnR2VzdHVyZSIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0Iiwib25TdGFydCIsInBhc3NpdmUiLCJvbkVuZCIsIm9uTW92ZSIsInN0YXRlIiwiaXNTdGFydGluZ0RyYWciLCJzdGFydFgiLCJ0b3VjaGVzIiwic3RhcnRZIiwiY3VycmVudFgiLCJjdXJyZW50WSIsIm9mZnNldFgiLCJvZmZzZXRZIiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEVsZW1lbnQiLCJocmVmIiwicm9vdEVsZW1lbnQiLCJlbGVtZW50UmVsYXRpdmVQb3NpdGlvbiIsInNob3VsZElnbm9yZUVsZW1lbnQiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz80ZWE4Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz83NGM5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/YTYyMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzAxZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NjY2MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NmY5MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz81YTAxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/NDI2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz81YWVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzYzOTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz84ZDcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/ZWFhNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzhlMDkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz8xMzA0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz82NzlhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz84NzVlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZTg1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2IzN2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzP2EwODciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9iODZjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz9iMjE4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzQyNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzFkZTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85OTYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz8wOGE4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZjM5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz9iYWU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzP2UzYTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz84OTU0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz80YmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz82OTRmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz9lZDNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzPzU5OGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9hODA4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz9kNGYxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/Y2E0MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz82ZDczIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzYyZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/NzhjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/NjBhNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz9lNWExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/OGYyNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NjEwMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/YzRkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzP2VkYzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzP2U3ODEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9hODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzP2NmYjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/Yjk1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz83NzM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzP2NlNzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/ZmQyYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTNiNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/NzQ3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz84YTM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2Q4MmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/OGRmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz9lMGI2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},6396:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n return scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n\n return true;\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n bindDragGesture(document);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n\nfunction bindDragGesture(element) {\n // passive: false is necessary to be able to prevent the default behavior.\n element.addEventListener("touchstart", onStart, {\n passive: false\n });\n element.addEventListener("touchend", onEnd, {\n passive: false\n });\n element.addEventListener("touchmove", onMove, {\n passive: false\n });\n var state = undefined;\n var isStartingDrag = false;\n var pixelRatio = window.devicePixelRatio;\n\n function onStart(event) {\n isStartingDrag = true;\n var startX = event.touches[0].clientX * pixelRatio;\n var startY = event.touches[0].clientY * pixelRatio;\n state = {\n defaultPrevented: event.defaultPrevented,\n startX: startX,\n startY: startY,\n currentX: startX,\n currentY: startY,\n offsetX: 0,\n offsetY: 0,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n }\n\n function onMove(event) {\n if (!state) return;\n state.currentX = event.touches[0].clientX * pixelRatio;\n state.currentY = event.touches[0].clientY * pixelRatio;\n state.offsetX = state.currentX - state.startX;\n state.offsetY = state.currentY - state.startY;\n var shouldPreventDefault = false; // Wait for a movement of at least 6 pixels before reporting a drag.\n\n if (isStartingDrag) {\n if (Math.abs(state.offsetX) >= 6 || Math.abs(state.offsetY) >= 6) {\n isStartingDrag = false;\n shouldPreventDefault = Android.onDragStart(JSON.stringify(state));\n }\n } else {\n shouldPreventDefault = Android.onDragMove(JSON.stringify(state));\n }\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n function onEnd(event) {\n if (!state) return;\n var shouldPreventDefault = Android.onDragEnd(JSON.stringify(state));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n state = undefined;\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-fixed.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for fixed layouts resources.\n\nwindow.readium.isFixedLayout = true;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUM0Wix1QkFBUCxHQUFpQ0EsdUJBQWpDO0FBQ0E1WixNQUFNLENBQUM0akIsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBNWpCLE1BQU0sQ0FBQzJqQiwyQkFBUCxHQUFxQ0EsMkJBQXJDO0FBQ0EzakIsTUFBTSxDQUFDK2pCLGFBQVAsR0FBdUJBLGFBQXZCLEM7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUEvakIsTUFBTSxDQUFDd2tCLE9BQVAsQ0FBZTVFLGFBQWYsR0FBK0IsSUFBL0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy9tYXRjaC1xdW90ZS5qcz9kZDZhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2UuanM/ZmRlZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlcy5qcz80MDA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdXRpbHMuanM/MDI1ZSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3JlY3QuanM/NGQ1YSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2RlY29yYXRvci5qcz8xYjA0Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZ2VzdHVyZXMuanM/MTRjMiIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2hpZ2hsaWdodC5qcz84ZGE4Iiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZG9tLmpzP2NiZjAiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9zZWxlY3Rpb24uanM/NTlhYyIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LmpzP2I2MzUiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9pbmRleC1maXhlZC5qcz9kOTlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcHByb3hTZWFyY2ggZnJvbSAnYXBwcm94LXN0cmluZy1tYXRjaCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwcm94LXN0cmluZy1tYXRjaCcpLk1hdGNofSBTdHJpbmdNYXRjaFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTWF0Y2hcbiAqIEBwcm9wIHtudW1iZXJ9IHN0YXJ0IC0gU3RhcnQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IGVuZCAtIEVuZCBvZmZzZXQgb2YgbWF0Y2ggaW4gdGV4dFxuICogQHByb3Age251bWJlcn0gc2NvcmUgLVxuICogICBTY29yZSBmb3IgdGhlIG1hdGNoIGJldHdlZW4gMCBhbmQgMS4wLCB3aGVyZSAxLjAgaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaFxuICogICBmb3IgdGhlIHF1b3RlIGFuZCBjb250ZXh0LlxuICovXG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgc3RyYCBpbiBgdGV4dGAgYWxsb3dpbmcgdXAgdG8gYG1heEVycm9yc2AgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4RXJyb3JzXG4gKiBAcmV0dXJuIHtTdHJpbmdNYXRjaFtdfVxuICovXG5mdW5jdGlvbiBzZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpIHtcbiAgLy8gRG8gYSBmYXN0IHNlYXJjaCBmb3IgZXhhY3QgbWF0Y2hlcy4gVGhlIGBhcHByb3gtc3RyaW5nLW1hdGNoYCBsaWJyYXJ5XG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGluY29ycG9yYXRlIHRoaXMgb3B0aW1pemF0aW9uIGl0c2VsZi5cbiAgbGV0IG1hdGNoUG9zID0gMDtcbiAgbGV0IGV4YWN0TWF0Y2hlcyA9IFtdO1xuICB3aGlsZSAobWF0Y2hQb3MgIT09IC0xKSB7XG4gICAgbWF0Y2hQb3MgPSB0ZXh0LmluZGV4T2Yoc3RyLCBtYXRjaFBvcyk7XG4gICAgaWYgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgICAgZXhhY3RNYXRjaGVzLnB1c2goe1xuICAgICAgICBzdGFydDogbWF0Y2hQb3MsXG4gICAgICAgIGVuZDogbWF0Y2hQb3MgKyBzdHIubGVuZ3RoLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICB9KTtcbiAgICAgIG1hdGNoUG9zICs9IDE7XG4gICAgfVxuICB9XG4gIGlmIChleGFjdE1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBleGFjdE1hdGNoZXM7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhhY3QgbWF0Y2hlcywgZG8gYSBtb3JlIGV4cGVuc2l2ZSBzZWFyY2ggZm9yIG1hdGNoZXNcbiAgLy8gd2l0aCBlcnJvcnMuXG4gIHJldHVybiBhcHByb3hTZWFyY2godGV4dCwgc3RyLCBtYXhFcnJvcnMpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBzY29yZSBiZXR3ZWVuIDAgYW5kIDEuMCBmb3IgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiBgdGV4dGAgYW5kIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRleHRNYXRjaFNjb3JlKHRleHQsIHN0cikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIGBzY29yZU1hdGNoYCB3aWxsIG5ldmVyIHBhc3MgYW4gZW1wdHkgc3RyaW5nICovXG4gIGlmIChzdHIubGVuZ3RoID09PSAwIHx8IHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDAuMDtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gc2VhcmNoKHRleHQsIHN0ciwgc3RyLmxlbmd0aCk7XG5cbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiAxIC0gKG1hdGNoZXNbMF0uZXJyb3JzIC8gc3RyLmxlbmd0aCk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgYmVzdCBhcHByb3hpbWF0ZSBtYXRjaCBmb3IgYHF1b3RlYCBpbiBgdGV4dGAuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgaWYgbm8gbWF0Y2ggZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHF1YWxpdHkgdGhyZXNob2xkIHdhcyBmb3VuZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIERvY3VtZW50IHRleHQgdG8gc2VhcmNoXG4gKiBAcGFyYW0ge3N0cmluZ30gcXVvdGUgLSBTdHJpbmcgdG8gZmluZCB3aXRoaW4gYHRleHRgXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCAtXG4gKiAgIENvbnRleHQgaW4gd2hpY2ggdGhlIHF1b3RlIG9yaWdpbmFsbHkgYXBwZWFyZWQuIFRoaXMgaXMgdXNlZCB0byBjaG9vc2UgdGhlXG4gKiAgIGJlc3QgbWF0Y2guXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdIC0gRXhwZWN0ZWQgdGV4dCBiZWZvcmUgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5zdWZmaXhdIC0gRXhwZWN0ZWQgdGV4dCBhZnRlciB0aGUgcXVvdGVcbiAqICAgQHBhcmFtIHtudW1iZXJ9IFtjb250ZXh0LmhpbnRdIC0gRXhwZWN0ZWQgb2Zmc2V0IG9mIG1hdGNoIHdpdGhpbiB0ZXh0XG4gKiBAcmV0dXJuIHtNYXRjaHxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdW90ZSh0ZXh0LCBxdW90ZSwgY29udGV4dCA9IHt9KSB7XG4gIGlmIChxdW90ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENob29zZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIHRvIGFsbG93IGZvciB0aGUgaW5pdGlhbCBzZWFyY2guXG4gIC8vIFRoaXMgY2hvaWNlIGludm9sdmVzIGEgdHJhZGVvZmYgYmV0d2VlbjpcbiAgLy9cbiAgLy8gIC0gUmVjYWxsIChwcm9wb3J0aW9uIG9mIFwiZ29vZFwiIG1hdGNoZXMgZm91bmQpXG4gIC8vICAtIFByZWNpc2lvbiAocHJvcG9ydGlvbiBvZiBtYXRjaGVzIGZvdW5kIHdoaWNoIGFyZSBcImdvb2RcIilcbiAgLy8gIC0gQ29zdCBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggYW5kIG9mIHByb2Nlc3NpbmcgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIFsxXVxuICAvL1xuICAvLyBbMV0gU3BlY2lmaWNhbGx5LCB0aGUgZXhwZWN0ZWQtdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsIHNlYXJjaCBpc1xuICAvLyAgICAgYE8oKG1heEVycm9ycyAvIDMyKSAqIHRleHQubGVuZ3RoKWAuIFNlZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgZG9jcy5cbiAgY29uc3QgbWF4RXJyb3JzID0gTWF0aC5taW4oMjU2LCBxdW90ZS5sZW5ndGggLyAyKTtcblxuICAvLyBGaW5kIGNsb3Nlc3QgbWF0Y2hlcyBmb3IgYHF1b3RlYCBpbiBgdGV4dGAgYmFzZWQgb24gZWRpdCBkaXN0YW5jZS5cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBxdW90ZSwgbWF4RXJyb3JzKTtcblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIGEgbWF0Y2ggY2FuZGlkYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ01hdGNofSBtYXRjaFxuICAgKi9cbiAgY29uc3Qgc2NvcmVNYXRjaCA9IG1hdGNoID0+IHtcbiAgICBjb25zdCBxdW90ZVdlaWdodCA9IDUwOyAvLyBTaW1pbGFyaXR5IG9mIG1hdGNoZWQgdGV4dCB0byBxdW90ZS5cbiAgICBjb25zdCBwcmVmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGJlZm9yZSBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQucHJlZml4YC5cbiAgICBjb25zdCBzdWZmaXhXZWlnaHQgPSAyMDsgLy8gU2ltaWxhcml0eSBvZiB0ZXh0IGFmdGVyIG1hdGNoZWQgdGV4dCB0byBgY29udGV4dC5zdWZmaXhgLlxuICAgIGNvbnN0IHBvc1dlaWdodCA9IDI7IC8vIFByb3hpbWl0eSB0byBleHBlY3RlZCBsb2NhdGlvbi4gVXNlZCBhcyBhIHRpZS1icmVha2VyLlxuXG4gICAgY29uc3QgcXVvdGVTY29yZSA9IDEgLSBtYXRjaC5lcnJvcnMgLyBxdW90ZS5sZW5ndGg7XG5cbiAgICBjb25zdCBwcmVmaXhTY29yZSA9IGNvbnRleHQucHJlZml4XG4gICAgICA/IHRleHRNYXRjaFNjb3JlKFxuICAgICAgICAgIHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgbWF0Y2guc3RhcnQgLSBjb250ZXh0LnByZWZpeC5sZW5ndGgpLCBtYXRjaC5zdGFydCksXG4gICAgICAgICAgY29udGV4dC5wcmVmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG4gICAgY29uc3Qgc3VmZml4U2NvcmUgPSBjb250ZXh0LnN1ZmZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKG1hdGNoLmVuZCwgbWF0Y2guZW5kICsgY29udGV4dC5zdWZmaXgubGVuZ3RoKSxcbiAgICAgICAgICBjb250ZXh0LnN1ZmZpeFxuICAgICAgICApXG4gICAgICA6IDEuMDtcblxuICAgIGxldCBwb3NTY29yZSA9IDEuMDtcbiAgICBpZiAodHlwZW9mIGNvbnRleHQuaGludCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguYWJzKG1hdGNoLnN0YXJ0IC0gY29udGV4dC5oaW50KTtcbiAgICAgIHBvc1Njb3JlID0gMS4wIC0gb2Zmc2V0IC8gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3U2NvcmUgPVxuICAgICAgcXVvdGVXZWlnaHQgKiBxdW90ZVNjb3JlICtcbiAgICAgIHByZWZpeFdlaWdodCAqIHByZWZpeFNjb3JlICtcbiAgICAgIHN1ZmZpeFdlaWdodCAqIHN1ZmZpeFNjb3JlICtcbiAgICAgIHBvc1dlaWdodCAqIHBvc1Njb3JlO1xuICAgIGNvbnN0IG1heFNjb3JlID0gcXVvdGVXZWlnaHQgKyBwcmVmaXhXZWlnaHQgKyBzdWZmaXhXZWlnaHQgKyBwb3NXZWlnaHQ7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNjb3JlID0gcmF3U2NvcmUgLyBtYXhTY29yZTtcblxuICAgIHJldHVybiBub3JtYWxpemVkU2NvcmU7XG4gIH07XG5cbiAgLy8gUmFuayBtYXRjaGVzIGJhc2VkIG9uIHNpbWlsYXJpdHkgb2YgYWN0dWFsIGFuZCBleHBlY3RlZCBzdXJyb3VuZGluZyB0ZXh0XG4gIC8vIGFuZCBhY3R1YWwvZXhwZWN0ZWQgb2Zmc2V0IGluIHRoZSBkb2N1bWVudCB0ZXh0LlxuICBjb25zdCBzY29yZWRNYXRjaGVzID0gbWF0Y2hlcy5tYXAobSA9PiAoe1xuICAgIHN0YXJ0OiBtLnN0YXJ0LFxuICAgIGVuZDogbS5lbmQsXG4gICAgc2NvcmU6IHNjb3JlTWF0Y2gobSksXG4gIH0pKTtcblxuICAvLyBDaG9vc2UgbWF0Y2ggd2l0aCBoaWdoZXN0IHNjb3JlLlxuICBzY29yZWRNYXRjaGVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcbiAgcmV0dXJuIHNjb3JlZE1hdGNoZXNbMF07XG59XG4iLCIvKipcbiAqIFJldHVybiB0aGUgY29tYmluZWQgbGVuZ3RoIG9mIHRleHQgbm9kZXMgY29udGFpbmVkIGluIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gbm9kZVRleHRMZW5ndGgobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAvLyBuYi4gYHRleHRDb250ZW50YCBleGNsdWRlcyB0ZXh0IGluIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uc1xuICAgICAgLy8gd2hlbiBjYWxsZWQgb24gYSBwYXJlbnQgZWxlbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJ0cmFjdCB0aGF0IGhlcmUuXG5cbiAgICAgIHJldHVybiAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5vZGUudGV4dENvbnRlbnQpLmxlbmd0aDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgdGV4dCBvZiBhbGwgcHJldmlvdXMgc2libGluZ3Mgb2YgYG5vZGVgLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICovXG5mdW5jdGlvbiBwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aChub2RlKSB7XG4gIGxldCBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gIGxldCBsZW5ndGggPSAwO1xuICB3aGlsZSAoc2libGluZykge1xuICAgIGxlbmd0aCArPSBub2RlVGV4dExlbmd0aChzaWJsaW5nKTtcbiAgICBzaWJsaW5nID0gc2libGluZy5wcmV2aW91c1NpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9uZSBvciBtb3JlIGNoYXJhY3RlciBvZmZzZXRzIHdpdGhpbiBhbiBlbGVtZW50IHRvICh0ZXh0IG5vZGUsIHBvc2l0aW9uKVxuICogcGFpcnMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcltdfSBvZmZzZXRzIC0gT2Zmc2V0cywgd2hpY2ggbXVzdCBiZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH1bXX1cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9mZnNldHMoZWxlbWVudCwgLi4ub2Zmc2V0cykge1xuICBsZXQgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgY29uc3Qgbm9kZUl0ZXIgPSAvKiogQHR5cGUge0RvY3VtZW50fSAqLyAoXG4gICAgZWxlbWVudC5vd25lckRvY3VtZW50XG4gICkuY3JlYXRlTm9kZUl0ZXJhdG9yKGVsZW1lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhUKTtcbiAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGVJdGVyLm5leHROb2RlKCk7XG4gIGxldCB0ZXh0Tm9kZTtcbiAgbGV0IGxlbmd0aCA9IDA7XG5cbiAgLy8gRmluZCB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGBuZXh0T2Zmc2V0YHRoIGNoYXJhY3RlciBmcm9tIHRoZSBzdGFydFxuICAvLyBvZiBgZWxlbWVudGAuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgY3VycmVudE5vZGUpIHtcbiAgICB0ZXh0Tm9kZSA9IC8qKiBAdHlwZSB7VGV4dH0gKi8gKGN1cnJlbnROb2RlKTtcbiAgICBpZiAobGVuZ3RoICsgdGV4dE5vZGUuZGF0YS5sZW5ndGggPiBuZXh0T2Zmc2V0KSB7XG4gICAgICByZXN1bHRzLnB1c2goeyBub2RlOiB0ZXh0Tm9kZSwgb2Zmc2V0OiBuZXh0T2Zmc2V0IC0gbGVuZ3RoIH0pO1xuICAgICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICAgICAgbGVuZ3RoICs9IHRleHROb2RlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIC8vIEJvdW5kYXJ5IGNhc2UuXG4gIHdoaWxlIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiYgdGV4dE5vZGUgJiYgbGVuZ3RoID09PSBuZXh0T2Zmc2V0KSB7XG4gICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogdGV4dE5vZGUuZGF0YS5sZW5ndGggfSk7XG4gICAgbmV4dE9mZnNldCA9IG9mZnNldHMuc2hpZnQoKTtcbiAgfVxuXG4gIGlmIChuZXh0T2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT2Zmc2V0IGV4Y2VlZHMgdGV4dCBsZW5ndGgnKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5leHBvcnQgbGV0IFJFU09MVkVfRk9SV0FSRFMgPSAxO1xuZXhwb3J0IGxldCBSRVNPTFZFX0JBQ0tXQVJEUyA9IDI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBvZmZzZXQgd2l0aGluIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBUaGlzIHBvc2l0aW9uIGNhbiBiZSByZXNvbHZlZCB0byBhIHNwZWNpZmljIGRlc2NlbmRhbnQgbm9kZSBpbiB0aGUgY3VycmVudFxuICogRE9NIHN1YnRyZWUgb2YgdGhlIGVsZW1lbnQgdXNpbmcgdGhlIGByZXNvbHZlYCBtZXRob2QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb24ge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIHRleHQgcG9zaXRpb24gYG9mZnNldGAgd2l0aGluXG4gICAqIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYGVsZW1lbnRgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKi9cbiAgY29uc3RydWN0b3IoZWxlbWVudCwgb2Zmc2V0KSB7XG4gICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2Zmc2V0IGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvKiogRWxlbWVudCB0aGF0IGBvZmZzZXRgIGlzIHJlbGF0aXZlIHRvLiAqL1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAvKiogQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZWxlbWVudCdzIGB0ZXh0Q29udGVudGAuICovXG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSBvZiB0aGlzIHBvc2l0aW9uIHdpdGggb2Zmc2V0IHJlbGF0aXZlIHRvIGEgZ2l2ZW4gYW5jZXN0b3JcbiAgICogZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBwYXJlbnQgLSBBbmNlc3RvciBvZiBgdGhpcy5lbGVtZW50YFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICByZWxhdGl2ZVRvKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50LmNvbnRhaW5zKHRoaXMuZWxlbWVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGlzIG5vdCBhbiBhbmNlc3RvciBvZiBjdXJyZW50IGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICBsZXQgZWwgPSB0aGlzLmVsZW1lbnQ7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHdoaWxlIChlbCAhPT0gcGFyZW50KSB7XG4gICAgICBvZmZzZXQgKz0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgoZWwpO1xuICAgICAgZWwgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBwb3NpdGlvbiB0byBhIHNwZWNpZmljIHRleHQgbm9kZSBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IG5vZGUuXG4gICAqXG4gICAqIFRocm93cyBpZiBgdGhpcy5vZmZzZXRgIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiB0aGUgZWxlbWVudCdzIHRleHQuIEluIHRoZVxuICAgKiBjYXNlIHdoZXJlIHRoZSBlbGVtZW50IGhhcyBubyB0ZXh0IGFuZCBgdGhpcy5vZmZzZXRgIGlzIDAsIHRoZSBgZGlyZWN0aW9uYFxuICAgKiBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMuXG4gICAqXG4gICAqIE9mZnNldHMgYXQgdGhlIGJvdW5kYXJ5IGJldHdlZW4gdHdvIG5vZGVzIGFyZSByZXNvbHZlZCB0byB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIG5vZGUgdGhhdCBiZWdpbnMgYXQgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqICAgQHBhcmFtIHtSRVNPTFZFX0ZPUldBUkRTfFJFU09MVkVfQkFDS1dBUkRTfSBbb3B0aW9ucy5kaXJlY3Rpb25dIC1cbiAgICogICAgIFNwZWNpZmllcyBpbiB3aGljaCBkaXJlY3Rpb24gdG8gc2VhcmNoIGZvciB0aGUgbmVhcmVzdCB0ZXh0IG5vZGUgaWZcbiAgICogICAgIGB0aGlzLm9mZnNldGAgaXMgYDBgIGFuZCBgdGhpcy5lbGVtZW50YCBoYXMgbm8gdGV4dC4gSWYgbm90IHNwZWNpZmllZFxuICAgKiAgICAgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBAcmV0dXJuIHt7IG5vZGU6IFRleHQsIG9mZnNldDogbnVtYmVyIH19XG4gICAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9XG4gICAqL1xuICByZXNvbHZlKG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU9mZnNldHModGhpcy5lbGVtZW50LCB0aGlzLm9mZnNldClbMF07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5vZmZzZXQgPT09IDAgJiYgb3B0aW9ucy5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0dyA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoXG4gICAgICAgICAgdGhpcy5lbGVtZW50LmdldFJvb3ROb2RlKCksXG4gICAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFRcbiAgICAgICAgKTtcbiAgICAgICAgdHcuY3VycmVudE5vZGUgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcndhcmRzID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJFU09MVkVfRk9SV0FSRFM7XG4gICAgICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge1RleHR8bnVsbH0gKi8gKFxuICAgICAgICAgIGZvcndhcmRzID8gdHcubmV4dE5vZGUoKSA6IHR3LnByZXZpb3VzTm9kZSgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBub2RlOiB0ZXh0LCBvZmZzZXQ6IGZvcndhcmRzID8gMCA6IHRleHQuZGF0YS5sZW5ndGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgdGhhdCByZWZlcnMgdG8gdGhlIGBvZmZzZXRgdGggY2hhcmFjdGVyIHdpdGhpblxuICAgKiBgbm9kZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gICAqIEByZXR1cm4ge1RleHRQb3NpdGlvbn1cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2hhck9mZnNldChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgIHJldHVybiBUZXh0UG9zaXRpb24uZnJvbVBvaW50KG5vZGUsIG9mZnNldCk7XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgb2Zmc2V0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm9kZSBpcyBub3QgYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgYFRleHRQb3NpdGlvbmAgcmVwcmVzZW50aW5nIHRoZSByYW5nZSBzdGFydCBvciBlbmQgcG9pbnQgKG5vZGUsIG9mZnNldCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRleHQgb3IgRWxlbWVudCBub2RlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBPZmZzZXQgd2l0aGluIHRoZSBub2RlLlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbVBvaW50KG5vZGUsIG9mZnNldCkge1xuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAvKiogQHR5cGUge1RleHR9ICovIChub2RlKS5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIG9mZnNldCBpcyBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUZXh0IG5vZGUgaGFzIG5vIHBhcmVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0ID0gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkgKyBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24obm9kZS5wYXJlbnRFbGVtZW50LCB0ZXh0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVuZ3RoIGJlZm9yZSB0aGUgYG9mZnNldGB0aCBjaGlsZCBvZiBlbGVtZW50LlxuICAgICAgICBsZXQgdGV4dE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHtcbiAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IG5vZGVUZXh0TGVuZ3RoKG5vZGUuY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbigvKiogQHR5cGUge0VsZW1lbnR9ICovIChub2RlKSwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50IGlzIG5vdCBpbiBhbiBlbGVtZW50IG9yIHRleHQgbm9kZScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWdpb24gb2YgYSBkb2N1bWVudCBhcyBhIChzdGFydCwgZW5kKSBwYWlyIG9mIGBUZXh0UG9zaXRpb25gIHBvaW50cy5cbiAqXG4gKiBSZXByZXNlbnRpbmcgYSByYW5nZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNoYW5nZXMgaW4gdGhlIERPTSBjb250ZW50IG9mIHRoZVxuICogcmFuZ2Ugd2hpY2ggZG9uJ3QgYWZmZWN0IGl0cyB0ZXh0IGNvbnRlbnQsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSB0ZXh0IGNvbnRlbnRcbiAqIG9mIHRoZSByYW5nZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0IGFuIGltbXV0YWJsZSBgVGV4dFJhbmdlYCBmcm9tIGEgYHN0YXJ0YCBhbmQgYGVuZGAgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9ufSBzdGFydFxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHN0YXJ0IGFuZCBlbmQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIGFcbiAgICogZ2l2ZW4gYW5jZXN0b3IuIFNlZSBgVGV4dFBvc2l0aW9uLnJlbGF0aXZlVG9gLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICovXG4gIHJlbGF0aXZlVG8oZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgdGhpcy5zdGFydC5yZWxhdGl2ZVRvKGVsZW1lbnQpLFxuICAgICAgdGhpcy5lbmQucmVsYXRpdmVUbyhlbGVtZW50KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYFRleHRSYW5nZWAgdG8gYSBET00gcmFuZ2UuXG4gICAqXG4gICAqIFRoZSByZXN1bHRpbmcgRE9NIFJhbmdlIHdpbGwgYWx3YXlzIHN0YXJ0IGFuZCBlbmQgaW4gYSBgVGV4dGAgbm9kZS5cbiAgICogSGVuY2UgYFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnRvUmFuZ2UoKWAgY2FuIGJlIHVzZWQgdG8gXCJzaHJpbmtcIiBhXG4gICAqIHJhbmdlIHRvIHRoZSB0ZXh0IGl0IGNvbnRhaW5zLlxuICAgKlxuICAgKiBNYXkgdGhyb3cgaWYgdGhlIGBzdGFydGAgb3IgYGVuZGAgcG9zaXRpb25zIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhIHJhbmdlLlxuICAgKlxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG4gIHRvUmFuZ2UoKSB7XG4gICAgbGV0IHN0YXJ0O1xuICAgIGxldCBlbmQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0LmVsZW1lbnQgPT09IHRoaXMuZW5kLmVsZW1lbnQgJiZcbiAgICAgIHRoaXMuc3RhcnQub2Zmc2V0IDw9IHRoaXMuZW5kLm9mZnNldFxuICAgICkge1xuICAgICAgLy8gRmFzdCBwYXRoIGZvciBzdGFydCBhbmQgZW5kIHBvaW50cyBpbiBzYW1lIGVsZW1lbnQuXG4gICAgICBbc3RhcnQsIGVuZF0gPSByZXNvbHZlT2Zmc2V0cyhcbiAgICAgICAgdGhpcy5zdGFydC5lbGVtZW50LFxuICAgICAgICB0aGlzLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgdGhpcy5lbmQub2Zmc2V0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IHRoaXMuc3RhcnQucmVzb2x2ZSh7IGRpcmVjdGlvbjogUkVTT0xWRV9GT1JXQVJEUyB9KTtcbiAgICAgIGVuZCA9IHRoaXMuZW5kLnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfQkFDS1dBUkRTIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICByYW5nZS5zZXRFbmQoZW5kLm5vZGUsIGVuZC5vZmZzZXQpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGV4aXN0aW5nIERPTSBgUmFuZ2VgIHRvIGEgYFRleHRSYW5nZWBcbiAgICpcbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2VcbiAgICogQHJldHVybiB7VGV4dFJhbmdlfVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGBUZXh0UmFuZ2VgIGZyb20gdGhlIGBzdGFydGB0aCB0byBgZW5kYHRoIGNoYXJhY3RlcnMgaW4gYHJvb3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICovXG4gIHN0YXRpYyBmcm9tT2Zmc2V0cyhyb290LCBzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UmFuZ2UoXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIHN0YXJ0KSxcbiAgICAgIG5ldyBUZXh0UG9zaXRpb24ocm9vdCwgZW5kKVxuICAgICk7XG4gIH1cbn1cbiIsIi8qKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBjbGFzc2VzIGZvciBjb252ZXJ0aW5nIGJldHdlZW4gRE9NIGBSYW5nZWBcbiAqIG9iamVjdHMgYW5kIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxlY3RvcnMuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlciBhcm91bmQgYVxuICogc2V0IG9mIGFuY2hvcmluZyBsaWJyYXJpZXMuIEl0IHNlcnZlcyB0d28gbWFpbiBwdXJwb3NlczpcbiAqXG4gKiAgMS4gUHJvdmlkaW5nIGEgY29uc2lzdGVudCBpbnRlcmZhY2UgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBhbmNob3JzLlxuICogIDIuIEluc3VsYXRpbmcgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgZnJvbSBBUEkgY2hhbmdlcyBpbiB0aGUgdW5kZXJseWluZyBhbmNob3JpbmdcbiAqICAgICBsaWJyYXJpZXMuXG4gKi9cblxuaW1wb3J0IHsgbWF0Y2hRdW90ZSB9IGZyb20gJy4vbWF0Y2gtcXVvdGUnO1xuaW1wb3J0IHsgVGV4dFJhbmdlLCBUZXh0UG9zaXRpb24gfSBmcm9tICcuL3RleHQtcmFuZ2UnO1xuaW1wb3J0IHsgbm9kZUZyb21YUGF0aCwgeHBhdGhGcm9tTm9kZSB9IGZyb20gJy4veHBhdGgnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlJhbmdlU2VsZWN0b3J9IFJhbmdlU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRQb3NpdGlvblNlbGVjdG9yfSBUZXh0UG9zaXRpb25TZWxlY3RvclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBpJykuVGV4dFF1b3RlU2VsZWN0b3J9IFRleHRRdW90ZVNlbGVjdG9yXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJhbmdlQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIHJhbmdlKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZSAtICBBIHJhbmdlIGRlc2NyaWJpbmcgdGhlIGFuY2hvci5cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2Uocm9vdCwgcmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlQW5jaG9yKHJvb3QsIHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYW5jaG9yIGZyb20gYSBzZXJpYWxpemVkIGBSYW5nZVNlbGVjdG9yYCBzZWxlY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gIEEgcm9vdCBlbGVtZW50IGZyb20gd2hpY2ggdG8gYW5jaG9yLlxuICAgKiBAcGFyYW0ge1JhbmdlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSBub2RlRnJvbVhQYXRoKHNlbGVjdG9yLnN0YXJ0Q29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIXN0YXJ0Q29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIHN0YXJ0Q29udGFpbmVyIFhQYXRoJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kQ29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5lbmRDb250YWluZXIsIHJvb3QpO1xuICAgIGlmICghZW5kQ29udGFpbmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGVuZENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgc3RhcnRDb250YWluZXIsXG4gICAgICBzZWxlY3Rvci5zdGFydE9mZnNldFxuICAgICk7XG4gICAgY29uc3QgZW5kUG9zID0gVGV4dFBvc2l0aW9uLmZyb21DaGFyT2Zmc2V0KFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgc2VsZWN0b3IuZW5kT2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IHJhbmdlID0gbmV3IFRleHRSYW5nZShzdGFydFBvcywgZW5kUG9zKS50b1JhbmdlKCk7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge1JhbmdlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIC8vIFwiU2hyaW5rXCIgdGhlIHJhbmdlIHNvIHRoYXQgaXQgdGlnaHRseSB3cmFwcyBpdHMgdGV4dC4gVGhpcyBlbnN1cmVzIG1vcmVcbiAgICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgZm9yIGEgZ2l2ZW4gdGV4dCBzZWxlY3Rpb24uXG4gICAgY29uc3Qgbm9ybWFsaXplZFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZSh0aGlzLnJhbmdlKS50b1JhbmdlKCk7XG5cbiAgICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKG5vcm1hbGl6ZWRSYW5nZSk7XG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5zdGFydC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHhwYXRoRnJvbU5vZGUodGV4dFJhbmdlLmVuZC5lbGVtZW50LCB0aGlzLnJvb3QpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdSYW5nZVNlbGVjdG9yJyxcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc3RhcnRPZmZzZXQ6IHRleHRSYW5nZS5zdGFydC5vZmZzZXQsXG4gICAgICBlbmRDb250YWluZXIsXG4gICAgICBlbmRPZmZzZXQ6IHRleHRSYW5nZS5lbmQub2Zmc2V0LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UG9zaXRpb25TZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UG9zaXRpb25BbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihcbiAgICAgIHJvb3QsXG4gICAgICB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgdGV4dFJhbmdlLmVuZC5vZmZzZXRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcihyb290LCBzZWxlY3Rvci5zdGFydCwgc2VsZWN0b3IuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb25TZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UG9zaXRpb25TZWxlY3RvcicsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgfTtcbiAgfVxuXG4gIHRvUmFuZ2UoKSB7XG4gICAgcmV0dXJuIFRleHRSYW5nZS5mcm9tT2Zmc2V0cyh0aGlzLnJvb3QsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKS50b1JhbmdlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBRdW90ZU1hdGNoT3B0aW9uc1xuICogQHByb3Age251bWJlcn0gW2hpbnRdIC0gRXhwZWN0ZWQgcG9zaXRpb24gb2YgbWF0Y2ggaW4gdGV4dC4gU2VlIGBtYXRjaFF1b3RlYC5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGJldHdlZW4gYFRleHRRdW90ZVNlbGVjdG9yYCBzZWxlY3RvcnMgYW5kIGBSYW5nZWAgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHRRdW90ZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4YWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnByZWZpeF1cbiAgICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XVxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgZXhhY3QsIGNvbnRleHQgPSB7fSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5leGFjdCA9IGV4YWN0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYFRleHRRdW90ZUFuY2hvcmAgZnJvbSBhIHJhbmdlLlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIGByYW5nZWAgZG9lcyBub3QgY29udGFpbiBhbnkgdGV4dCBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhyb290KTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICAgIC8vIE51bWJlciBvZiBjaGFyYWN0ZXJzIGFyb3VuZCB0aGUgcXVvdGUgdG8gY2FwdHVyZSBhcyBjb250ZXh0LiBXZSBjdXJyZW50bHlcbiAgICAvLyBhbHdheXMgdXNlIGEgZml4ZWQgYW1vdW50LCBidXQgaXQgd291bGQgYmUgYmV0dGVyIGlmIHRoaXMgY29kZSB3YXMgYXdhcmVcbiAgICAvLyBvZiBsb2dpY2FsIGJvdW5kYXJpZXMgaW4gdGhlIGRvY3VtZW50IChwYXJhZ3JhcGgsIGFydGljbGUgZXRjLikgdG8gYXZvaWRcbiAgICAvLyBjYXB0dXJpbmcgdGV4dCB1bnJlbGF0ZWQgdG8gdGhlIHF1b3RlLlxuICAgIC8vXG4gICAgLy8gSW4gcmVndWxhciBwcm9zZSB0aGUgaWRlYWwgY29udGVudCB3b3VsZCBvZnRlbiBiZSB0aGUgc3Vycm91bmRpbmcgc2VudGVuY2UuXG4gICAgLy8gVGhpcyBpcyBhIG5hdHVyYWwgdW5pdCBvZiBtZWFuaW5nIHdoaWNoIGVuYWJsZXMgZGlzcGxheWluZyBxdW90ZXMgaW5cbiAgICAvLyBjb250ZXh0IGV2ZW4gd2hlbiB0aGUgZG9jdW1lbnQgaXMgbm90IGF2YWlsYWJsZS4gV2UgY291bGQgdXNlIGBJbnRsLlNlZ21lbnRlcmBcbiAgICAvLyBmb3IgdGhpcyB3aGVuIGF2YWlsYWJsZS5cbiAgICBjb25zdCBjb250ZXh0TGVuID0gMzI7XG5cbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpLCB7XG4gICAgICBwcmVmaXg6IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBjb250ZXh0TGVuKSwgc3RhcnQpLFxuICAgICAgc3VmZml4OiB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIGNvbnRleHRMZW4pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IHJvb3RcbiAgICogQHBhcmFtIHtUZXh0UXVvdGVTZWxlY3Rvcn0gc2VsZWN0b3JcbiAgICovXG4gIHN0YXRpYyBmcm9tU2VsZWN0b3Iocm9vdCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB7IHByZWZpeCwgc3VmZml4IH0gPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCBzZWxlY3Rvci5leGFjdCwgeyBwcmVmaXgsIHN1ZmZpeCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtUZXh0UXVvdGVTZWxlY3Rvcn1cbiAgICovXG4gIHRvU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdUZXh0UXVvdGVTZWxlY3RvcicsXG4gICAgICBleGFjdDogdGhpcy5leGFjdCxcbiAgICAgIHByZWZpeDogdGhpcy5jb250ZXh0LnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5jb250ZXh0LnN1ZmZpeCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UXVvdGVNYXRjaE9wdGlvbnN9IFtvcHRpb25zXVxuICAgKi9cbiAgdG9SYW5nZShvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy50b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMpLnRvUmFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUG9zaXRpb25BbmNob3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdGV4dCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5yb290LnRleHRDb250ZW50KTtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUXVvdGUodGV4dCwgdGhpcy5leGFjdCwge1xuICAgICAgLi4udGhpcy5jb250ZXh0LFxuICAgICAgaGludDogb3B0aW9ucy5oaW50LFxuICAgIH0pO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUXVvdGUgbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uQW5jaG9yKHRoaXMucm9vdCwgbWF0Y2guc3RhcnQsIG1hdGNoLmVuZCk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IFRleHRRdW90ZUFuY2hvciB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90eXBlc1wiO1xuXG4vLyBDYXRjaCBKUyBlcnJvcnMgdG8gbG9nIHRoZW0gaW4gdGhlIGFwcC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImVycm9yXCIsXG4gIGZ1bmN0aW9uIChldmVudCkge1xuICAgIEFuZHJvaWQubG9nRXJyb3IoZXZlbnQubWVzc2FnZSwgZXZlbnQuZmlsZW5hbWUsIGV2ZW50LmxpbmVubyk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vLyBOb3RpZnkgbmF0aXZlIGNvZGUgdGhhdCB0aGUgcGFnZSBoYXMgbG9hZGVkLlxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gIFwibG9hZFwiLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib3JpZW50YXRpb25jaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICAgICAgc25hcEN1cnJlbnRPZmZzZXQoKTtcbiAgICB9KTtcbiAgICBvblZpZXdwb3J0V2lkdGhDaGFuZ2VkKCk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuXG4vKipcbiAqIEhhdmluZyBhbiBvZGQgbnVtYmVyIG9mIGNvbHVtbnMgd2hlbiBkaXNwbGF5aW5nIHR3byBjb2x1bW5zIHBlciBzY3JlZW4gY2F1c2VzIHNuYXBwaW5nIGFuZCBwYWdlXG4gKiB0dXJuaW5nIGlzc3Vlcy4gVG8gZml4IHRoaXMsIHdlIGluc2VydCBhIGJsYW5rIHZpcnR1YWwgY29sdW1uIGF0IHRoZSBlbmQgb2YgdGhlIHJlc291cmNlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQoKSB7XG4gIGNvbnN0IGlkID0gXCJyZWFkaXVtLXZpcnR1YWwtcGFnZVwiO1xuICB2YXIgdmlydHVhbENvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB8fCBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpICE9IDIpIHtcbiAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgdmlydHVhbENvbC5yZW1vdmUoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIHZhciBjb2xDb3VudCA9IGRvY3VtZW50V2lkdGggLyBwYWdlV2lkdGg7XG4gICAgdmFyIGhhc09kZENvbENvdW50ID0gKE1hdGgucm91bmQoY29sQ291bnQgKiAyKSAvIDIpICUgMSA+IDAuMTtcbiAgICBpZiAoaGFzT2RkQ29sQ291bnQpIHtcbiAgICAgIGlmICh2aXJ0dWFsQ29sKSB7XG4gICAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXJ0dWFsQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmlydHVhbENvbC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgICAgIHZpcnR1YWxDb2wuc3R5bGUuYnJlYWtCZWZvcmUgPSBcImNvbHVtblwiO1xuICAgICAgICB2aXJ0dWFsQ29sLmlubmVySFRNTCA9IFwiJiM4MjAzO1wiOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodmlydHVhbENvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB2YXIgcGFnZVdpZHRoID0gMTtcblxuZnVuY3Rpb24gb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpIHtcbiAgLy8gV2UgY2FuJ3QgcmVseSBvbiB3aW5kb3cuaW5uZXJXaWR0aCBmb3IgdGhlIHBhZ2VXaWR0aCBvbiBBbmRyb2lkLCBiZWNhdXNlIGlmIHRoZVxuICAvLyBkZXZpY2UgcGl4ZWwgcmF0aW8gaXMgbm90IGFuIGludGVnZXIsIHdlIGdldCByb3VuZGluZyBpc3N1ZXMgb2Zmc2V0dGluZyB0aGUgcGFnZXMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yZWFkaXVtLWNzcy9pc3N1ZXMvOTdcbiAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFkaXVtL3IyLW5hdmlnYXRvci1rb3RsaW4vaXNzdWVzLzE0NlxuICB2YXIgd2lkdGggPSBBbmRyb2lkLmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgcGFnZVdpZHRoID0gd2lkdGggLyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgc2V0UHJvcGVydHkoXG4gICAgXCItLVJTX192aWV3cG9ydFdpZHRoXCIsXG4gICAgXCJjYWxjKFwiICsgd2lkdGggKyBcInB4IC8gXCIgKyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyArIFwiKVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Db3VudFBlclNjcmVlbigpIHtcbiAgcmV0dXJuIHBhcnNlSW50KFxuICAgIHdpbmRvd1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW4tY291bnRcIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlXG4gICAgICAuZ2V0UHJvcGVydHlWYWx1ZShcIi0tVVNFUl9fc2Nyb2xsXCIpXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKSA9PSBcInJlYWRpdW0tc2Nyb2xsLW9uXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUlRMKCkge1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5kaXIudG9Mb3dlckNhc2UoKSA9PSBcInJ0bFwiO1xufVxuXG4vLyBTY3JvbGwgdG8gdGhlIGdpdmVuIFRhZ0lkIGluIGRvY3VtZW50IGFuZCBzbmFwLlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvSWQoaWQpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBzY3JvbGxUb1JlY3QoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbi8vIFBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswIC0gMV0sIDAtMTAwJS5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvUG9zaXRpb24gXCIgKyBwb3NpdGlvbik7XG4gIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPiAxKSB7XG4gICAgdGhyb3cgXCJzY3JvbGxUb1Bvc2l0aW9uKCkgbXVzdCBiZSBnaXZlbiBhIHBvc2l0aW9uIGZyb20gMC4wIHRvICAxLjBcIjtcbiAgfVxuXG4gIGxldCBvZmZzZXQ7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBvZmZzZXQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbEhlaWdodCAqIHBvc2l0aW9uO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgIC8vIHdpbmRvdy5zY3JvbGxUbygwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBvZmZzZXQgPSBkb2N1bWVudFdpZHRoICogcG9zaXRpb24gKiBmYWN0b3I7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICB9XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIHRleHQgc25pcHBldC5cbi8vXG4vLyBUaGUgZXhwZWN0ZWQgdGV4dCBhcmd1bWVudCBpcyBhIExvY2F0b3IgVGV4dCBvYmplY3QsIGFzIGRlZmluZWQgaGVyZTpcbi8vIGh0dHBzOi8vcmVhZGl1bS5vcmcvYXJjaGl0ZWN0dXJlL21vZGVscy9sb2NhdG9ycy9cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1RleHQodGV4dCkge1xuICBsZXQgcmFuZ2UgPSByYW5nZUZyb21Mb2NhdG9yKHsgdGV4dCB9KTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzY3JvbGxUb1JhbmdlKHJhbmdlKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UocmFuZ2UpIHtcbiAgcmV0dXJuIHNjcm9sbFRvUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmVjdChyZWN0KSB7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICByZWN0LnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gd2luZG93LmlubmVySGVpZ2h0IC8gMjtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFhcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1N0YXJ0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1N0YXJ0XCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbmQoKSB7XG4gIC8vICAgICAgICBBbmRyb2lkLmxvZyhcInNjcm9sbFRvRW5kXCIpO1xuICBpZiAoIWlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHZhciBmYWN0b3IgPSBpc1JUTCgpID8gLTEgOiAxO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQoXG4gICAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoICogZmFjdG9yXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0O1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBpcyBhbHJlYWR5IGF0IHRoZSBsZWZ0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxMZWZ0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCAtIHBhZ2VXaWR0aDtcbiAgdmFyIG1pbk9mZnNldCA9IGlzUlRMKCkgPyAtKGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGgpIDogMDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWF4KG9mZnNldCwgbWluT2Zmc2V0KSk7XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgcmlnaHQtbW9zdCBzY3JvbGwgb2Zmc2V0LlxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFJpZ2h0KCkge1xuICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIHZhciBvZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWCArIHBhZ2VXaWR0aDtcbiAgdmFyIG1heE9mZnNldCA9IGlzUlRMKCkgPyAwIDogZG9jdW1lbnRXaWR0aCAtIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIHNjcm9sbFRvT2Zmc2V0KE1hdGgubWluKG9mZnNldCwgbWF4T2Zmc2V0KSk7XG59XG5cbi8vIFNjcm9sbHMgdG8gdGhlIGdpdmVuIGxlZnQgb2Zmc2V0LlxuLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgcGFnZSBzY3JvbGwgcG9zaXRpb24gaXMgYWxyZWFkeSBjbG9zZSBlbm91Z2ggdG8gdGhlIGdpdmVuIG9mZnNldC5cbmZ1bmN0aW9uIHNjcm9sbFRvT2Zmc2V0KG9mZnNldCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb09mZnNldCBcIiArIG9mZnNldCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBcIkNhbGxlZCBzY3JvbGxUb09mZnNldCgpIHdpdGggc2Nyb2xsIG1vZGUgZW5hYmxlZC4gVGhpcyBjYW4gb25seSBiZSB1c2VkIGluIHBhZ2luYXRlZCBtb2RlLlwiO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChvZmZzZXQpO1xuICAvLyBJbiBzb21lIGNhc2UgdGhlIHNjcm9sbFggY2Fubm90IHJlYWNoIHRoZSBwb3NpdGlvbiByZXNwZWN0aW5nIHRvIGlubmVyV2lkdGhcbiAgdmFyIGRpZmYgPSBNYXRoLmFicyhjdXJyZW50T2Zmc2V0IC0gb2Zmc2V0KSAvIHBhZ2VXaWR0aDtcbiAgcmV0dXJuIGRpZmYgPiAwLjAxO1xufVxuXG4vLyBTbmFwIHRoZSBvZmZzZXQgdG8gdGhlIHNjcmVlbiB3aWR0aCAocGFnZSB3aWR0aCkuXG5mdW5jdGlvbiBzbmFwT2Zmc2V0KG9mZnNldCkge1xuICB2YXIgdmFsdWUgPSBvZmZzZXQgKyAoaXNSVEwoKSA/IC0xIDogMSk7XG4gIHJldHVybiB2YWx1ZSAtICh2YWx1ZSAlIHBhZ2VXaWR0aCk7XG59XG5cbi8vIFNuYXBzIHRoZSBjdXJyZW50IG9mZnNldCB0byB0aGUgcGFnZSB3aWR0aC5cbmZ1bmN0aW9uIHNuYXBDdXJyZW50T2Zmc2V0KCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzbmFwQ3VycmVudE9mZnNldFwiKTtcbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY3VycmVudE9mZnNldCA9IHdpbmRvdy5zY3JvbGxYO1xuICAvLyBBZGRzIGhhbGYgYSBwYWdlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzbmFwIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgdmFyIGRlbHRhID0gZmFjdG9yICogKHBhZ2VXaWR0aCAvIDIpO1xuICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KGN1cnJlbnRPZmZzZXQgKyBkZWx0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZUZyb21Mb2NhdG9yKGxvY2F0b3IpIHtcbiAgbGV0IHRleHQgPSBsb2NhdG9yLnRleHQ7XG4gIGlmICghdGV4dCB8fCAhdGV4dC5oaWdobGlnaHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIHZhciByb290O1xuICAgIGxldCBsb2NhdGlvbnMgPSBsb2NhdG9yLmxvY2F0aW9ucztcbiAgICBpZiAobG9jYXRpb25zICYmIGxvY2F0aW9ucy5jc3NTZWxlY3Rvcikge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb25zLmNzc1NlbGVjdG9yKTtcbiAgICB9XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByb290ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICBsZXQgYW5jaG9yID0gbmV3IFRleHRRdW90ZUFuY2hvcihyb290LCB0ZXh0LmhpZ2hsaWdodCwge1xuICAgICAgcHJlZml4OiB0ZXh0LmJlZm9yZSxcbiAgICAgIHN1ZmZpeDogdGV4dC5hZnRlcixcbiAgICB9KTtcbiAgICByZXR1cm4gYW5jaG9yLnRvUmFuZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vLyBVc2VyIFNldHRpbmdzLlxuXG4vLyBGb3Igc2V0dGluZyB1c2VyIHNldHRpbmcuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsdWUpO1xufVxuXG4vLyBGb3IgcmVtb3ZpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVByb3BlcnR5KGtleSkge1xuICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGtleSk7XG59XG5cbi8vLyBUb29sa2l0XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2coKSB7XG4gIHZhciBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKFwiIFwiKTtcbiAgQW5kcm9pZC5sb2cobWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dFcnJvcihtZXNzYWdlKSB7XG4gIEFuZHJvaWQubG9nRXJyb3IobWVzc2FnZSwgXCJcIiwgMCk7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgZGVidWcgPSBmYWxzZTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERPTVJlY3QgaW50byBhIEpTT04gb2JqZWN0IHVuZGVyc3RhbmRhYmxlIGJ5IHRoZSBuYXRpdmUgc2lkZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmF0aXZlUmVjdChyZWN0KSB7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoICogcGl4ZWxSYXRpbztcbiAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBwaXhlbFJhdGlvO1xuICBjb25zdCBsZWZ0ID0gcmVjdC5sZWZ0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgdG9wID0gcmVjdC50b3AgKiBwaXhlbFJhdGlvO1xuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICByYW5nZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGxldCBjbGllbnRSZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2coYENMSUVOVCBSRUNUOiByZWR1Y2VkICR7b3JpZ2luYWxSZWN0cy5sZW5ndGh9IC0tPiAke25ld1JlY3RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWN0c0xpbmVVcFZlcnRpY2FsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS50b3AsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIubGVmdCwgdG9sZXJhbmNlKSAmJlxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCBob3Jpem9udGFsQWxsb3dlZCA9ICFkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzO1xuICAgICAgY29uc3QgYWxpZ25lZCA9XG4gICAgICAgIChyZWN0c0xpbmVVcEhvcml6b250YWxseSAmJiBob3Jpem9udGFsQWxsb3dlZCkgfHxcbiAgICAgICAgKHJlY3RzTGluZVVwVmVydGljYWxseSAmJiAhcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkpO1xuICAgICAgY29uc3QgY2FuTWVyZ2UgPSBhbGlnbmVkICYmIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpO1xuICAgICAgaWYgKGNhbk1lcmdlKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV3UmVjdHMgPSByZWN0cy5maWx0ZXIoKHJlY3QpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjdCAhPT0gcmVjdDEgJiYgcmVjdCAhPT0gcmVjdDI7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudENsaWVudFJlY3QgPSBnZXRCb3VuZGluZ1JlY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgbmV3UmVjdHMucHVzaChyZXBsYWNlbWVudENsaWVudFJlY3QpO1xuICAgICAgICByZXR1cm4gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgICAgICAgIG5ld1JlY3RzLFxuICAgICAgICAgIHRvbGVyYW5jZSxcbiAgICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIHJlY3RDb250YWlucyhyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5sZWZ0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIucmlnaHQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZU92ZXJsYXBpbmdSZWN0cyhyZWN0cykge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBsb2coXCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czEgPSByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcCwgY3V0IG9uZSByZWN0IGludG8gJHt0b0FkZC5sZW5ndGh9YCk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHtcbiAgZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAsXG4gIHJlY3RDb250YWluc1BvaW50LFxuICB0b05hdGl2ZVJlY3QsXG59IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IGxvZywgbG9nRXJyb3IsIHJhbmdlRnJvbUxvY2F0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5sZXQgc3R5bGVzID0gbmV3IE1hcCgpO1xubGV0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbnZhciBsYXN0R3JvdXBJZCA9IDA7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbGlzdCBvZiBhZGRpdGlvbmFsIHN1cHBvcnRlZCBEZWNvcmF0aW9uIFRlbXBsYXRlcy5cbiAqXG4gKiBFYWNoIHRlbXBsYXRlIG9iamVjdCBpcyBpbmRleGVkIGJ5IHRoZSBzdHlsZSBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVGVtcGxhdGVzKG5ld1N0eWxlcykge1xuICB2YXIgc3R5bGVzaGVldCA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCBbaWQsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhuZXdTdHlsZXMpKSB7XG4gICAgc3R5bGVzLnNldChpZCwgc3R5bGUpO1xuICAgIGlmIChzdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICBzdHlsZXNoZWV0ICs9IHN0eWxlLnN0eWxlc2hlZXQgKyBcIlxcblwiO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgbGV0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICBzdHlsZUVsZW1lbnQuaW5uZXJIVE1MID0gc3R5bGVzaGVldDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgRGVjb3JhdGlvbkdyb3VwIGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRpb25zKGdyb3VwTmFtZSkge1xuICB2YXIgZ3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwTmFtZSk7XG4gIGlmICghZ3JvdXApIHtcbiAgICBsZXQgaWQgPSBcInIyLWRlY29yYXRpb24tXCIgKyBsYXN0R3JvdXBJZCsrO1xuICAgIGdyb3VwID0gRGVjb3JhdGlvbkdyb3VwKGlkLCBncm91cE5hbWUpO1xuICAgIGdyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBncm91cCk7XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIGEgRGVjb3JhdGlvbi5cbiAqIFJldHVybnMgd2hldGhlciBhIGRlY29yYXRpb24gbWF0Y2hlZCB0aGlzIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpIHtcbiAgaWYgKGdyb3Vwcy5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZFRhcmdldCgpIHtcbiAgICBmb3IgKGNvbnN0IFtncm91cCwgZ3JvdXBDb250ZW50XSBvZiBncm91cHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBncm91cENvbnRlbnQuaXRlbXMucmV2ZXJzZSgpKSB7XG4gICAgICAgIGlmICghaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzKSB7XG4gICAgICAgICAgbGV0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvSlNPTigpO1xuICAgICAgICAgIGlmIChyZWN0Q29udGFpbnNQb2ludChyZWN0LCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXAsIGl0ZW0sIGVsZW1lbnQsIHJlY3QgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgdGFyZ2V0ID0gZmluZFRhcmdldCgpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBBbmRyb2lkLm9uRGVjb3JhdGlvbkFjdGl2YXRlZChcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogdGFyZ2V0Lml0ZW0uZGVjb3JhdGlvbi5pZCxcbiAgICAgIGdyb3VwOiB0YXJnZXQuZ3JvdXAsXG4gICAgICByZWN0OiB0b05hdGl2ZVJlY3QodGFyZ2V0Lml0ZW0ucmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLFxuICAgICAgY2xpY2s6IGNsaWNrRXZlbnQsXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjb3JhdGlvbkdyb3VwIG9iamVjdCBmcm9tIGEgdW5pcXVlIEhUTUwgSUQgYW5kIGl0cyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gRGVjb3JhdGlvbkdyb3VwKGdyb3VwSWQsIGdyb3VwTmFtZSkge1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxhc3RJdGVtSWQgPSAwO1xuICB2YXIgY29udGFpbmVyID0gbnVsbDtcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBkZWNvcmF0aW9uIHRvIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZChkZWNvcmF0aW9uKSB7XG4gICAgbGV0IGlkID0gZ3JvdXBJZCArIFwiLVwiICsgbGFzdEl0ZW1JZCsrO1xuXG4gICAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcihkZWNvcmF0aW9uLmxvY2F0b3IpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIGxvZyhcIkNhbid0IGxvY2F0ZSBET00gcmFuZ2UgZm9yIGRlY29yYXRpb25cIiwgZGVjb3JhdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSB7IGlkLCBkZWNvcmF0aW9uLCByYW5nZSB9O1xuICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgbGF5b3V0KGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGRlY29yYXRpb24gd2l0aCBnaXZlbiBJRCBmcm9tIHRoZSBncm91cC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZShkZWNvcmF0aW9uSWQpIHtcbiAgICBsZXQgaW5kZXggPSBpdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuZGVjb3JhdGlvbi5pZCA9PT0gZGVjb3JhdGlvbklkKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgaXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICBpZiAoaXRlbS5jb250YWluZXIpIHtcbiAgICAgIGl0ZW0uY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgaXRlbS5jb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyB0aGF0IHRoZSBnaXZlbiBkZWNvcmF0aW9uIHdhcyBtb2RpZmllZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkZWNvcmF0aW9uKSB7XG4gICAgcmVtb3ZlKGRlY29yYXRpb24uaWQpO1xuICAgIGFkZChkZWNvcmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBkZWNvcmF0aW9ucyBmcm9tIHRoaXMgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBkZWNvcmF0aW9uIGVsZW1lbnRzLlxuICAgKlxuICAgKiBUbyBiZSBjYWxsZWQgYWZ0ZXIgcmVmbG93aW5nIHRoZSByZXNvdXJjZSwgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0TGF5b3V0KCkge1xuICAgIGNsZWFyQ29udGFpbmVyKCk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGF5b3V0KGl0ZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXlvdXRzIGEgc2luZ2xlIERlY29yYXRpb24gaXRlbS5cbiAgICovXG4gIGZ1bmN0aW9uIGxheW91dChpdGVtKSB7XG4gICAgbGV0IGdyb3VwQ29udGFpbmVyID0gcmVxdWlyZUNvbnRhaW5lcigpO1xuXG4gICAgbGV0IHN0eWxlID0gc3R5bGVzLmdldChpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGlmICghc3R5bGUpIHtcbiAgICAgIGxvZ0Vycm9yKGBVbmtub3duIGRlY29yYXRpb24gc3R5bGU6ICR7aXRlbS5kZWNvcmF0aW9uLnN0eWxlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIGl0ZW0uaWQpO1xuICAgIGl0ZW1Db250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1zdHlsZVwiLCBpdGVtLmRlY29yYXRpb24uc3R5bGUpO1xuICAgIGl0ZW1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG5cbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIGxldCBjb2x1bW5Db3VudCA9IHBhcnNlSW50KFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgIFwiY29sdW1uLWNvdW50XCJcbiAgICAgIClcbiAgICApO1xuICAgIGxldCBwYWdlV2lkdGggPSB2aWV3cG9ydFdpZHRoIC8gKGNvbHVtbkNvdW50IHx8IDEpO1xuICAgIGxldCBzY3JvbGxpbmdFbGVtZW50ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgICBsZXQgeE9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBsZXQgeU9mZnNldCA9IHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50KGVsZW1lbnQsIHJlY3QsIGJvdW5kaW5nUmVjdCkge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgaWYgKHN0eWxlLndpZHRoID09PSBcIndyYXBcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydFdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyB2aWV3cG9ydFdpZHRoKSAqIHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZS53aWR0aCA9PT0gXCJib3VuZHNcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Ym91bmRpbmdSZWN0LndpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nUmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwicGFnZVwiKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLmZsb29yKHJlY3QubGVmdCAvIHBhZ2VXaWR0aCkgKiBwYWdlV2lkdGg7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnQgKyB4T2Zmc2V0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCArIHlPZmZzZXR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBib3VuZGluZ1JlY3QgPSBpdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgbGV0IGVsZW1lbnRUZW1wbGF0ZTtcbiAgICB0cnkge1xuICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaXRlbS5kZWNvcmF0aW9uLmVsZW1lbnQudHJpbSgpO1xuICAgICAgZWxlbWVudFRlbXBsYXRlID0gdGVtcGxhdGUuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGRlY29yYXRpb24gZWxlbWVudCBcIiR7aXRlbS5kZWNvcmF0aW9uLmVsZW1lbnR9XCI6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm94ZXNcIikge1xuICAgICAgbGV0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSB0cnVlO1xuICAgICAgbGV0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgICAgIGl0ZW0ucmFuZ2UsXG4gICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICk7XG5cbiAgICAgIGNsaWVudFJlY3RzID0gY2xpZW50UmVjdHMuc29ydCgocjEsIHIyKSA9PiB7XG4gICAgICAgIGlmIChyMS50b3AgPCByMi50b3ApIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAocjEudG9wID4gcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGxldCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICBsaW5lLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgICBwb3NpdGlvbkVsZW1lbnQobGluZSwgY2xpZW50UmVjdCwgYm91bmRpbmdSZWN0KTtcbiAgICAgICAgaXRlbUNvbnRhaW5lci5hcHBlbmQobGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHlsZS5sYXlvdXQgPT09IFwiYm91bmRzXCIpIHtcbiAgICAgIGNvbnN0IGJvdW5kcyA9IGVsZW1lbnRUZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBib3VuZHMuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBwb3NpdGlvbkVsZW1lbnQoYm91bmRzLCBib3VuZGluZ1JlY3QsIGJvdW5kaW5nUmVjdCk7XG5cbiAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGJvdW5kcyk7XG4gICAgfVxuXG4gICAgZ3JvdXBDb250YWluZXIuYXBwZW5kKGl0ZW1Db250YWluZXIpO1xuICAgIGl0ZW0uY29udGFpbmVyID0gaXRlbUNvbnRhaW5lcjtcbiAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShcbiAgICAgIGl0ZW1Db250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWFjdGl2YWJsZT0nMSddXCIpXG4gICAgKTtcbiAgICBpZiAoaXRlbS5jbGlja2FibGVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGl0ZW0uY2xpY2thYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKGl0ZW1Db250YWluZXIuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBncm91cCBjb250YWluZXIgZWxlbWVudCwgYWZ0ZXIgbWFraW5nIHN1cmUgaXQgZXhpc3RzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWlyZUNvbnRhaW5lcigpIHtcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBncm91cElkKTtcbiAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWdyb3VwXCIsIGdyb3VwTmFtZSk7XG4gICAgICBjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGdyb3VwIGNvbnRhaW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKCkge1xuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGNvbnRhaW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWRkLCByZW1vdmUsIHVwZGF0ZSwgY2xlYXIsIGl0ZW1zLCByZXF1ZXN0TGF5b3V0IH07XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIC8vIFdpbGwgcmVsYXlvdXQgYWxsIHRoZSBkZWNvcmF0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBib2R5IGlzIHJlc2l6ZWQuXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgdmFyIGxhc3RTaXplID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBsYXN0U2l6ZS53aWR0aCA9PT0gYm9keS5jbGllbnRXaWR0aCAmJlxuICAgICAgICBsYXN0U2l6ZS5oZWlnaHQgPT09IGJvZHkuY2xpZW50SGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGFzdFNpemUgPSB7XG4gICAgICAgIHdpZHRoOiBib2R5LmNsaWVudFdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGJvZHkuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgIGdyb3VwLnJlcXVlc3RMYXlvdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoYm9keSk7XG4gIH0sXG4gIGZhbHNlXG4pO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuICogYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrLCBmYWxzZSk7XG4gIGJpbmREcmFnR2VzdHVyZShkb2N1bWVudCk7XG59KTtcblxuZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkge1xuICAgIC8vIFRoZXJlJ3MgYW4gb24tZ29pbmcgc2VsZWN0aW9uLCB0aGUgdGFwIHdpbGwgZGlzbWlzcyBpdCBzbyB3ZSBkb24ndCBmb3J3YXJkIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGxldCBjbGlja0V2ZW50ID0ge1xuICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgeDogZXZlbnQuY2xpZW50WCAqIHBpeGVsUmF0aW8sXG4gICAgeTogZXZlbnQuY2xpZW50WSAqIHBpeGVsUmF0aW8sXG4gICAgdGFyZ2V0RWxlbWVudDogZXZlbnQudGFyZ2V0Lm91dGVySFRNTCxcbiAgICBpbnRlcmFjdGl2ZUVsZW1lbnQ6IG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQudGFyZ2V0KSxcbiAgfTtcblxuICBpZiAoaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQoZXZlbnQsIGNsaWNrRXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2VuZCB0aGUgdGFwIGRhdGEgb3ZlciB0aGUgSlMgYnJpZGdlIGV2ZW4gaWYgaXQncyBiZWVuIGhhbmRsZWQgd2l0aGluIHRoZSB3ZWIgdmlldywgc28gdGhhdFxuICAvLyBpdCBjYW4gYmUgcHJlc2VydmVkIGFuZCB1c2VkIGJ5IHRoZSB0b29sa2l0IGlmIG5lZWRlZC5cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vblRhcChKU09OLnN0cmluZ2lmeShjbGlja0V2ZW50KSk7XG5cbiAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kRHJhZ0dlc3R1cmUoZWxlbWVudCkge1xuICAvLyBwYXNzaXZlOiBmYWxzZSBpcyBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIG9uU3RhcnQsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIG9uRW5kLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgb25Nb3ZlLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuXG4gIHZhciBzdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdmFyIGlzU3RhcnRpbmdEcmFnID0gZmFsc2U7XG4gIGNvbnN0IHBpeGVsUmF0aW8gPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcblxuICBmdW5jdGlvbiBvblN0YXJ0KGV2ZW50KSB7XG4gICAgaXNTdGFydGluZ0RyYWcgPSB0cnVlO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYICogcGl4ZWxSYXRpbztcbiAgICBjb25zdCBzdGFydFkgPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFkgKiBwaXhlbFJhdGlvO1xuICAgIHN0YXRlID0ge1xuICAgICAgZGVmYXVsdFByZXZlbnRlZDogZXZlbnQuZGVmYXVsdFByZXZlbnRlZCxcbiAgICAgIHN0YXJ0WDogc3RhcnRYLFxuICAgICAgc3RhcnRZOiBzdGFydFksXG4gICAgICBjdXJyZW50WDogc3RhcnRYLFxuICAgICAgY3VycmVudFk6IHN0YXJ0WSxcbiAgICAgIG9mZnNldFg6IDAsXG4gICAgICBvZmZzZXRZOiAwLFxuICAgICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW92ZShldmVudCkge1xuICAgIGlmICghc3RhdGUpIHJldHVybjtcblxuICAgIHN0YXRlLmN1cnJlbnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYICogcGl4ZWxSYXRpbztcbiAgICBzdGF0ZS5jdXJyZW50WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSAqIHBpeGVsUmF0aW87XG4gICAgc3RhdGUub2Zmc2V0WCA9IHN0YXRlLmN1cnJlbnRYIC0gc3RhdGUuc3RhcnRYO1xuICAgIHN0YXRlLm9mZnNldFkgPSBzdGF0ZS5jdXJyZW50WSAtIHN0YXRlLnN0YXJ0WTtcblxuICAgIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgIC8vIFdhaXQgZm9yIGEgbW92ZW1lbnQgb2YgYXQgbGVhc3QgNiBwaXhlbHMgYmVmb3JlIHJlcG9ydGluZyBhIGRyYWcuXG4gICAgaWYgKGlzU3RhcnRpbmdEcmFnKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoc3RhdGUub2Zmc2V0WCkgPj0gNiB8fCBNYXRoLmFicyhzdGF0ZS5vZmZzZXRZKSA+PSA2KSB7XG4gICAgICAgIGlzU3RhcnRpbmdEcmFnID0gZmFsc2U7XG4gICAgICAgIHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vbkRyYWdTdGFydChKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25EcmFnTW92ZShKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRW5kKGV2ZW50KSB7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uRHJhZ0VuZChKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBzdGF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vLyBTZWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXlQYW5vei9hcmNoaXRlY3R1cmUvdHJlZS90b3VjaC1oYW5kbGluZy9taXNjL3RvdWNoLWhhbmRsaW5nXG5mdW5jdGlvbiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGludGVyYWN0aXZlVGFncyA9IFtcbiAgICBcImFcIixcbiAgICBcImF1ZGlvXCIsXG4gICAgXCJidXR0b25cIixcbiAgICBcImNhbnZhc1wiLFxuICAgIFwiZGV0YWlsc1wiLFxuICAgIFwiaW5wdXRcIixcbiAgICBcImxhYmVsXCIsXG4gICAgXCJvcHRpb25cIixcbiAgICBcInNlbGVjdFwiLFxuICAgIFwic3VibWl0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwidmlkZW9cIixcbiAgXTtcbiAgaWYgKGludGVyYWN0aXZlVGFncy5pbmRleE9mKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkgIT0gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vdXRlckhUTUw7XG4gIH1cblxuICAvLyBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBpcyBlZGl0YWJsZSBieSB0aGUgdXNlci5cbiAgaWYgKFxuICAgIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikudG9Mb3dlckNhc2UoKSAhPSBcImZhbHNlXCJcbiAgKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHBhcmVudHMgcmVjdXJzaXZlbHkgYmVjYXVzZSB0aGUgdG91Y2ggbWlnaHQgYmUgZm9yIGV4YW1wbGUgb24gYW4gPGVtPiBpbnNpZGUgYSA8YT4uXG4gIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy9cbi8vICBoaWdobGlnaHQuanNcbi8vICByMi1uYXZpZ2F0b3Ita290bGluXG4vL1xuLy8gIE9yZ2FuaXplZCBieSBUYWVoeXVuIEtpbSBvbiA2LzI3LzE5IGZyb20gcjItbmF2aWdhdG9yLWpzLlxuLy9cbi8vICBDb3B5cmlnaHQgMjAxOSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB3aGljaCBpcyBkZXRhaWxlZFxuLy8gIGluIHRoZSBMSUNFTlNFIGZpbGUgcHJlc2VudCBpbiB0aGUgcHJvamVjdCByZXBvc2l0b3J5IHdoZXJlIHRoaXMgc291cmNlIGNvZGUgaXMgbWFpbnRhaW5lZC5cbi8vXG5cbmNvbnN0IFJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiA9IFwicjItcmVkdWNlLW1vdGlvblwiO1xuY29uc3QgUk9PVF9DTEFTU19OT19GT09UTk9URVMgPSBcInIyLW5vLXBvcHVwLWZvb25vdGVzXCI7XG5jb25zdCBQT1BVUF9ESUFMT0dfQ0xBU1MgPSBcInIyLXBvcHVwLWRpYWxvZ1wiO1xuY29uc3QgRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY29udGFpbmVyXCI7XG5jb25zdCBGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTID0gXCJyMi1mb290bm90ZS1jbG9zZVwiO1xuY29uc3QgRk9PVE5PVEVfRk9SQ0VfU0hPVyA9IFwicjItZm9vdG5vdGUtZm9yY2Utc2hvd1wiO1xuY29uc3QgVFRTX0lEX1BSRVZJT1VTID0gXCJyMi10dHMtcHJldmlvdXNcIjtcbmNvbnN0IFRUU19JRF9ORVhUID0gXCJyMi10dHMtbmV4dFwiO1xuY29uc3QgVFRTX0lEX1NMSURFUiA9IFwicjItdHRzLXNsaWRlclwiO1xuY29uc3QgVFRTX0lEX0FDVElWRV9XT1JEID0gXCJyMi10dHMtYWN0aXZlLXdvcmRcIjtcbmNvbnN0IFRUU19JRF9DT05UQUlORVIgPSBcInIyLXR0cy10eHRcIjtcbmNvbnN0IFRUU19JRF9JTkZPID0gXCJyMi10dHMtaW5mb1wiO1xuY29uc3QgVFRTX05BVl9CVVRUT05fQ0xBU1MgPSBcInIyLXR0cy1idXR0b25cIjtcbmNvbnN0IFRUU19JRF9TUEVBS0lOR19ET0NfRUxFTUVOVCA9IFwicjItdHRzLXNwZWFraW5nLWVsXCI7XG5jb25zdCBUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiA9IFwicjItdHRzLXNwZWFraW5nLXR4dFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NVQlNQQU4gPSBcInIyLXR0cy1zcGVha2luZy13b3JkXCI7XG5jb25zdCBUVFNfSURfSU5KRUNURURfUEFSRU5UID0gXCJyMi10dHMtc3BlYWtpbmctdHh0LXBhcmVudFwiO1xuY29uc3QgSURfSElHSExJR0hUU19DT05UQUlORVIgPSBcIlIyX0lEX0hJR0hMSUdIVFNfQ09OVEFJTkVSXCI7XG5jb25zdCBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfSURfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUlwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQVJFQVwiO1xuY29uc3QgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEgPSBcIlIyX0NMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVwiO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuY29uc3QgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkgPSBbXG4gIFBPUFVQX0RJQUxPR19DTEFTUyxcbiAgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4sXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOLFxuICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUixcbiAgQ0xBU1NfSElHSExJR0hUX0FSRUEsXG4gIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBLFxuICBcInJlc2l6ZS1zZW5zb3JcIixcbl07XG5jb25zdCBDTEFTU19QQUdJTkFURUQgPSBcInIyLWNzcy1wYWdpbmF0ZWRcIjtcblxuLy9jb25zdCBJU19ERVYgPSAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZcIik7XG5jb25zdCBJU19ERVYgPSBmYWxzZTtcbmNvbnN0IF9oaWdobGlnaHRzID0gW107XG5cbmxldCBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbmxldCBfYW5ub3RhdGlvbkNvbnRhaW5lcjtcbmxldCBsYXN0TW91c2VEb3duWCA9IC0xO1xubGV0IGxhc3RNb3VzZURvd25ZID0gLTE7XG5sZXQgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gZmFsc2U7XG5cbmNvbnN0IFVTRV9TVkcgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZID0gMC4zO1xuY29uc3QgQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuNDU7XG5cbi8vY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVCVUdfVklTVUFMUyA9IGZhbHNlO1xuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0ge1xuICBibHVlOiAxMDAsXG4gIGdyZWVuOiA1MCxcbiAgcmVkOiAyMzAsXG59O1xuXG5jb25zdCBBTk5PVEFUSU9OX1dJRFRIID0gMTU7XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShfd2luLCBoaWdobGlnaHRCb3VuZGluZykge1xuICBpZiAoXG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT0gQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5vdXRsaW5lID0gXCJub25lXCI7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIFwidHJhbnNwYXJlbnRcIixcbiAgICBcImltcG9ydGFudFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWFzLCBoaWdobGlnaHQpIHtcbiAgY29uc3QgdXNlU1ZHID0gIURFQlVHX1ZJU1VBTFMgJiYgVVNFX1NWRztcbiAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGhpZ2hsaWdodEFyZWFzKSB7XG4gICAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICAgIGNvbnN0IG9wYWNpdHkgPSBBTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgIGlmIChpc1NWRykge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2VcIixcbiAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgIGByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgaXNTVkcgPSB1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYS5uYW1lc3BhY2VVUkkgPT09IFNWR19YTUxfTkFNRVNQQUNFO1xuICBjb25zdCBpZCA9IGlzU1ZHXG4gICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgICAgPyBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZVxuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZShcImlkXCIpXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpZCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgpID0+IHtcbiAgICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgICB9KTtcbiAgICBpZiAoaGlnaGxpZ2h0KSB7XG4gICAgICBjb25zdCBvcGFjaXR5ID0gREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFk7XG4gICAgICBpZiAoaXNTVkcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImZpbGxcIixcbiAgICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIixcbiAgICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJvY2Vzc1RvdWNoRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgLy8gICAgX2hpZ2hsaWdodHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gIC8vICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShhLnNlbGVjdGlvbkluZm8pKVxuICAvLyAgICAgICAgcmV0dXJuIGEuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoIDwgYi5zZWxlY3Rpb25JbmZvLmNsZWFuVGV4dC5sZW5ndGhcbiAgLy8gICAgfSlcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZEhpZ2hsaWdodCB8fCAhZm91bmRFbGVtZW50KSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgIH1cbiAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIikpIHtcbiAgICBpZiAoZXYudHlwZSA9PT0gXCJtb3VzZW1vdmVcIikge1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgICBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRBcmVhcyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRBcmVhIG9mIGFsbEhpZ2hsaWdodEFyZWFzKSB7XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcy5pbmRleE9mKGhpZ2hsaWdodEFyZWEpIDwgMCkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLCBmb3VuZEhpZ2hsaWdodCk7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyA9IGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBhbGxIaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyB8fFxuICAgICAgICAgIGhpZ2hsaWdodEJvdW5kaW5nICE9PSBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZykge1xuICAgICAgICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgICAgICAgIHNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoXG4gICAgICAgICAgICB3aW4sXG4gICAgICAgICAgICBmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyxcbiAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXYudHlwZSA9PT0gXCJ0b3VjaHN0YXJ0XCIgfHwgZXYudHlwZSA9PT0gXCJ0b3VjaGVuZFwiKSB7XG4gICAgICBjb25zdCBzaXplID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93Lm91dGVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodC5pZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm91bmRIaWdobGlnaHQuaWQuaW5jbHVkZXMoXCJSMl9BTk5PVEFUSU9OX1wiKSk7XG4gICAgICAgIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9BTk5PVEFUSU9OX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0hJR0hMSUdIVF9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFjdGl2YXRlZC5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgZm91bmRIaWdobGlnaHQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldikge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCB4ID0gZXYuY2xpZW50WDtcbiAgY29uc3QgeSA9IGV2LmNsaWVudFk7XG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHhPZmZzZXQ7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0IDogYm9keVJlY3QubGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wIDogYm9keVJlY3QudG9wO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgbGV0IGZvdW5kSGlnaGxpZ2h0O1xuICBsZXQgZm91bmRFbGVtZW50O1xuICBsZXQgZm91bmRSZWN0O1xuICBmb3IgKGxldCBpID0gX2hpZ2hsaWdodHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0c1tpXTtcbiAgICBsZXQgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBoaWdobGlnaHRQYXJlbnQgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgfVxuICAgIGlmICghaGlnaGxpZ2h0UGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhpdCA9IGZhbHNlO1xuICAgIGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50cyA9IGhpZ2hsaWdodFBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnQgb2YgaGlnaGxpZ2h0RnJhZ21lbnRzKSB7XG4gICAgICBjb25zdCB3aXRoUmVjdCA9IGhpZ2hsaWdodEZyYWdtZW50O1xuICAgICAgY29uc3QgbGVmdCA9IHdpdGhSZWN0LnJlY3QubGVmdCArIHhPZmZzZXQ7XG4gICAgICBjb25zdCB0b3AgPSB3aXRoUmVjdC5yZWN0LnRvcCArIHlPZmZzZXQ7XG4gICAgICBmb3VuZFJlY3QgPSB3aXRoUmVjdC5yZWN0O1xuICAgICAgaWYgKFxuICAgICAgICB4ID49IGxlZnQgJiZcbiAgICAgICAgeCA8IGxlZnQgKyB3aXRoUmVjdC5yZWN0LndpZHRoICYmXG4gICAgICAgIHkgPj0gdG9wICYmXG4gICAgICAgIHkgPCB0b3AgKyB3aXRoUmVjdC5yZWN0LmhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIGhpdCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGl0KSB7XG4gICAgICBmb3VuZEhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgICAgIGZvdW5kRWxlbWVudCA9IGhpZ2hsaWdodFBhcmVudDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwibW91c2V1cFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3QgdG91Y2hlZFBvc2l0aW9uID0ge1xuICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICAgIHNjcmVlbkhlaWdodDogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgICBsZWZ0OiBmb3VuZFJlY3QubGVmdCxcbiAgICAgICAgd2lkdGg6IGZvdW5kUmVjdC53aWR0aCxcbiAgICAgICAgdG9wOiBmb3VuZFJlY3QudG9wLFxuICAgICAgICBoZWlnaHQ6IGZvdW5kUmVjdC5oZWlnaHQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBoaWdobGlnaHQ6IGZvdW5kSGlnaGxpZ2h0LFxuICAgICAgICBwb3NpdGlvbjogdG91Y2hlZFBvc2l0aW9uLFxuICAgICAgfTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiB3aW5kb3cucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB3aW5kb3cucHJvY2Vzcy50eXBlID09PSBcInJlbmRlcmVyXCJcbiAgICAgICkge1xuICAgICAgICBlbGVjdHJvbl8xLmlwY1JlbmRlcmVyLnNlbmRUb0hvc3QoUjJfRVZFTlRfSElHSExJR0hUX0NMSUNLLCBwYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LndlYmtpdFVSTCkge1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0MS5sZWZ0IDwgcmVjdDIucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QyLmxlZnQgPCByZWN0MS5yaWdodCB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QyLmxlZnQsIHJlY3QxLnJpZ2h0LCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDEudG9wIDwgcmVjdDIuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi50b3AgPCByZWN0MS5ib3R0b20gfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi50b3AsIHJlY3QxLmJvdHRvbSwgdG9sZXJhbmNlKSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCAtMSkpIHtcbiAgICAgICAgbGV0IHRvQWRkID0gW107XG4gICAgICAgIGxldCB0b1JlbW92ZTtcbiAgICAgICAgbGV0IHRvUHJlc2VydmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMyID0gcmVjdFN1YnRyYWN0KHJlY3QyLCByZWN0MSk7XG4gICAgICAgICAgaWYgKHN1YnRyYWN0UmVjdHMxLmxlbmd0aCA8IHN1YnRyYWN0UmVjdHMyLmxlbmd0aCkge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgICAgICB0b1ByZXNlcnZlID0gcmVjdDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czI7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QyO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdO1xuICAgICAgICAgIHRvQ2hlY2sucHVzaCh0b1ByZXNlcnZlKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0b0NoZWNrLCB0b0FkZCk7XG4gICAgICAgICAgY2hlY2tPdmVybGFwcyh0b0NoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHRvUmVtb3ZlO1xuICAgICAgICB9KTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobmV3UmVjdHMsIHRvQWRkKTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobmV3UmVjdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrT3ZlcmxhcHMocmVjdHMpIHtcbiAgY29uc3Qgc3RpbGxPdmVybGFwaW5nUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByZWN0MSBvZiByZWN0cykge1xuICAgIGZvciAoY29uc3QgcmVjdDIgb2YgcmVjdHMpIHtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBoYXMxID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MSkgPj0gMDtcbiAgICAgIGNvbnN0IGhhczIgPSBzdGlsbE92ZXJsYXBpbmdSZWN0cy5pbmRleE9mKHJlY3QyKSA+PSAwO1xuICAgICAgaWYgKCFoYXMxIHx8ICFoYXMyKSB7XG4gICAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgICAgaWYgKCFoYXMxKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFoYXMyKSB7XG4gICAgICAgICAgICBzdGlsbE92ZXJsYXBpbmdSZWN0cy5wdXNoKHJlY3QyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogb3ZlcmxhcCAtLS1cIik7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzEgVE9QOiR7cmVjdDEudG9wfSBCT1RUT006JHtyZWN0MS5ib3R0b219IExFRlQ6JHtyZWN0MS5sZWZ0fSBSSUdIVDoke3JlY3QxLnJpZ2h0fSBXSURUSDoke3JlY3QxLndpZHRofSBIRUlHSFQ6JHtyZWN0MS5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgIzIgVE9QOiR7cmVjdDIudG9wfSBCT1RUT006JHtyZWN0Mi5ib3R0b219IExFRlQ6JHtyZWN0Mi5sZWZ0fSBSSUdIVDoke3JlY3QyLnJpZ2h0fSBXSURUSDoke3JlY3QyLndpZHRofSBIRUlHSFQ6JHtyZWN0Mi5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeE92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFgocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeE92ZXJsYXA6ICR7eE92ZXJsYXB9YCk7XG4gICAgICAgICAgY29uc3QgeU92ZXJsYXAgPSBnZXRSZWN0T3ZlcmxhcFkocmVjdDEsIHJlY3QyKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgeU92ZXJsYXA6ICR7eU92ZXJsYXB9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKGBDTElFTlQgUkVDVDogb3ZlcmxhcHMgJHtzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGh9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29udGFpbmVkUmVjdHMocmVjdHMsIHRvbGVyYW5jZSkge1xuICBjb25zdCByZWN0c1RvS2VlcCA9IG5ldyBTZXQocmVjdHMpO1xuICBmb3IgKGNvbnN0IHJlY3Qgb2YgcmVjdHMpIHtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoID4gMSAmJiByZWN0LmhlaWdodCA+IDE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHRpbnlcIik7XG4gICAgICB9XG4gICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwb3NzaWJseUNvbnRhaW5pbmdSZWN0IG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdCA9PT0gcG9zc2libHlDb250YWluaW5nUmVjdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVjdHNUb0tlZXAuaGFzKHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlY3RDb250YWlucyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0LCByZWN0LCB0b2xlcmFuY2UpKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgY29udGFpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlY3RzVG9LZWVwLmRlbGV0ZShyZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJlY3RzVG9LZWVwKTtcbn1cblxuZnVuY3Rpb24gYWxtb3N0RXF1YWwoYSwgYiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gdG9sZXJhbmNlO1xufVxuXG5mdW5jdGlvbiByZWN0SW50ZXJzZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IG1pblJpZ2h0ID0gTWF0aC5taW4ocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgbWF4VG9wID0gTWF0aC5tYXgocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBtaW5Cb3R0b20gPSBNYXRoLm1pbihyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIGNvbnN0IHJlY3QgPSB7XG4gICAgYm90dG9tOiBtaW5Cb3R0b20sXG4gICAgaGVpZ2h0OiBNYXRoLm1heCgwLCBtaW5Cb3R0b20gLSBtYXhUb3ApLFxuICAgIGxlZnQ6IG1heExlZnQsXG4gICAgcmlnaHQ6IG1pblJpZ2h0LFxuICAgIHRvcDogbWF4VG9wLFxuICAgIHdpZHRoOiBNYXRoLm1heCgwLCBtaW5SaWdodCAtIG1heExlZnQpLFxuICB9O1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCByZWN0SW50ZXJzZWN0ZWQgPSByZWN0SW50ZXJzZWN0KHJlY3QyLCByZWN0MSk7XG4gIGlmIChyZWN0SW50ZXJzZWN0ZWQuaGVpZ2h0ID09PSAwIHx8IHJlY3RJbnRlcnNlY3RlZC53aWR0aCA9PT0gMCkge1xuICAgIHJldHVybiBbcmVjdDFdO1xuICB9XG4gIGNvbnN0IHJlY3RzID0gW107XG4gIHtcbiAgICBjb25zdCByZWN0QSA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdDEubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0QS53aWR0aCA9IHJlY3RBLnJpZ2h0IC0gcmVjdEEubGVmdDtcbiAgICByZWN0QS5oZWlnaHQgPSByZWN0QS5ib3R0b20gLSByZWN0QS50b3A7XG4gICAgaWYgKHJlY3RBLmhlaWdodCAhPT0gMCAmJiByZWN0QS53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0QSk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QiA9IHtcbiAgICAgIGJvdHRvbTogcmVjdEludGVyc2VjdGVkLnRvcCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qi53aWR0aCA9IHJlY3RCLnJpZ2h0IC0gcmVjdEIubGVmdDtcbiAgICByZWN0Qi5oZWlnaHQgPSByZWN0Qi5ib3R0b20gLSByZWN0Qi50b3A7XG4gICAgaWYgKHJlY3RCLmhlaWdodCAhPT0gMCAmJiByZWN0Qi53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qik7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0QyA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0SW50ZXJzZWN0ZWQuYm90dG9tLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0Qy53aWR0aCA9IHJlY3RDLnJpZ2h0IC0gcmVjdEMubGVmdDtcbiAgICByZWN0Qy5oZWlnaHQgPSByZWN0Qy5ib3R0b20gLSByZWN0Qy50b3A7XG4gICAgaWYgKHJlY3RDLmhlaWdodCAhPT0gMCAmJiByZWN0Qy53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0Qyk7XG4gICAgfVxuICB9XG4gIHtcbiAgICBjb25zdCByZWN0RCA9IHtcbiAgICAgIGJvdHRvbTogcmVjdDEuYm90dG9tLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgcmlnaHQ6IHJlY3QxLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RELndpZHRoID0gcmVjdEQucmlnaHQgLSByZWN0RC5sZWZ0O1xuICAgIHJlY3RELmhlaWdodCA9IHJlY3RELmJvdHRvbSAtIHJlY3RELnRvcDtcbiAgICBpZiAocmVjdEQuaGVpZ2h0ICE9PSAwICYmIHJlY3RELndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3REKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnNQb2ludChyZWN0LCB4LCB5LCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdC5sZWZ0IDwgeCB8fCBhbG1vc3RFcXVhbChyZWN0LmxlZnQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QucmlnaHQgPiB4IHx8IGFsbW9zdEVxdWFsKHJlY3QucmlnaHQsIHgsIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QudG9wIDwgeSB8fCBhbG1vc3RFcXVhbChyZWN0LnRvcCwgeSwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5ib3R0b20gPiB5IHx8IGFsbW9zdEVxdWFsKHJlY3QuYm90dG9tLCB5LCB0b2xlcmFuY2UpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mikge1xuICBjb25zdCBsZWZ0ID0gTWF0aC5taW4ocmVjdDEubGVmdCwgcmVjdDIubGVmdCk7XG4gIGNvbnN0IHJpZ2h0ID0gTWF0aC5tYXgocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0KTtcbiAgY29uc3QgdG9wID0gTWF0aC5taW4ocmVjdDEudG9wLCByZWN0Mi50b3ApO1xuICBjb25zdCBib3R0b20gPSBNYXRoLm1heChyZWN0MS5ib3R0b20sIHJlY3QyLmJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tLFxuICAgIGhlaWdodDogYm90dG9tIC0gdG9wLFxuICAgIGxlZnQsXG4gICAgcmlnaHQsXG4gICAgdG9wLFxuICAgIHdpZHRoOiByaWdodCAtIGxlZnQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgcmVjdHMsXG4gIHRvbGVyYW5jZSxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm1lcmdlVG91Y2hpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQ0xJRU5UIFJFQ1Q6IG1lcmdpbmcgdHdvIGludG8gb25lLCBWRVJUSUNBTDogJHtyZWN0c0xpbmVVcFZlcnRpY2FsbHl9IEhPUklaT05UQUw6ICR7cmVjdHNMaW5lVXBIb3Jpem9udGFsbHl9ICgke2RvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHN9KWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzTm9PdmVybGFwKHJhbmdlLCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzKSB7XG4gIGNvbnN0IHJhbmdlQ2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICByZXR1cm4gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICAgIHJhbmdlQ2xpZW50UmVjdHMsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8oXG4gIGNsaWVudFJlY3RzLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgY29uc3QgdG9sZXJhbmNlID0gMTtcbiAgY29uc3Qgb3JpZ2luYWxSZWN0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIG9yaWdpbmFsUmVjdHMucHVzaCh7XG4gICAgICBib3R0b206IHJhbmdlQ2xpZW50UmVjdC5ib3R0b20sXG4gICAgICBoZWlnaHQ6IHJhbmdlQ2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICBsZWZ0OiByYW5nZUNsaWVudFJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiByYW5nZUNsaWVudFJlY3QucmlnaHQsXG4gICAgICB0b3A6IHJhbmdlQ2xpZW50UmVjdC50b3AsXG4gICAgICB3aWR0aDogcmFuZ2VDbGllbnRSZWN0LndpZHRoLFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IG1lcmdlZFJlY3RzID0gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICAgIG9yaWdpbmFsUmVjdHMsXG4gICAgdG9sZXJhbmNlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbiAgY29uc3Qgbm9Db250YWluZWRSZWN0cyA9IHJlbW92ZUNvbnRhaW5lZFJlY3RzKG1lcmdlZFJlY3RzLCB0b2xlcmFuY2UpO1xuICBjb25zdCBuZXdSZWN0cyA9IHJlcGxhY2VPdmVybGFwaW5nUmVjdHMobm9Db250YWluZWRSZWN0cyk7XG4gIGNvbnN0IG1pbkFyZWEgPSAyICogMjtcbiAgZm9yIChsZXQgaiA9IG5ld1JlY3RzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgY29uc3QgcmVjdCA9IG5ld1JlY3RzW2pdO1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggKiByZWN0LmhlaWdodCA+IG1pbkFyZWE7XG4gICAgaWYgKCFiaWdFbm91Z2gpIHtcbiAgICAgIGlmIChuZXdSZWN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmVjdHMuc3BsaWNlKGosIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSBzbWFsbCwgYnV0IGtlZXAgb3RoZXJ3aXNlIGVtcHR5IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKElTX0RFVikge1xuICAgIGNoZWNrT3ZlcmxhcHMobmV3UmVjdHMpO1xuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ld1JlY3RzO1xufVxuXG5mdW5jdGlvbiBpc1BhZ2luYXRlZChkb2N1bWVudCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19QQUdJTkFURUQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpIHtcbiAgaWYgKGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudDtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ29udGFpbmVyKHdpbiwgYW5ub3RhdGlvbkZsYWcpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgaWYgKCFfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGlmICghYm9keUV2ZW50TGlzdGVuZXJzU2V0KSB7XG4gICAgICBib2R5RXZlbnRMaXN0ZW5lcnNTZXQgPSB0cnVlO1xuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1vdXNlZG93blwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBsYXN0TW91c2VEb3duWCA9IGV2LmNsaWVudFg7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blkgPSBldi5jbGllbnRZO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZXVwXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKGxhc3RNb3VzZURvd25YIC0gZXYuY2xpZW50WCkgPCAzICYmXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWSAtIGV2LmNsaWVudFkpIDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc01vdXNlRXZlbnQod2luLCBldik7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwidG91Y2hlbmRcIixcbiAgICAgICAgZnVuY3Rpb24gdG91Y2hFbmQoZSkge1xuICAgICAgICAgIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgIH1cbiAgICBfaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgSURfSElHSExJR0hUU19DT05UQUlORVIpO1xuXG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoX2hpZ2hsaWdodHNDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIF9oaWdobGlnaHRzQ29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBoaWRlQWxsaGlnaGxpZ2h0cygpIHtcbiAgaWYgKF9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIucmVtb3ZlKCk7XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lBbGxoaWdobGlnaHRzKCkge1xuICBoaWRlQWxsaGlnaGxpZ2h0cygpO1xuICBfaGlnaGxpZ2h0cy5zcGxpY2UoMCwgX2hpZ2hsaWdodHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lIaWdobGlnaHQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgbGV0IF9kb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIGlmIChoaWdobGlnaHQgJiYgaSA+PSAwICYmIGkgPCBfaGlnaGxpZ2h0cy5sZW5ndGgpIHtcbiAgICBfaGlnaGxpZ2h0cy5zcGxpY2UoaSwgMSk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0Q29udGFpbmVyID0gX2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgaWYgKGhpZ2hsaWdodENvbnRhaW5lcikge1xuICAgIGhpZ2hsaWdodENvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NmaVRleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoZWxlbWVudCwgY2hpbGQpIHtcbiAgbGV0IGZvdW5kID0gLTE7XG4gIGxldCB0ZXh0Tm9kZUluZGV4ID0gLTE7XG4gIGxldCBwcmV2aW91c1dhc0VsZW1lbnQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgY29uc3QgaXNUZXh0ID0gaXNDZmlUZXh0Tm9kZShjaGlsZE5vZGUpO1xuICAgIGlmIChpc1RleHQgfHwgcHJldmlvdXNXYXNFbGVtZW50KSB7XG4gICAgICB0ZXh0Tm9kZUluZGV4ICs9IDI7XG4gICAgfVxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgIGlmIChjaGlsZE5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGV4dE5vZGVJbmRleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzV2FzRWxlbWVudCA9IGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBnZXRDb21tb25BbmNlc3RvckVsZW1lbnQobm9kZTEsIG5vZGUyKSB7XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEgPT09IG5vZGUyKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTEuY29udGFpbnMobm9kZTIpKSB7XG4gICAgcmV0dXJuIG5vZGUxO1xuICB9XG4gIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgbm9kZTIuY29udGFpbnMobm9kZTEpKSB7XG4gICAgcmV0dXJuIG5vZGUyO1xuICB9XG4gIGNvbnN0IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgbGV0IHBhcmVudCA9IG5vZGUxLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGNvbnN0IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4gPSBbXTtcbiAgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTtcbiAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgbm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbi5wdXNoKHBhcmVudCk7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgbGV0IGNvbW1vbkFuY2VzdG9yID0gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5maW5kKFxuICAgIChub2RlMUVsZW1lbnRBbmNlc3RvcikgPT4ge1xuICAgICAgcmV0dXJuIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uaW5kZXhPZihub2RlMUVsZW1lbnRBbmNlc3RvcikgPj0gMDtcbiAgICB9XG4gICk7XG4gIGlmICghY29tbW9uQW5jZXN0b3IpIHtcbiAgICBjb21tb25BbmNlc3RvciA9IG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZCgobm9kZTJFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTJFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yO1xufVxuXG5mdW5jdGlvbiBmdWxsUXVhbGlmaWVkU2VsZWN0b3Iobm9kZSkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAgIChub2RlLmxvY2FsTmFtZSAmJiBub2RlLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBsb3dlckNhc2VOYW1lO1xuICB9XG4gIC8vcmV0dXJuIGNzc1BhdGgobm9kZSwganVzdFNlbGVjdG9yKTtcbiAgcmV0dXJuIGNzc1BhdGgobm9kZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBDT0xMQVBTRUQuXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmF3VGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhblRleHQgPSByYXdUZXh0LnRyaW0oKS5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5UZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBURVhUIEVNUFRZLlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGNvbnNvbGUubG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2VJbmZvID0gY29udmVydFJhbmdlKHJhbmdlLCBmdWxsUXVhbGlmaWVkU2VsZWN0b3IsIGNvbXB1dGVDRkkpO1xuICBpZiAoIXJhbmdlSW5mbykge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIFNFTEVDVElPTiBSQU5HRSBJTkZPIEZBSUw/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKElTX0RFViAmJiBERUJVR19WSVNVQUxTKSB7XG4gICAgY29uc3QgcmVzdG9yZWRSYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8od2luLmRvY3VtZW50LCByYW5nZUluZm8pO1xuICAgIGlmIChyZXN0b3JlZFJhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHJhbmdlLnN0YXJ0T2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kT2Zmc2V0ID09PSByYW5nZS5lbmRPZmZzZXQgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkVEIE9LQVkgKGRldiBjaGVjaykuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRUxFQ1RJT04gUkFOR0UgUkVTVE9SRSBGQUlMIChkZXYgY2hlY2spLlwiKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiU0VMRUNUSU9OXCIsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJPUkRFUkVEIFJBTkdFIEZST00gU0VMRUNUSU9OXCIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgICBkdW1wRGVidWcoXG4gICAgICAgICAgXCJSRVNUT1JFRCBSQU5HRVwiLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCxcbiAgICAgICAgICBnZXRDc3NTZWxlY3RvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNBTk5PVCBSRVNUT1JFIFNFTEVDVElPTiBSQU5HRSA/PyFcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pLFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogcmF3VGV4dCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGVja0JsYWNrbGlzdGVkKGVsKSB7XG4gIGxldCBibGFja2xpc3RlZElkO1xuICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuICBpZiAoaWQgJiYgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkuaW5kZXhPZihpZCkgPj0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tCbGFja2xpc3RlZCBJRDogXCIgKyBpZCk7XG4gICAgYmxhY2tsaXN0ZWRJZCA9IGlkO1xuICB9XG4gIGxldCBibGFja2xpc3RlZENsYXNzO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkpIHtcbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGl0ZW0pKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgQ0xBU1M6IFwiICsgaXRlbSk7XG4gICAgICBibGFja2xpc3RlZENsYXNzID0gaXRlbTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoYmxhY2tsaXN0ZWRJZCB8fCBibGFja2xpc3RlZENsYXNzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNzc1BhdGgobm9kZSwgb3B0aW1pemVkKSB7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3Qgc3RlcHMgPSBbXTtcbiAgbGV0IGNvbnRleHROb2RlID0gbm9kZTtcbiAgd2hpbGUgKGNvbnRleHROb2RlKSB7XG4gICAgY29uc3Qgc3RlcCA9IF9jc3NQYXRoU3RlcChjb250ZXh0Tm9kZSwgISFvcHRpbWl6ZWQsIGNvbnRleHROb2RlID09PSBub2RlKTtcbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIGJyZWFrOyAvLyBFcnJvciAtIGJhaWwgb3V0IGVhcmx5LlxuICAgIH1cbiAgICBzdGVwcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIGlmIChzdGVwLm9wdGltaXplZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnRleHROb2RlID0gY29udGV4dE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuICBzdGVwcy5yZXZlcnNlKCk7XG4gIHJldHVybiBzdGVwcy5qb2luKFwiID4gXCIpO1xufVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuLy8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL2JsaW5rLysvbWFzdGVyL1NvdXJjZS9kZXZ0b29scy9mcm9udF9lbmQvY29tcG9uZW50cy9ET01QcmVzZW50YXRpb25VdGlscy5qcyMzMTZcbmZ1bmN0aW9uIF9jc3NQYXRoU3RlcChub2RlLCBvcHRpbWl6ZWQsIGlzVGFyZ2V0Tm9kZSkge1xuICBmdW5jdGlvbiBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKG5kKSB7XG4gICAgY29uc3QgY2xhc3NBdHRyaWJ1dGUgPSBuZC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcbiAgICBpZiAoIWNsYXNzQXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzQXR0cmlidXRlXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAoKG5tKSA9PiB7XG4gICAgICAgIC8vIFRoZSBwcmVmaXggaXMgcmVxdWlyZWQgdG8gc3RvcmUgXCJfX3Byb3RvX19cIiBpbiBhIG9iamVjdC1iYXNlZCBtYXAuXG4gICAgICAgIHJldHVybiBcIiRcIiArIG5tO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpZFNlbGVjdG9yKGlkZCkge1xuICAgIHJldHVybiBcIiNcIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKGlkZW50KSB7XG4gICAgaWYgKGlzQ1NTSWRlbnRpZmllcihpZGVudCkpIHtcbiAgICAgIHJldHVybiBpZGVudDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRFc2NhcGVGaXJzdCA9IC9eKD86WzAtOV18LVswLTktXT8pLy50ZXN0KGlkZW50KTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpZGVudC5sZW5ndGggLSAxO1xuICAgIHJldHVybiBpZGVudC5yZXBsYWNlKC8uL2csIGZ1bmN0aW9uIChjLCBpaSkge1xuICAgICAgcmV0dXJuIChzaG91bGRFc2NhcGVGaXJzdCAmJiBpaSA9PT0gMCkgfHwgIWlzQ1NTSWRlbnRDaGFyKGMpXG4gICAgICAgID8gZXNjYXBlQXNjaWlDaGFyKGMsIGlpID09PSBsYXN0SW5kZXgpXG4gICAgICAgIDogYztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUFzY2lpQ2hhcihjLCBpc0xhc3QpIHtcbiAgICByZXR1cm4gXCJcXFxcXCIgKyB0b0hleEJ5dGUoYykgKyAoaXNMYXN0ID8gXCJcIiA6IFwiIFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSGV4Qnl0ZShjKSB7XG4gICAgbGV0IGhleEJ5dGUgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChoZXhCeXRlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaGV4Qnl0ZSA9IFwiMFwiICsgaGV4Qnl0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhleEJ5dGU7XG4gIH1cblxuICBmdW5jdGlvbiBpc0NTU0lkZW50Q2hhcihjKSB7XG4gICAgaWYgKC9bYS16QS1aMC05Xy1dLy50ZXN0KGMpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGMuY2hhckNvZGVBdCgwKSA+PSAweGEwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudGlmaWVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIC9eLT9bYS16QS1aX11bYS16QS1aMC05Xy1dKiQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBsb3dlckNhc2VOYW1lID1cbiAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZWxlbWVudCA9IG5vZGU7XG5cbiAgY29uc3QgaWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG4gIGlmIChvcHRpbWl6ZWQpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGlkU2VsZWN0b3IoaWQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJib2R5XCIgfHxcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiaGVhZFwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImh0bWxcIlxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbG93ZXJDYXNlTmFtZSwgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgbm9kZU5hbWUgPSBsb3dlckNhc2VOYW1lOyAvLyBub2RlLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpO1xuICBpZiAoaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lICsgaWRTZWxlY3RvcihpZCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcblxuICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB7XG4gICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICB2YWx1ZTogbm9kZU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoZWxlbWVudCk7XG5cbiAgY29uc3QgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgaWYgKHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmluZGV4T2YoYXJySXRlbSkgPCAwKSB7XG4gICAgICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5lZWRzQ2xhc3NOYW1lcyA9IGZhbHNlO1xuICBsZXQgbmVlZHNOdGhDaGlsZCA9IGZhbHNlO1xuICBsZXQgb3duSW5kZXggPSAtMTtcbiAgbGV0IGVsZW1lbnRJbmRleCA9IC0xO1xuICBjb25zdCBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZHJlbjtcblxuICBmb3IgKFxuICAgIGxldCBpID0gMDtcbiAgICAob3duSW5kZXggPT09IC0xIHx8ICFuZWVkc050aENoaWxkKSAmJiBpIDwgc2libGluZ3MubGVuZ3RoO1xuICAgICsraVxuICApIHtcbiAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG4gICAgaWYgKHNpYmxpbmcubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZWxlbWVudEluZGV4ICs9IDE7XG4gICAgaWYgKHNpYmxpbmcgPT09IG5vZGUpIHtcbiAgICAgIG93bkluZGV4ID0gZWxlbWVudEluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzaWJsaW5nLm5vZGVOYW1lSW5Db3JyZWN0Q2FzZSgpXG4gICAgY29uc3Qgc2libGluZ05hbWUgPVxuICAgICAgKHNpYmxpbmcubG9jYWxOYW1lICYmIHNpYmxpbmcubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBzaWJsaW5nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNpYmxpbmdOYW1lICE9PSBub2RlTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG5lZWRzQ2xhc3NOYW1lcyA9IHRydWU7XG5cbiAgICBjb25zdCBvd25DbGFzc05hbWVzID0gW107XG4gICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkuZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgb3duQ2xhc3NOYW1lcy5wdXNoKGFyckl0ZW0pO1xuICAgIH0pO1xuICAgIGxldCBvd25DbGFzc05hbWVDb3VudCA9IG93bkNsYXNzTmFtZXMubGVuZ3RoO1xuXG4gICAgaWYgKG93bkNsYXNzTmFtZUNvdW50ID09PSAwKSB7XG4gICAgICBuZWVkc050aENoaWxkID0gdHJ1ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyA9IHByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMoc2libGluZyk7XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheSA9IFtdOyAvLyAua2V5U2V0KClcbiAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Xy5mb3JFYWNoKChhcnJJdGVtKSA9PiB7XG4gICAgICBpZiAoc2libGluZ0NsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgICBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5LnB1c2goYXJySXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHNpYmxpbmdDbGFzcyBvZiBzaWJsaW5nQ2xhc3NOYW1lc0FycmF5KSB7XG4gICAgICBjb25zdCBpbmQgPSBvd25DbGFzc05hbWVzLmluZGV4T2Yoc2libGluZ0NsYXNzKTtcbiAgICAgIGlmIChpbmQgPCAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBvd25DbGFzc05hbWVzLnNwbGljZShpbmQsIDEpOyAvLyBkZWxldGUgb3duQ2xhc3NOYW1lc1tzaWJsaW5nQ2xhc3NdO1xuXG4gICAgICBpZiAoIS0tb3duQ2xhc3NOYW1lQ291bnQpIHtcbiAgICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSBub2RlTmFtZTtcbiAgaWYgKFxuICAgIGlzVGFyZ2V0Tm9kZSAmJlxuICAgIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiZcbiAgICBlbGVtZW50LmdldEF0dHJpYnV0ZShcInR5cGVcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSAmJlxuICAgICFlbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpXG4gICkge1xuICAgIHJlc3VsdCArPSAnW3R5cGU9XCInICsgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICsgJ1wiXSc7XG4gIH1cbiAgaWYgKG5lZWRzTnRoQ2hpbGQpIHtcbiAgICByZXN1bHQgKz0gXCI6bnRoLWNoaWxkKFwiICsgKG93bkluZGV4ICsgMSkgKyBcIilcIjtcbiAgfSBlbHNlIGlmIChuZWVkc0NsYXNzTmFtZXMpIHtcbiAgICBmb3IgKGNvbnN0IHByZWZpeGVkTmFtZSBvZiBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSkge1xuICAgICAgcmVzdWx0ICs9IFwiLlwiICsgZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkKHByZWZpeGVkTmFtZS5zdWJzdHIoMSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb3B0aW1pemVkOiBmYWxzZSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlQ0ZJKG5vZGUpIHtcbiAgLy8gVE9ETzogaGFuZGxlIGNoYXJhY3RlciBwb3NpdGlvbiBpbnNpZGUgdGV4dCBub2RlXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsZXQgY2ZpID0gXCJcIjtcblxuICBsZXQgY3VycmVudEVsZW1lbnQgPSBub2RlO1xuICB3aGlsZSAoXG4gICAgY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICkge1xuICAgIGNvbnN0IGJsYWNrbGlzdGVkID0gY2hlY2tCbGFja2xpc3RlZChjdXJyZW50RWxlbWVudCk7XG4gICAgaWYgKCFibGFja2xpc3RlZCkge1xuICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUuY2hpbGRyZW47XG4gICAgICBsZXQgY3VycmVudEVsZW1lbnRJbmRleCA9IC0xO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50RWxlbWVudFBhcmVudENoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PT0gY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbltpXSkge1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50SW5kZXggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGNmaUluZGV4ID0gKGN1cnJlbnRFbGVtZW50SW5kZXggKyAxKSAqIDI7XG4gICAgICAgIGNmaSA9XG4gICAgICAgICAgY2ZpSW5kZXggK1xuICAgICAgICAgIChjdXJyZW50RWxlbWVudC5pZCA/IFwiW1wiICsgY3VycmVudEVsZW1lbnQuaWQgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgICAoY2ZpLmxlbmd0aCA/IFwiL1wiICsgY2ZpIDogXCJcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBcIi9cIiArIGNmaTtcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUhpZ2hsaWdodChsb2NhdGlvbnMsIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24sIHR5cGUpIHtcbiAgY29uc3QgcmFuZ2VJbmZvID0gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9ucyk7XG4gIGNvbnN0IHVuaXF1ZVN0ciA9IGAke3JhbmdlSW5mby5jZml9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3J9JHtyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uc3RhcnRPZmZzZXR9JHtyYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleH0ke3JhbmdlSW5mby5lbmRPZmZzZXR9YDtcblxuICBjb25zdCBoYXNoID0gcmVxdWlyZShcImhhc2guanNcIik7XG4gIGNvbnN0IHNoYTI1NkhleCA9IGhhc2guc2hhMjU2KCkudXBkYXRlKHVuaXF1ZVN0cikuZGlnZXN0KFwiaGV4XCIpO1xuXG4gIHZhciBpZDtcbiAgaWYgKHR5cGUgPT0gSURfSElHSExJR0hUU19DT05UQUlORVIpIHtcbiAgICBpZCA9IFwiUjJfSElHSExJR0hUX1wiICsgc2hhMjU2SGV4O1xuICB9IGVsc2Uge1xuICAgIGlkID0gXCJSMl9BTk5PVEFUSU9OX1wiICsgc2hhMjU2SGV4O1xuICB9XG5cbiAgZGVzdHJveUhpZ2hsaWdodChpZCk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ID0ge1xuICAgIGNvbG9yOiBjb2xvciA/IGNvbG9yIDogREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgIGlkLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICByYW5nZUluZm8sXG4gIH07XG4gIF9oaWdobGlnaHRzLnB1c2goaGlnaGxpZ2h0KTtcbiAgY3JlYXRlSGlnaGxpZ2h0RG9tKFxuICAgIHdpbmRvdyxcbiAgICBoaWdobGlnaHQsXG4gICAgdHlwZSA9PSBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUiA/IHRydWUgOiBmYWxzZVxuICApO1xuXG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbywgY29sb3IsIHBvaW50ZXJJbnRlcmFjdGlvbikge1xuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBzZWxlY3Rpb25JbmZvLFxuICAgIGNvbG9yLFxuICAgIHBvaW50ZXJJbnRlcmFjdGlvbixcbiAgICBJRF9ISUdITElHSFRTX0NPTlRBSU5FUlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5ub3RhdGlvbihpZCkge1xuICBsZXQgaSA9IC0xO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaSA9PSBfaGlnaGxpZ2h0cy5sZW5ndGgpIHJldHVybjtcblxuICB2YXIgbG9jYXRpb25zID0ge1xuICAgIGxvY2F0aW9uczogcmFuZ2VJbmZvMkxvY2F0aW9uKGhpZ2hsaWdodC5yYW5nZUluZm8pLFxuICB9O1xuXG4gIHJldHVybiBfY3JlYXRlSGlnaGxpZ2h0KFxuICAgIGxvY2F0aW9ucyxcbiAgICBoaWdobGlnaHQuY29sb3IsXG4gICAgdHJ1ZSxcbiAgICBJRF9BTk5PVEFUSU9OX0NPTlRBSU5FUlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHREb20od2luLCBoaWdobGlnaHQsIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjYWxlID1cbiAgICAxIC9cbiAgICAod2luLlJFQURJVU0yICYmIHdpbi5SRUFESVVNMi5pc0ZpeGVkTGF5b3V0XG4gICAgICA/IHdpbi5SRUFESVVNMi5meGxWaWV3cG9ydFNjYWxlXG4gICAgICA6IDEpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcblxuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgaGlnaGxpZ2h0c0NvbnRhaW5lciA9IGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKTtcbiAgY29uc3QgaGlnaGxpZ2h0UGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaGlnaGxpZ2h0LmlkKTtcbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIpO1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIGhpZ2hsaWdodFBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgaWYgKGhpZ2hsaWdodC5wb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgICBoaWdobGlnaHRQYXJlbnQuc2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiLCBcIjFcIik7XG4gIH1cblxuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIC8vY29uc3QgdXNlU1ZHID0gVVNFX1NWRztcbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGxldCBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZztcbiAgY29uc3Qgcm91bmRlZENvcm5lciA9IDM7XG4gIGNvbnN0IHVuZGVybGluZVRoaWNrbmVzcyA9IDI7XG4gIGNvbnN0IHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzID0gMztcbiAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICBsZXQgZXh0cmEgPSBcIlwiO1xuICBjb25zdCByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QgPVxuICAgIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBoaWdobGlnaHQuaWQpO1xuXG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgbGV0IGFubm90YXRpb25PZmZzZXQ7XG5cbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID1cbiAgICAgIHBhcnNlSW50KFxuICAgICAgICAocmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC0geE9mZnNldCkgLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgKSArIDE7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgICBhbm5vdGF0aW9uT2Zmc2V0ID0gcGFyc2VJbnQoXG4gICAgICByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QucmlnaHQgLyB3aW5kb3cuaW5uZXJXaWR0aCArIDFcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBjbGllbnRSZWN0IG9mIGNsaWVudFJlY3RzKSB7XG4gICAgaWYgKHVzZVNWRykge1xuICAgICAgY29uc3QgYm9yZGVyVGhpY2tuZXNzID0gMDtcbiAgICAgIGlmICghaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHUmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgIFwicmVjdFwiXG4gICAgICApO1xuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGZpbGw6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KSAhaW1wb3J0YW50OyBmaWxsLW9wYWNpdHk6ICR7b3BhY2l0eX0gIWltcG9ydGFudDsgc3Ryb2tlLXdpZHRoOiAwO2BcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAvKlxuICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cblxuICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ4XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcInJ5XCIsIGAke3JvdW5kZWRDb3JuZXIgKiBzY2FsZX1gKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ4XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LmxlZnQgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJ5XCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LnRvcCAtIGJvcmRlclRoaWNrbmVzcykgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5oZWlnaHQgKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3Qud2lkdGggKyBib3JkZXJUaGlja25lc3MgKiAyKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHUmVjdCk7XG4gICAgICBpZiAoZHJhd1VuZGVybGluZSkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiByb3VuZDsgc3Ryb2tlLXdpZHRoOiAke1xuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPVxuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggPiByb3VuZGVkQ29ybmVyID8gcm91bmRlZENvcm5lciA6IDA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngxXCIsXG4gICAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArIGxpbmVPZmZzZXQpICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MlwiLFxuICAgICAgICAgIGAke1xuICAgICAgICAgICAgKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCArXG4gICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggLVxuICAgICAgICAgICAgICBsaW5lT2Zmc2V0KSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAtXG4gICAgICAgICAgICB1bmRlcmxpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGU7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGAke3l9YCk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QuaGVpZ2h0ICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3Qud2lkdGggKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnLmFwcGVuZENoaWxkKGhpZ2hsaWdodEFyZWFTVkdMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICBTVkdfWE1MX05BTUVTUEFDRSxcbiAgICAgICAgICBcImxpbmVcIlxuICAgICAgICApO1xuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgc3Ryb2tlLWxpbmVjYXA6IGJ1dHQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgICB9OyBzdHJva2U6IHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IuYmx1ZVxuICAgICAgICAgIH0pICFpbXBvcnRhbnQ7IHN0cm9rZS1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnRgXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNjYWxlID0gc2NhbGU7XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAqL1xuXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAke2hpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QubGVmdCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoKSAqXG4gICAgICAgICAgICBzY2FsZVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQgPSBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHkgPSAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICBoaWdobGlnaHRBcmVhLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgY29uc3QgcmdiID0gTWF0aC5yb3VuZCgweGZmZmZmZiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBjb25zdCByID0gcmdiID4+IDE2O1xuICAgICAgICBjb25zdCBnID0gKHJnYiA+PiA4KSAmIDI1NTtcbiAgICAgICAgY29uc3QgYiA9IHJnYiAmIDI1NTtcbiAgICAgICAgZXh0cmEgPSBgb3V0bGluZS1jb2xvcjogcmdiKCR7cn0sICR7Z30sICR7Yn0pOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgICBleHRyYSArPSBgYm9yZGVyLWJvdHRvbTogJHt1bmRlcmxpbmVUaGlja25lc3MgKiBzY2FsZX1weCBzb2xpZCByZ2JhKCR7XG4gICAgICAgICAgICBoaWdobGlnaHQuY29sb3IucmVkXG4gICAgICAgICAgfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zY2FsZSA9IHNjYWxlO1xuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgKi9cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhLnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LmhlaWdodCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUubGVmdCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QudG9wICogc2NhbGV9cHhgO1xuICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhKTtcbiAgICAgIGlmICghREVCVUdfVklTVUFMUyAmJiBkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICAvL2lmIChkcmF3U3RyaWtlVGhyb3VnaCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRBcmVhTGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9BUkVBKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUucG9zaXRpb24gPSBwYWdpbmF0ZWQgPyBcImZpeGVkXCIgOiBcImFic29sdXRlXCI7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnNjYWxlID0gc2NhbGU7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUud2lkdGggPSBgJHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LndpZHRoICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgKiBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zdHlsZS5sZWZ0ID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC5sZWZ0ICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUudG9wID0gYCR7XG4gICAgICAgICAgKGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QudG9wICtcbiAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QuaGVpZ2h0IC8gMiAtXG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAvIDIpICpcbiAgICAgICAgICBzY2FsZVxuICAgICAgICB9cHhgO1xuICAgICAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFMaW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh1c2VTVkcgJiYgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcpIHtcbiAgICBjb25zdCBoaWdobGlnaHRBcmVhU1ZHID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19YTUxfTkFNRVNQQUNFLCBcInN2Z1wiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnNldEF0dHJpYnV0ZShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLmxlZnQgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLnRvcCA9IFwiMFwiO1xuICAgIGhpZ2hsaWdodEFyZWFTVkcuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKTtcbiAgICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEFyZWFTVkcpO1xuICB9XG5cbiAgY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYGJvcmRlci1yYWRpdXM6ICR7cm91bmRlZENvcm5lcn1weCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0sICR7b3BhY2l0eX0pICFpbXBvcnRhbnQ7ICR7ZXh0cmF9YFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUEpO1xuICB9XG5cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zY2FsZSA9IHNjYWxlO1xuXG4gIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYG91dGxpbmUtY29sb3I6IG1hZ2VudGE7IG91dGxpbmUtc3R5bGU6IHNvbGlkOyBvdXRsaW5lLXdpZHRoOiAxcHg7IG91dGxpbmUtb2Zmc2V0OiAtMXB4O2BcbiAgICApO1xuICB9XG5cbiAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaGlnaGxpZ2h0Qm91bmRpbmcucmVjdCA9IHtcbiAgICAgIGhlaWdodDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICB0b3A6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICB3aWR0aDogcmFuZ2VCb3VuZGluZ0NsaWVudFJlY3Qud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLndpZHRoID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC53aWR0aCAqIHNjYWxlfXB4YDtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LmxlZnQgKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnRvcCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QudG9wICogc2NhbGV9cHhgO1xuXG4gIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICBoaWdobGlnaHRzQ29udGFpbmVyLmFwcGVuZChoaWdobGlnaHRQYXJlbnQpO1xuXG4gIHJldHVybiBoaWdobGlnaHRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGNvbnNvbGUubG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZShyYW5nZSwgZ2V0Q3NzU2VsZWN0b3IsIGNvbXB1dGVFbGVtZW50Q0ZJKSB7XG4gIGNvbnN0IHN0YXJ0SXNFbGVtZW50ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnQgPSBzdGFydElzRWxlbWVudFxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICA6IHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUgJiZcbiAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnRDb250YWluZXJFbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IHN0YXJ0SXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2RlcykuaW5kZXhPZihcbiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgICAgICk7XG4gIGlmIChzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciA9IGdldENzc1NlbGVjdG9yKFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudFxuICApO1xuICBjb25zdCBlbmRJc0VsZW1lbnQgPSByYW5nZS5lbmRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50ID0gZW5kSXNFbGVtZW50XG4gICAgPyByYW5nZS5lbmRDb250YWluZXJcbiAgICA6IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICA/IHJhbmdlLmVuZENvbnRhaW5lci5wYXJlbnROb2RlXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmICghZW5kQ29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID0gZW5kSXNFbGVtZW50XG4gICAgPyAtMVxuICAgIDogQXJyYXkuZnJvbShlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YocmFuZ2UuZW5kQ29udGFpbmVyKTtcbiAgaWYgKGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA8IC0xKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihlbmRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgY29tbW9uRWxlbWVudEFuY2VzdG9yID0gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KFxuICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICApO1xuICBpZiAoIWNvbW1vbkVsZW1lbnRBbmNlc3Rvcikge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIE5PIFJBTkdFIENPTU1PTiBBTkNFU1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB7XG4gICAgY29uc3QgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQgPVxuICAgICAgcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgID8gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXJcbiAgICAgICAgOiByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIGlmIChcbiAgICAgIHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ICYmXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREVcbiAgICApIHtcbiAgICAgIGlmIChjb21tb25FbGVtZW50QW5jZXN0b3IgIT09IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPj4+Pj4+IENPTU1PTiBBTkNFU1RPUiBDT05UQUlORVIgRElGRj8/IVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coZ2V0Q3NzU2VsZWN0b3IoY29tbW9uRWxlbWVudEFuY2VzdG9yKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJvb3RFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoY29tbW9uRWxlbWVudEFuY2VzdG9yKTtcbiAgY29uc3Qgc3RhcnRFbGVtZW50Q2ZpID0gY29tcHV0ZUVsZW1lbnRDRkkoc3RhcnRDb250YWluZXJFbGVtZW50KTtcbiAgY29uc3QgZW5kRWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGVuZENvbnRhaW5lckVsZW1lbnQpO1xuICBsZXQgY2ZpO1xuICBpZiAocm9vdEVsZW1lbnRDZmkgJiYgc3RhcnRFbGVtZW50Q2ZpICYmIGVuZEVsZW1lbnRDZmkpIHtcbiAgICBsZXQgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpO1xuICAgIGlmICghc3RhcnRJc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSArXG4gICAgICAgIFwiOlwiICtcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5zdGFydE9mZnNldCA8IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLnN0YXJ0T2Zmc2V0XTtcbiAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2Uuc3RhcnRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgIGNoaWxkTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID0gc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIF07XG4gICAgICAgIGlmIChsYXN0Q2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBzdGFydEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpO1xuICAgIGlmICghZW5kSXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgIHJhbmdlLmVuZENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICBlbmRFbGVtZW50Q2ZpICtcbiAgICAgICAgXCIvXCIgK1xuICAgICAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLmVuZE9mZnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPj0gMCAmJlxuICAgICAgICByYW5nZS5lbmRPZmZzZXQgPCBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlLmVuZE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9IGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChyYW5nZS5lbmRPZmZzZXQgKyAxKSAqIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2ZpVGV4dE5vZGVJbmRleCA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyBjZmlUZXh0Tm9kZUluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjZmlJbmRleE9mTGFzdEVsZW1lbnQgPSBlbmRDb250YWluZXJFbGVtZW50LmNoaWxkRWxlbWVudENvdW50ICogMjtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZSA9XG4gICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzW1xuICAgICAgICAgICAgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIGVuZEVsZW1lbnRDZmkgKyBcIi9cIiArIChjZmlJbmRleE9mTGFzdEVsZW1lbnQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjZmkgPVxuICAgICAgcm9vdEVsZW1lbnRDZmkgK1xuICAgICAgXCIsXCIgK1xuICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkucmVwbGFjZShyb290RWxlbWVudENmaSwgXCJcIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IHJhbmdlLmVuZE9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogcmFuZ2Uuc3RhcnRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQod2luLCBpZCkge1xuICBsZXQgY2xpZW50UmVjdHMgPSBmcmFtZUZvckhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghY2xpZW50UmVjdHMpIHJldHVybjtcblxuICB2YXIgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3RzWzBdO1xuICB2YXIgbWF4SGVpZ2h0ID0gdG9wQ2xpZW50UmVjdC5oZWlnaHQ7XG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmIChjbGllbnRSZWN0LnRvcCA8IHRvcENsaWVudFJlY3QudG9wKSB0b3BDbGllbnRSZWN0ID0gY2xpZW50UmVjdDtcbiAgICBpZiAoY2xpZW50UmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIG1heEhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG5cbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gIH1cbiAgdmFyIG5ld1RvcCA9IHRvcENsaWVudFJlY3QudG9wO1xuXG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIGRvIHtcbiAgICAgIHZhciBib3VuZGluZ0FyZWFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBXG4gICAgICApO1xuICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgICAvL2ZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBib3VuZGluZ0FyZWFzLnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBpID0gMCwgbGVuID0gYm91bmRpbmdBcmVhcy5sZW5ndGggfCAwO1xuICAgICAgICBpIDwgbGVuO1xuICAgICAgICBpID0gKGkgKyAxKSB8IDBcbiAgICAgICkge1xuICAgICAgICB2YXIgYm91bmRpbmdBcmVhID0gYm91bmRpbmdBcmVhc1tpXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJvdW5kaW5nQXJlYS5yZWN0LnRvcCAtIChuZXdUb3AgLSB5T2Zmc2V0KSkgPCAzKSB7XG4gICAgICAgICAgbmV3VG9wICs9IGJvdW5kaW5nQXJlYS5yZWN0LmhlaWdodDtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChmb3VuZCk7XG4gIH1cblxuICB0b3BDbGllbnRSZWN0LnRvcCA9IG5ld1RvcDtcbiAgdG9wQ2xpZW50UmVjdC5oZWlnaHQgPSBtYXhIZWlnaHQ7XG5cbiAgcmV0dXJuIHRvcENsaWVudFJlY3Q7XG59XG5cbmZ1bmN0aW9uIGhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBsZXQgaSA9IC0xO1xuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgcmV0dXJuIGhpZ2hsaWdodDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuXG4gIHJldHVybiBjbGllbnRSZWN0cztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZvMkxvY2F0aW9uKHJhbmdlSW5mbykge1xuICByZXR1cm4ge1xuICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgcGFydGlhbENmaTogcmFuZ2VJbmZvLmNmaSxcbiAgICBkb21SYW5nZToge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcixcbiAgICAgICAgdGV4dE5vZGVJbmRleDogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICAgIH0sXG4gICAgICBlbmQ6IHtcbiAgICAgICAgY3NzU2VsZWN0b3I6IHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgICAgIG9mZnNldDogcmFuZ2VJbmZvLmVuZE9mZnNldCxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGNmaTogbG9jYXRpb24ucGFydGlhbENmaSxcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRChpZCkge1xuICBjb25zdCBoaWdobGlnaHQgPSBoaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWhpZ2hsaWdodCkgcmV0dXJuO1xuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG4gIGNvbnN0IHJhbmdlID0gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgaGlnaGxpZ2h0LnJhbmdlSW5mbyk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZHJhd1VuZGVybGluZSA9IGZhbHNlO1xuICBjb25zdCBkcmF3U3RyaWtlVGhyb3VnaCA9IGZhbHNlO1xuICBjb25zdCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gZHJhd1VuZGVybGluZSB8fCBkcmF3U3RyaWtlVGhyb3VnaDtcbiAgLy9jb25zdCBjbGllbnRSZWN0cyA9IERFQlVHX1ZJU1VBTFMgPyByYW5nZS5nZXRDbGllbnRSZWN0cygpIDpcbiAgY29uc3QgY2xpZW50UmVjdHMgPSBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgICByYW5nZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIHZhciBzaXplID0ge1xuICAgIHNjcmVlbldpZHRoOiB3aW5kb3cub3V0ZXJXaWR0aCxcbiAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICBsZWZ0OiBjbGllbnRSZWN0c1swXS5sZWZ0LFxuICAgIHdpZHRoOiBjbGllbnRSZWN0c1swXS53aWR0aCxcbiAgICB0b3A6IGNsaWVudFJlY3RzWzBdLnRvcCxcbiAgICBoZWlnaHQ6IGNsaWVudFJlY3RzWzBdLmhlaWdodCxcbiAgfTtcblxuICByZXR1cm4gc2l6ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIGNvbnN0IGNsaWVudFJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHZhciBoYW5kbGVCb3VuZHMgPSB7XG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCxcbiAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCxcbiAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQm91bmRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNjcm9sbE1vZGUoZmxhZykge1xuICBpZiAoIWZsYWcpIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19QQUdJTkFURUQpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX1BBR0lOQVRFRCk7XG4gIH1cbn1cblxuLypcbiBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBJRSA+PSA5OyBvdGhlciBicm93c2Vyc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIC8vYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7IC8vaGVyZSB5b3UgZHJhdyB5b3VyIG93biBtZW51XG4gICAgICAgICAgICAvL2UucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vbGV0IGdldENzc1NlbGVjdG9yID0gZnVsbFF1YWxpZmllZFNlbGVjdG9yO1xuICAgICAgICAgICAgXG5cdFx0XHRsZXQgc3RyID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXHRcdFx0bGV0IHNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbygpO1xuXHRcdFx0bGV0IHBvcyA9IGNyZWF0ZUhpZ2hsaWdodChzZWxlY3Rpb25JbmZvLHtyZWQ6MTAsZ3JlZW46NTAsYmx1ZToyMzB9LHRydWUpO1xuXHRcdFx0bGV0IHJldDIgPSBjcmVhdGVBbm5vdGF0aW9uKHBvcy5pZCk7XG5cdFx0XHRcbiAgfSwgZmFsc2UpO1xuICAgIH0gZWxzZSB7IC8vIElFIDwgOVxuICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25jb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgYWxlcnQoXCJZb3UndmUgdHJpZWQgdG8gb3BlbiBjb250ZXh0IG1lbnVcIik7XG4gICAgICAgICAgICB3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuKi9cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjIgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGlzU2Nyb2xsTW9kZUVuYWJsZWQsIHBhZ2VXaWR0aCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDc3NTZWxlY3RvciB9IGZyb20gXCJjc3Mtc2VsZWN0b3ItZ2VuZXJhdG9yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcigpIHtcbiAgY29uc3QgZWxlbWVudCA9IGZpbmRFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBocmVmOiBcIiNcIixcbiAgICB0eXBlOiBcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiLFxuICAgIGxvY2F0aW9uczoge1xuICAgICAgY3NzU2VsZWN0b3I6IGdldENzc1NlbGVjdG9yKGVsZW1lbnQpLFxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgaGlnaGxpZ2h0OiBlbGVtZW50LnRleHRDb250ZW50LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRFbGVtZW50KHJvb3RFbGVtZW50KSB7XG4gIHZhciBmb3VuZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSByb290RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdEVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgY29uc3QgcG9zaXRpb24gPSBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihjaGlsZCwgdW5kZWZpbmVkKTtcbiAgICBpZiAocG9zaXRpb24gPT0gMCkge1xuICAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICBmb3VuZEVsZW1lbnQgPSBjaGlsZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgaWYgKCFmb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50KGZvdW5kRWxlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJvb3RFbGVtZW50O1xufVxuXG4vLyBTZWUgY29tcHV0ZVZpc2liaWxpdHlfKCkgaW4gcjItbmF2aWdhdG9yLWpzXG5mdW5jdGlvbiBlbGVtZW50UmVsYXRpdmVQb3NpdGlvbihlbGVtZW50LCBkb21SZWN0IC8qIG51bGxhYmxlICovKSB7XG4gIGlmIChyZWFkaXVtLmlzRml4ZWRMYXlvdXQpIHJldHVybiB0cnVlO1xuXG4gIGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5IHx8IGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgIWRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHJlY3QgPSBkb21SZWN0IHx8IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgaWYgKGlzU2Nyb2xsTW9kZUVuYWJsZWQoKSkge1xuICAgIHJldHVybiByZWN0LnRvcCA+PSAwICYmIHJlY3QudG9wIDw9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJlY3QubGVmdCA+PSBwYWdlV2lkdGgpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAocmVjdC5sZWZ0ID49IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZElnbm9yZUVsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCBlbFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgaWYgKGVsU3R5bGUpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVwiKTtcbiAgICBpZiAoZGlzcGxheSA9PT0gXCJub25lXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDYW5ub3QgYmUgcmVsaWVkIHVwb24sIGJlY2F1c2Ugd2ViIGJyb3dzZXIgZW5naW5lIHJlcG9ydHMgaW52aXNpYmxlIHdoZW4gb3V0IG9mIHZpZXcgaW5cbiAgICAvLyBzY3JvbGxlZCBjb2x1bW5zIVxuICAgIC8vIGNvbnN0IHZpc2liaWxpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpO1xuICAgIC8vIGlmICh2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiKSB7XG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyB9XG4gICAgY29uc3Qgb3BhY2l0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm9wYWNpdHlcIik7XG4gICAgaWYgKG9wYWNpdHkgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBsb2dFcnJvciB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyB0b05hdGl2ZVJlY3QgfSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBUZXh0UmFuZ2UgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZVwiO1xuXG4vLyBQb2x5ZmlsbCBmb3IgQW5kcm9pZCBBUEkgMjZcbmltcG9ydCBtYXRjaEFsbCBmcm9tIFwic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbFwiO1xubWF0Y2hBbGwuc2hpbSgpO1xuXG5jb25zdCBkZWJ1ZyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICBjb25zdCB0ZXh0ID0gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGdldFNlbGVjdGlvblJlY3QoKTtcbiAgcmV0dXJuIHsgdGV4dCwgcmVjdCB9O1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIGxldCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICByZXR1cm4gdG9OYXRpdmVSZWN0KHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZ0Vycm9yKGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmICghc2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBoaWdobGlnaHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5IaWdobGlnaHQgPSBoaWdobGlnaHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxzXFxzKy9nLCBcIiBcIik7XG4gIGlmIChjbGVhbkhpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICghc2VsZWN0aW9uLmFuY2hvck5vZGUgfHwgIXNlbGVjdGlvbi5mb2N1c05vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlID1cbiAgICBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMVxuICAgICAgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKVxuICAgICAgOiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgICAgICApO1xuICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQ7XG4gIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8oZG9jdW1lbnQuYm9keSk7XG4gIGNvbnN0IHN0YXJ0ID0gdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDtcbiAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgY29uc3Qgc25pcHBldExlbmd0aCA9IDIwMDtcblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGJlZm9yZSB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgZmlyc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGJlZm9yZSA9IHRleHQuc2xpY2UoTWF0aC5tYXgoMCwgc3RhcnQgLSBzbmlwcGV0TGVuZ3RoKSwgc3RhcnQpO1xuICBsZXQgZmlyc3RXb3JkU3RhcnQgPSBiZWZvcmUuc2VhcmNoKC9cXFB7TH1cXHB7TH0vZ3UpO1xuICBpZiAoZmlyc3RXb3JkU3RhcnQgIT09IC0xKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlLnNsaWNlKGZpcnN0V29yZFN0YXJ0ICsgMSk7XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSB0ZXh0IGFmdGVyIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBsYXN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBhZnRlciA9IHRleHQuc2xpY2UoZW5kLCBNYXRoLm1pbih0ZXh0Lmxlbmd0aCwgZW5kICsgc25pcHBldExlbmd0aCkpO1xuICBsZXQgbGFzdFdvcmRFbmQgPSBBcnJheS5mcm9tKGFmdGVyLm1hdGNoQWxsKC9cXHB7TH1cXFB7TH0vZ3UpKS5wb3AoKTtcbiAgaWYgKGxhc3RXb3JkRW5kICE9PSB1bmRlZmluZWQgJiYgbGFzdFdvcmRFbmQuaW5kZXggPiAxKSB7XG4gICAgYWZ0ZXIgPSBhZnRlci5zbGljZSgwLCBsYXN0V29yZEVuZC5pbmRleCArIDEpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGlnaGxpZ2h0LCBiZWZvcmUsIGFmdGVyIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9yZGVyZWRSYW5nZShzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmROb2RlLCBlbmRPZmZzZXQpIHtcbiAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIHJhbmdlLnNldEVuZChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIE9LLlwiKTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBSQU5HRSBSRVZFUlNFIEFMU08gQ09MTEFQU0VEPyFcIik7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBTVEFSVCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHN0YXJ0Q29udGFpbmVyID0gc3RhcnRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3RhcnRDb250YWluZXIgPVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gRU5EIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgZW5kQ29udGFpbmVyID0gZW5kRWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICkge1xuICAgICAgbG9nKFxuICAgICAgICBcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHJhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gZW5kRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbmRDb250YWluZXIgPVxuICAgICAgZW5kRWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBlbmRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb24yUmFuZ2VJbmZvKGxvY2F0aW9uKSB7XG4gIGNvbnN0IGxvY2F0aW9ucyA9IGxvY2F0aW9uLmxvY2F0aW9ucztcbiAgY29uc3QgZG9tUmFuZ2UgPSBsb2NhdGlvbnMuZG9tUmFuZ2U7XG4gIGNvbnN0IHN0YXJ0ID0gZG9tUmFuZ2Uuc3RhcnQ7XG4gIGNvbnN0IGVuZCA9IGRvbVJhbmdlLmVuZDtcblxuICByZXR1cm4ge1xuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogZW5kLnRleHROb2RlSW5kZXgsXG4gICAgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBlbmQuY3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiBlbmQub2Zmc2V0LFxuICAgIHN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBzdGFydC50ZXh0Tm9kZUluZGV4LFxuICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yOiBzdGFydC5jc3NTZWxlY3RvcixcbiAgICBzdGFydE9mZnNldDogc3RhcnQub2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGxvZ05hdGl2ZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBCYXNlIHNjcmlwdCB1c2VkIGJ5IGJvdGggcmVmbG93YWJsZSBhbmQgZml4ZWQgbGF5b3V0IHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9nZXN0dXJlc1wiO1xuaW1wb3J0IHtcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb0VuZCxcbiAgc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9UZXh0LFxuICBzZXRQcm9wZXJ0eSxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUFubm90YXRpb24sXG4gIGNyZWF0ZUhpZ2hsaWdodCxcbiAgZGVzdHJveUhpZ2hsaWdodCxcbiAgZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8sXG4gIGdldFNlbGVjdGlvblJlY3QsXG4gIHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCxcbiAgc2V0U2Nyb2xsTW9kZSxcbn0gZnJvbSBcIi4vaGlnaGxpZ2h0XCI7XG5pbXBvcnQgeyBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvciB9IGZyb20gXCIuL2RvbVwiO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFNlbGVjdGlvbiB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuaW1wb3J0IHsgZ2V0RGVjb3JhdGlvbnMsIHJlZ2lzdGVyVGVtcGxhdGVzIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5cbi8vIFB1YmxpYyBBUEkgdXNlZCBieSB0aGUgbmF2aWdhdG9yLlxud2luZG93LnJlYWRpdW0gPSB7XG4gIC8vIHV0aWxzXG4gIHNjcm9sbFRvSWQ6IHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb246IHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvVGV4dDogc2Nyb2xsVG9UZXh0LFxuICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodDogc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvU3RhcnQ6IHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvRW5kOiBzY3JvbGxUb0VuZCxcbiAgc2V0UHJvcGVydHk6IHNldFByb3BlcnR5LFxuICByZW1vdmVQcm9wZXJ0eTogcmVtb3ZlUHJvcGVydHksXG5cbiAgLy8gc2VsZWN0aW9uXG4gIGdldEN1cnJlbnRTZWxlY3Rpb246IGdldEN1cnJlbnRTZWxlY3Rpb24sXG5cbiAgLy8gZGVjb3JhdGlvblxuICByZWdpc3RlckRlY29yYXRpb25UZW1wbGF0ZXM6IHJlZ2lzdGVyVGVtcGxhdGVzLFxuICBnZXREZWNvcmF0aW9uczogZ2V0RGVjb3JhdGlvbnMsXG5cbiAgLy8gRE9NXG4gIGZpbmRGaXJzdFZpc2libGVMb2NhdG9yOiBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcixcbn07XG5cbi8vIExlZ2FjeSBoaWdobGlnaHRzIEFQSS5cbndpbmRvdy5jcmVhdGVBbm5vdGF0aW9uID0gY3JlYXRlQW5ub3RhdGlvbjtcbndpbmRvdy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG53aW5kb3cuZGVzdHJveUhpZ2hsaWdodCA9IGRlc3Ryb3lIaWdobGlnaHQ7XG53aW5kb3cuZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8gPSBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbztcbndpbmRvdy5nZXRTZWxlY3Rpb25SZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdDtcbndpbmRvdy5yZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQgPSByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQ7XG53aW5kb3cuc2V0U2Nyb2xsTW9kZSA9IHNldFNjcm9sbE1vZGU7XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG4vLyBTY3JpcHQgdXNlZCBmb3IgZml4ZWQgbGF5b3V0cyByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vaW5kZXhcIjtcblxud2luZG93LnJlYWRpdW0uaXNGaXhlZExheW91dCA9IHRydWU7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwibG9jYXRpb25zIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiYmluZERyYWdHZXN0dXJlIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJvblN0YXJ0IiwicGFzc2l2ZSIsIm9uRW5kIiwib25Nb3ZlIiwic3RhdGUiLCJpc1N0YXJ0aW5nRHJhZyIsInN0YXJ0WCIsInRvdWNoZXMiLCJzdGFydFkiLCJjdXJyZW50WCIsImN1cnJlbnRZIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IiLCJmaW5kRWxlbWVudCIsImhyZWYiLCJyb290RWxlbWVudCIsImVsZW1lbnRSZWxhdGl2ZVBvc2l0aW9uIiwic2hvdWxkSWdub3JlRWxlbWVudCIsImRvbVJlY3QiLCJyZWFkaXVtIiwiZWxTdHlsZSIsImRpc3BsYXkiLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6396\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(6396)})(); \ No newline at end of file diff --git a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js index fd425f7f34..d18a94ff31 100644 --- a/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js +++ b/readium/navigator/src/main/assets/readium/scripts/readium-reflowable.js @@ -1 +1 @@ -(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n return scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n\n return true;\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n bindDragGesture(document);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n\nfunction bindDragGesture(element) {\n // passive: false is necessary to be able to prevent the default behavior.\n element.addEventListener("touchstart", onStart, {\n passive: false\n });\n element.addEventListener("touchend", onEnd, {\n passive: false\n });\n element.addEventListener("touchmove", onMove, {\n passive: false\n });\n var state = undefined;\n var isStartingDrag = false;\n var pixelRatio = window.devicePixelRatio;\n\n function onStart(event) {\n isStartingDrag = true;\n var startX = event.touches[0].clientX * pixelRatio;\n var startY = event.touches[0].clientY * pixelRatio;\n state = {\n defaultPrevented: event.defaultPrevented,\n startX: startX,\n startY: startY,\n currentX: startX,\n currentY: startY,\n offsetX: 0,\n offsetY: 0,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n }\n\n function onMove(event) {\n if (!state) return;\n state.currentX = event.touches[0].clientX * pixelRatio;\n state.currentY = event.touches[0].clientY * pixelRatio;\n state.offsetX = state.currentX - state.startX;\n state.offsetY = state.currentY - state.startY;\n var shouldPreventDefault = false; // Wait for a movement of at least 6 pixels before reporting a drag.\n\n if (isStartingDrag) {\n if (Math.abs(state.offsetX) >= 6 || Math.abs(state.offsetY) >= 6) {\n isStartingDrag = false;\n shouldPreventDefault = Android.onDragStart(JSON.stringify(state));\n }\n } else {\n shouldPreventDefault = Android.onDragMove(JSON.stringify(state));\n }\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n function onEnd(event) {\n if (!state) return;\n var shouldPreventDefault = Android.onDragEnd(JSON.stringify(state));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n state = undefined;\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n var scrollElement = document.scrollingElement;\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFNLENBQUNxWSxnQkFBUCxHQUEwQkEsZ0JBQTFCO0FBQ0FyWSxNQUFNLENBQUM0Wix1QkFBUCxHQUFpQ0EsdUJBQWpDO0FBQ0E1WixNQUFNLENBQUM0akIsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBNWpCLE1BQU0sQ0FBQzJqQiwyQkFBUCxHQUFxQ0EsMkJBQXJDO0FBQ0EzakIsTUFBTSxDQUFDK2pCLGFBQVAsR0FBdUJBLGFBQXZCLEM7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUEvakIsTUFBTSxDQUFDd2tCLE9BQVAsQ0FBZWEsWUFBZixHQUE4QixJQUE5QjtBQUVBNW5CLFFBQVEsQ0FBQ3dDLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxZQUFZO0FBQ3hEO0FBQ0EsTUFBSXFsQixJQUFJLEdBQUc3bkIsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixNQUF2QixDQUFYO0FBQ0EwakIsRUFBQUEsSUFBSSxDQUFDempCLFlBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsVUFBMUI7QUFDQXlqQixFQUFBQSxJQUFJLENBQUN6akIsWUFBTCxDQUNFLFNBREYsRUFFRSw4RkFGRjtBQUlBcEUsRUFBQUEsUUFBUSxDQUFDOG5CLElBQVQsQ0FBY3RqQixXQUFkLENBQTBCcWpCLElBQTFCO0FBQ0QsQ0FURCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LXJlZmxvd2FibGUuanM/MzkyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JUTCgpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuZGlyLnRvTG93ZXJDYXNlKCkgPT0gXCJydGxcIjtcbn1cblxuLy8gU2Nyb2xsIHRvIHRoZSBnaXZlbiBUYWdJZCBpbiBkb2N1bWVudCBhbmQgc25hcC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0lkKGlkKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVG9SZWN0KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG4vLyBQb3NpdGlvbiBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCAtIDFdLCAwLTEwMCUuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbikge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1Bvc2l0aW9uIFwiICsgcG9zaXRpb24pO1xuICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gMSkge1xuICAgIHRocm93IFwic2Nyb2xsVG9Qb3NpdGlvbigpIG11c3QgYmUgZ2l2ZW4gYSBwb3NpdGlvbiBmcm9tIDAuMCB0byAgMS4wXCI7XG4gIH1cblxuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxIZWlnaHQgKiBwb3NpdGlvbjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcbiAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnRXaWR0aCAqIHBvc2l0aW9uICogZmFjdG9yO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgfVxufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiB0ZXh0IHNuaXBwZXQuXG4vL1xuLy8gVGhlIGV4cGVjdGVkIHRleHQgYXJndW1lbnQgaXMgYSBMb2NhdG9yIFRleHQgb2JqZWN0LCBhcyBkZWZpbmVkIGhlcmU6XG4vLyBodHRwczovL3JlYWRpdW0ub3JnL2FyY2hpdGVjdHVyZS9tb2RlbHMvbG9jYXRvcnMvXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9UZXh0KHRleHQpIHtcbiAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcih7IHRleHQgfSk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2Nyb2xsVG9SYW5nZShyYW5nZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JhbmdlKHJhbmdlKSB7XG4gIHJldHVybiBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xuICBiaW5kRHJhZ0dlc3R1cmUoZG9jdW1lbnQpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZERyYWdHZXN0dXJlKGVsZW1lbnQpIHtcbiAgLy8gcGFzc2l2ZTogZmFsc2UgaXMgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCBvblN0YXJ0LCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBvbkVuZCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIG9uTW92ZSwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcblxuICB2YXIgc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHZhciBpc1N0YXJ0aW5nRHJhZyA9IGZhbHNlO1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG5cbiAgZnVuY3Rpb24gb25TdGFydChldmVudCkge1xuICAgIGlzU3RhcnRpbmdEcmFnID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAqIHBpeGVsUmF0aW87XG4gICAgY29uc3Qgc3RhcnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZICogcGl4ZWxSYXRpbztcbiAgICBzdGF0ZSA9IHtcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgICBzdGFydFg6IHN0YXJ0WCxcbiAgICAgIHN0YXJ0WTogc3RhcnRZLFxuICAgICAgY3VycmVudFg6IHN0YXJ0WCxcbiAgICAgIGN1cnJlbnRZOiBzdGFydFksXG4gICAgICBvZmZzZXRYOiAwLFxuICAgICAgb2Zmc2V0WTogMCxcbiAgICAgIGludGVyYWN0aXZlRWxlbWVudDogbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChldmVudC50YXJnZXQpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBvbk1vdmUoZXZlbnQpIHtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG5cbiAgICBzdGF0ZS5jdXJyZW50WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAqIHBpeGVsUmF0aW87XG4gICAgc3RhdGUuY3VycmVudFkgPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFkgKiBwaXhlbFJhdGlvO1xuICAgIHN0YXRlLm9mZnNldFggPSBzdGF0ZS5jdXJyZW50WCAtIHN0YXRlLnN0YXJ0WDtcbiAgICBzdGF0ZS5vZmZzZXRZID0gc3RhdGUuY3VycmVudFkgLSBzdGF0ZS5zdGFydFk7XG5cbiAgICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAvLyBXYWl0IGZvciBhIG1vdmVtZW50IG9mIGF0IGxlYXN0IDYgcGl4ZWxzIGJlZm9yZSByZXBvcnRpbmcgYSBkcmFnLlxuICAgIGlmIChpc1N0YXJ0aW5nRHJhZykge1xuICAgICAgaWYgKE1hdGguYWJzKHN0YXRlLm9mZnNldFgpID49IDYgfHwgTWF0aC5hYnMoc3RhdGUub2Zmc2V0WSkgPj0gNikge1xuICAgICAgICBpc1N0YXJ0aW5nRHJhZyA9IGZhbHNlO1xuICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25EcmFnU3RhcnQoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uRHJhZ01vdmUoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkVuZChldmVudCkge1xuICAgIGlmICghc3RhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vbkRyYWdFbmQoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgc3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBsb2cgYXMgbG9nTmF0aXZlLCBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Q3NzU2VsZWN0b3IgfSBmcm9tIFwiY3NzLXNlbGVjdG9yLWdlbmVyYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IoKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaHJlZjogXCIjXCIsXG4gICAgdHlwZTogXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIixcbiAgICBsb2NhdGlvbnM6IHtcbiAgICAgIGNzc1NlbGVjdG9yOiBnZXRDc3NTZWxlY3RvcihlbGVtZW50KSxcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogZWxlbWVudC50ZXh0Q29udGVudCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kRWxlbWVudChyb290RWxlbWVudCkge1xuICB2YXIgZm91bmRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZWxlbWVudFJlbGF0aXZlUG9zaXRpb24oY2hpbGQsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHBvc2l0aW9uID09IDApIHtcbiAgICAgIGlmICghc2hvdWxkSWdub3JlRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICAgIGlmICghZm91bmRFbGVtZW50KSB7XG4gICAgICAgIGZvdW5kRWxlbWVudCA9IGNoaWxkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudCkge1xuICAgIHJldHVybiBmaW5kRWxlbWVudChmb3VuZEVsZW1lbnQpO1xuICB9XG4gIHJldHVybiByb290RWxlbWVudDtcbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gZWxlbWVudFJlbGF0aXZlUG9zaXRpb24oZWxlbWVudCwgZG9tUmVjdCAvKiBudWxsYWJsZSAqLykge1xuICBpZiAocmVhZGl1bS5pc0ZpeGVkTGF5b3V0KSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8ICFkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCByZWN0ID0gZG9tUmVjdCB8fCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocmVjdC5sZWZ0ID49IHBhZ2VXaWR0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChyZWN0LmxlZnQgPj0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSWdub3JlRWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGVsU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoZWxTdHlsZSkge1xuICAgIGNvbnN0IGRpc3BsYXkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO1xuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIENhbm5vdCBiZSByZWxpZWQgdXBvbiwgYmVjYXVzZSB3ZWIgYnJvd3NlciBlbmdpbmUgcmVwb3J0cyBpbnZpc2libGUgd2hlbiBvdXQgb2YgdmlldyBpblxuICAgIC8vIHNjcm9sbGVkIGNvbHVtbnMhXG4gICAgLy8gY29uc3QgdmlzaWJpbGl0eSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2liaWxpdHlcIik7XG4gICAgLy8gaWYgKHZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIpIHtcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIH1cbiAgICBjb25zdCBvcGFjaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3BhY2l0eVwiKTtcbiAgICBpZiAob3BhY2l0eSA9PT0gXCIwXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7IGxvZyBhcyBsb2dOYXRpdmUsIGxvZ0Vycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IHRvTmF0aXZlUmVjdCB9IGZyb20gXCIuL3JlY3RcIjtcbmltcG9ydCB7IFRleHRSYW5nZSB9IGZyb20gXCIuL3ZlbmRvci9oeXBvdGhlc2lzL2FuY2hvcmluZy90ZXh0LXJhbmdlXCI7XG5cbi8vIFBvbHlmaWxsIGZvciBBbmRyb2lkIEFQSSAyNlxuaW1wb3J0IG1hdGNoQWxsIGZyb20gXCJzdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsXCI7XG5tYXRjaEFsbC5zaGltKCk7XG5cbmNvbnN0IGRlYnVnID0gdHJ1ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRTZWxlY3Rpb24oKSB7XG4gIGNvbnN0IHRleHQgPSBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWN0ID0gZ2V0U2VsZWN0aW9uUmVjdCgpO1xuICByZXR1cm4geyB0ZXh0LCByZWN0IH07XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvblJlY3QoKSB7XG4gIHRyeSB7XG4gICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcblxuICAgIHJldHVybiB0b05hdGl2ZVJlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nRXJyb3IoZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvblRleHQoKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICBjb25zdCBjbGVhbkhpZ2hsaWdodCA9IGhpZ2hsaWdodFxuICAgIC50cmltKClcbiAgICAucmVwbGFjZSgvXFxuL2csIFwiIFwiKVxuICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuSGlnaGxpZ2h0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFzZWxlY3Rpb24uYW5jaG9yTm9kZSB8fCAhc2VsZWN0aW9uLmZvY3VzTm9kZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmFuZ2UgPVxuICAgIHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxXG4gICAgICA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApXG4gICAgICA6IGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICk7XG4gIGlmICghcmFuZ2UgfHwgcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgbG9nKFwiJCQkJCQkJCQkJCQkJCQkJCQgQ0FOTk9UIEdFVCBOT04tQ09MTEFQU0VEIFNFTEVDVElPTiBSQU5HRT8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCB0ZXh0ID0gZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudDtcbiAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShyYW5nZSkucmVsYXRpdmVUbyhkb2N1bWVudC5ib2R5KTtcbiAgY29uc3Qgc3RhcnQgPSB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0O1xuICBjb25zdCBlbmQgPSB0ZXh0UmFuZ2UuZW5kLm9mZnNldDtcblxuICBjb25zdCBzbmlwcGV0TGVuZ3RoID0gMjAwO1xuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYmVmb3JlIHRoZSBoaWdobGlnaHQsIGlnbm9yaW5nIHRoZSBmaXJzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYmVmb3JlID0gdGV4dC5zbGljZShNYXRoLm1heCgwLCBzdGFydCAtIHNuaXBwZXRMZW5ndGgpLCBzdGFydCk7XG4gIGxldCBmaXJzdFdvcmRTdGFydCA9IGJlZm9yZS5zZWFyY2goL1xcUHtMfVxccHtMfS9ndSk7XG4gIGlmIChmaXJzdFdvcmRTdGFydCAhPT0gLTEpIHtcbiAgICBiZWZvcmUgPSBiZWZvcmUuc2xpY2UoZmlyc3RXb3JkU3RhcnQgKyAxKTtcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHRleHQgYWZ0ZXIgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGxhc3QgXCJ3b3JkXCIsIHdoaWNoIG1pZ2h0IGJlIGN1dC5cbiAgbGV0IGFmdGVyID0gdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBzbmlwcGV0TGVuZ3RoKSk7XG4gIGxldCBsYXN0V29yZEVuZCA9IEFycmF5LmZyb20oYWZ0ZXIubWF0Y2hBbGwoL1xccHtMfVxcUHtMfS9ndSkpLnBvcCgpO1xuICBpZiAobGFzdFdvcmRFbmQgIT09IHVuZGVmaW5lZCAmJiBsYXN0V29yZEVuZC5pbmRleCA+IDEpIHtcbiAgICBhZnRlciA9IGFmdGVyLnNsaWNlKDAsIGxhc3RXb3JkRW5kLmluZGV4ICsgMSk7XG4gIH1cblxuICByZXR1cm4geyBoaWdobGlnaHQsIGJlZm9yZSwgYWZ0ZXIgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3JkZXJlZFJhbmdlKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE5vZGUsIGVuZE9mZnNldCkge1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZS5zZXRTdGFydChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgcmFuZ2Uuc2V0RW5kKGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgQ09MTEFQU0VEIC4uLiBSQU5HRSBSRVZFUlNFP1wiKTtcbiAgY29uc3QgcmFuZ2VSZXZlcnNlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRTdGFydChlbmROb2RlLCBlbmRPZmZzZXQpO1xuICByYW5nZVJldmVyc2Uuc2V0RW5kKHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICBpZiAoIXJhbmdlUmV2ZXJzZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBsb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgQUxTTyBDT0xMQVBTRUQ/IVwiKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIHJhbmdlSW5mbykge1xuICBjb25zdCBzdGFydEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIXN0YXJ0RWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aD8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdGFydENvbnRhaW5lciA9XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhdO1xuICAgIGlmIChzdGFydENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5kRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvclxuICApO1xuICBpZiAoIWVuZEVsZW1lbnQpIHtcbiAgICBsb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVuZENvbnRhaW5lciA9XG4gICAgICBlbmRFbGVtZW50LmNoaWxkTm9kZXNbcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIGVuZENvbnRhaW5lci5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREU/IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVPcmRlcmVkUmFuZ2UoXG4gICAgc3RhcnRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0LFxuICAgIGVuZENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uZW5kT2Zmc2V0XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbjJSYW5nZUluZm8obG9jYXRpb24pIHtcbiAgY29uc3QgbG9jYXRpb25zID0gbG9jYXRpb24ubG9jYXRpb25zO1xuICBjb25zdCBkb21SYW5nZSA9IGxvY2F0aW9ucy5kb21SYW5nZTtcbiAgY29uc3Qgc3RhcnQgPSBkb21SYW5nZS5zdGFydDtcbiAgY29uc3QgZW5kID0gZG9tUmFuZ2UuZW5kO1xuXG4gIHJldHVybiB7XG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIEJhc2Ugc2NyaXB0IHVzZWQgYnkgYm90aCByZWZsb3dhYmxlIGFuZCBmaXhlZCBsYXlvdXQgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2dlc3R1cmVzXCI7XG5pbXBvcnQge1xuICByZW1vdmVQcm9wZXJ0eSxcbiAgc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQsXG4gIHNjcm9sbFRvRW5kLFxuICBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb1RleHQsXG4gIHNldFByb3BlcnR5LFxufSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5ub3RhdGlvbixcbiAgY3JlYXRlSGlnaGxpZ2h0LFxuICBkZXN0cm95SGlnaGxpZ2h0LFxuICBnZXRDdXJyZW50U2VsZWN0aW9uSW5mbyxcbiAgZ2V0U2VsZWN0aW9uUmVjdCxcbiAgcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElELFxuICBzZXRTY3JvbGxNb2RlLFxufSBmcm9tIFwiLi9oaWdobGlnaHRcIjtcbmltcG9ydCB7IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yIH0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2VsZWN0aW9uIH0gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBnZXREZWNvcmF0aW9ucywgcmVnaXN0ZXJUZW1wbGF0ZXMgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcblxuLy8gUHVibGljIEFQSSB1c2VkIGJ5IHRoZSBuYXZpZ2F0b3IuXG53aW5kb3cucmVhZGl1bSA9IHtcbiAgLy8gdXRpbHNcbiAgc2Nyb2xsVG9JZDogc2Nyb2xsVG9JZCxcbiAgc2Nyb2xsVG9Qb3NpdGlvbjogc2Nyb2xsVG9Qb3NpdGlvbixcbiAgc2Nyb2xsVG9UZXh0OiBzY3JvbGxUb1RleHQsXG4gIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gIHNjcm9sbFJpZ2h0OiBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9TdGFydDogc2Nyb2xsVG9TdGFydCxcbiAgc2Nyb2xsVG9FbmQ6IHNjcm9sbFRvRW5kLFxuICBzZXRQcm9wZXJ0eTogc2V0UHJvcGVydHksXG4gIHJlbW92ZVByb3BlcnR5OiByZW1vdmVQcm9wZXJ0eSxcblxuICAvLyBzZWxlY3Rpb25cbiAgZ2V0Q3VycmVudFNlbGVjdGlvbjogZ2V0Q3VycmVudFNlbGVjdGlvbixcblxuICAvLyBkZWNvcmF0aW9uXG4gIHJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlczogcmVnaXN0ZXJUZW1wbGF0ZXMsXG4gIGdldERlY29yYXRpb25zOiBnZXREZWNvcmF0aW9ucyxcblxuICAvLyBET01cbiAgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3I6IGZpbmRGaXJzdFZpc2libGVMb2NhdG9yLFxufTtcblxuLy8gTGVnYWN5IGhpZ2hsaWdodHMgQVBJLlxud2luZG93LmNyZWF0ZUFubm90YXRpb24gPSBjcmVhdGVBbm5vdGF0aW9uO1xud2luZG93LmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbndpbmRvdy5kZXN0cm95SGlnaGxpZ2h0ID0gZGVzdHJveUhpZ2hsaWdodDtcbndpbmRvdy5nZXRDdXJyZW50U2VsZWN0aW9uSW5mbyA9IGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvO1xud2luZG93LmdldFNlbGVjdGlvblJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0O1xud2luZG93LnJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCA9IHJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRDtcbndpbmRvdy5zZXRTY3JvbGxNb2RlID0gc2V0U2Nyb2xsTW9kZTtcbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbi8vIFNjcmlwdCB1c2VkIGZvciByZWZsb3dhYmxlIHJlc291cmNlcy5cblxuaW1wb3J0IFwiLi9pbmRleFwiO1xuXG53aW5kb3cucmVhZGl1bS5pc1JlZmxvd2FibGUgPSB0cnVlO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gIC8vIFNldHVwcyB0aGUgYHZpZXdwb3J0YCBtZXRhIHRhZyB0byBkaXNhYmxlIHpvb21pbmcuXG4gIGxldCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpO1xuICBtZXRhLnNldEF0dHJpYnV0ZShcbiAgICBcImNvbnRlbnRcIixcbiAgICBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPW5vLCBzaHJpbmstdG8tZml0PW5vXCJcbiAgKTtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChtZXRhKTtcbn0pO1xuIl0sIm5hbWVzIjpbImFwcHJveFNlYXJjaCIsInNlYXJjaCIsInRleHQiLCJzdHIiLCJtYXhFcnJvcnMiLCJtYXRjaFBvcyIsImV4YWN0TWF0Y2hlcyIsImluZGV4T2YiLCJwdXNoIiwic3RhcnQiLCJlbmQiLCJsZW5ndGgiLCJlcnJvcnMiLCJ0ZXh0TWF0Y2hTY29yZSIsIm1hdGNoZXMiLCJtYXRjaFF1b3RlIiwicXVvdGUiLCJjb250ZXh0IiwiTWF0aCIsIm1pbiIsInNjb3JlTWF0Y2giLCJtYXRjaCIsInF1b3RlV2VpZ2h0IiwicHJlZml4V2VpZ2h0Iiwic3VmZml4V2VpZ2h0IiwicG9zV2VpZ2h0IiwicXVvdGVTY29yZSIsInByZWZpeFNjb3JlIiwicHJlZml4Iiwic2xpY2UiLCJtYXgiLCJzdWZmaXhTY29yZSIsInN1ZmZpeCIsInBvc1Njb3JlIiwiaGludCIsIm9mZnNldCIsImFicyIsInJhd1Njb3JlIiwibWF4U2NvcmUiLCJub3JtYWxpemVkU2NvcmUiLCJzY29yZWRNYXRjaGVzIiwibWFwIiwibSIsInNjb3JlIiwic29ydCIsImEiLCJiIiwibm9kZVRleHRMZW5ndGgiLCJub2RlIiwibm9kZVR5cGUiLCJOb2RlIiwiRUxFTUVOVF9OT0RFIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmdzVGV4dExlbmd0aCIsInNpYmxpbmciLCJwcmV2aW91c1NpYmxpbmciLCJyZXNvbHZlT2Zmc2V0cyIsImVsZW1lbnQiLCJvZmZzZXRzIiwibmV4dE9mZnNldCIsInNoaWZ0Iiwibm9kZUl0ZXIiLCJvd25lckRvY3VtZW50IiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInJlc3VsdHMiLCJjdXJyZW50Tm9kZSIsIm5leHROb2RlIiwidGV4dE5vZGUiLCJ1bmRlZmluZWQiLCJkYXRhIiwiUmFuZ2VFcnJvciIsIlJFU09MVkVfRk9SV0FSRFMiLCJSRVNPTFZFX0JBQ0tXQVJEUyIsIlRleHRQb3NpdGlvbiIsIkVycm9yIiwicGFyZW50IiwiY29udGFpbnMiLCJlbCIsInBhcmVudEVsZW1lbnQiLCJvcHRpb25zIiwiZXJyIiwiZGlyZWN0aW9uIiwidHciLCJkb2N1bWVudCIsImNyZWF0ZVRyZWVXYWxrZXIiLCJnZXRSb290Tm9kZSIsImZvcndhcmRzIiwicHJldmlvdXNOb2RlIiwiZnJvbVBvaW50IiwidGV4dE9mZnNldCIsImNoaWxkTm9kZXMiLCJpIiwiVGV4dFJhbmdlIiwicmVsYXRpdmVUbyIsInJlc29sdmUiLCJyYW5nZSIsIlJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJzdGFydENvbnRhaW5lciIsInN0YXJ0T2Zmc2V0IiwiZW5kQ29udGFpbmVyIiwiZW5kT2Zmc2V0Iiwicm9vdCIsIm5vZGVGcm9tWFBhdGgiLCJ4cGF0aEZyb21Ob2RlIiwiUmFuZ2VBbmNob3IiLCJub3JtYWxpemVkUmFuZ2UiLCJmcm9tUmFuZ2UiLCJ0b1JhbmdlIiwidGV4dFJhbmdlIiwidHlwZSIsInNlbGVjdG9yIiwic3RhcnRQb3MiLCJmcm9tQ2hhck9mZnNldCIsImVuZFBvcyIsIlRleHRQb3NpdGlvbkFuY2hvciIsImZyb21PZmZzZXRzIiwiVGV4dFF1b3RlQW5jaG9yIiwiZXhhY3QiLCJ0b1Bvc2l0aW9uQW5jaG9yIiwiY29udGV4dExlbiIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIkFuZHJvaWQiLCJsb2dFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImxpbmVubyIsIm9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJhcHBlbmRWaXJ0dWFsQ29sdW1uSWZOZWVkZWQiLCJvYnNlcnZlIiwiYm9keSIsIm9uVmlld3BvcnRXaWR0aENoYW5nZWQiLCJzbmFwQ3VycmVudE9mZnNldCIsImlkIiwidmlydHVhbENvbCIsImdldEVsZW1lbnRCeUlkIiwiaXNTY3JvbGxNb2RlRW5hYmxlZCIsImdldENvbHVtbkNvdW50UGVyU2NyZWVuIiwicmVtb3ZlIiwiZG9jdW1lbnRXaWR0aCIsInNjcm9sbGluZ0VsZW1lbnQiLCJzY3JvbGxXaWR0aCIsImNvbENvdW50IiwicGFnZVdpZHRoIiwiaGFzT2RkQ29sQ291bnQiLCJyb3VuZCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJzdHlsZSIsImJyZWFrQmVmb3JlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJ3aWR0aCIsImdldFZpZXdwb3J0V2lkdGgiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2V0UHJvcGVydHkiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidG9TdHJpbmciLCJ0cmltIiwiaXNSVEwiLCJkaXIiLCJ0b0xvd2VyQ2FzZSIsInNjcm9sbFRvSWQiLCJzY3JvbGxUb1JlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxUb1Bvc2l0aW9uIiwicG9zaXRpb24iLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJmYWN0b3IiLCJzY3JvbGxMZWZ0Iiwic25hcE9mZnNldCIsInNjcm9sbFRvVGV4dCIsInJhbmdlRnJvbUxvY2F0b3IiLCJzY3JvbGxUb1JhbmdlIiwicmVjdCIsInRvcCIsInNjcm9sbFkiLCJpbm5lckhlaWdodCIsImxlZnQiLCJzY3JvbGxYIiwic2Nyb2xsVG9TdGFydCIsInNjcm9sbFRvIiwic2Nyb2xsVG9FbmQiLCJtaW5PZmZzZXQiLCJzY3JvbGxUb09mZnNldCIsInNjcm9sbFJpZ2h0IiwibWF4T2Zmc2V0IiwiY3VycmVudE9mZnNldCIsImRpZmYiLCJ2YWx1ZSIsImRlbHRhIiwibG9jYXRvciIsImhpZ2hsaWdodCIsImxvY2F0aW9ucyIsImNzc1NlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImFuY2hvciIsImJlZm9yZSIsImFmdGVyIiwiZSIsImtleSIsInJlbW92ZVByb3BlcnR5IiwibG9nIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXJndW1lbnRzIiwiam9pbiIsImxvZ05hdGl2ZSIsImRlYnVnIiwidG9OYXRpdmVSZWN0IiwicGl4ZWxSYXRpbyIsImhlaWdodCIsInJpZ2h0IiwiYm90dG9tIiwiZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAiLCJkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzIiwiY2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsInRvbGVyYW5jZSIsIm9yaWdpbmFsUmVjdHMiLCJyYW5nZUNsaWVudFJlY3QiLCJtZXJnZWRSZWN0cyIsIm1lcmdlVG91Y2hpbmdSZWN0cyIsIm5vQ29udGFpbmVkUmVjdHMiLCJyZW1vdmVDb250YWluZWRSZWN0cyIsIm5ld1JlY3RzIiwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyIsIm1pbkFyZWEiLCJqIiwiYmlnRW5vdWdoIiwic3BsaWNlIiwicmVjdHMiLCJyZWN0MSIsInJlY3QyIiwicmVjdHNMaW5lVXBWZXJ0aWNhbGx5IiwiYWxtb3N0RXF1YWwiLCJyZWN0c0xpbmVVcEhvcml6b250YWxseSIsImhvcml6b250YWxBbGxvd2VkIiwiYWxpZ25lZCIsImNhbk1lcmdlIiwicmVjdHNUb3VjaE9yT3ZlcmxhcCIsImZpbHRlciIsInJlcGxhY2VtZW50Q2xpZW50UmVjdCIsImdldEJvdW5kaW5nUmVjdCIsInJlY3RzVG9LZWVwIiwiU2V0IiwiZGVsZXRlIiwicG9zc2libHlDb250YWluaW5nUmVjdCIsImhhcyIsInJlY3RDb250YWlucyIsImZyb20iLCJyZWN0Q29udGFpbnNQb2ludCIsIngiLCJ5IiwidG9BZGQiLCJ0b1JlbW92ZSIsInN1YnRyYWN0UmVjdHMxIiwicmVjdFN1YnRyYWN0Iiwic3VidHJhY3RSZWN0czIiLCJhcHBseSIsInJlY3RJbnRlcnNlY3RlZCIsInJlY3RJbnRlcnNlY3QiLCJyZWN0QSIsInJlY3RCIiwicmVjdEMiLCJyZWN0RCIsIm1heExlZnQiLCJtaW5SaWdodCIsIm1heFRvcCIsIm1pbkJvdHRvbSIsInN0eWxlcyIsIk1hcCIsImdyb3VwcyIsImxhc3RHcm91cElkIiwicmVnaXN0ZXJUZW1wbGF0ZXMiLCJuZXdTdHlsZXMiLCJzdHlsZXNoZWV0IiwiT2JqZWN0IiwiZW50cmllcyIsInNldCIsInN0eWxlRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RGVjb3JhdGlvbnMiLCJncm91cE5hbWUiLCJncm91cCIsImdldCIsIkRlY29yYXRpb25Hcm91cCIsImhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50IiwiY2xpY2tFdmVudCIsInNpemUiLCJmaW5kVGFyZ2V0IiwiZ3JvdXBDb250ZW50IiwiaXRlbXMiLCJyZXZlcnNlIiwiaXRlbSIsImNsaWNrYWJsZUVsZW1lbnRzIiwidG9KU09OIiwiY2xpZW50WCIsImNsaWVudFkiLCJ0YXJnZXQiLCJvbkRlY29yYXRpb25BY3RpdmF0ZWQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb3JhdGlvbiIsImNsaWNrIiwiZ3JvdXBJZCIsImxhc3RJdGVtSWQiLCJjb250YWluZXIiLCJhZGQiLCJsYXlvdXQiLCJkZWNvcmF0aW9uSWQiLCJpbmRleCIsImZpbmRJbmRleCIsInVwZGF0ZSIsImNsZWFyIiwiY2xlYXJDb250YWluZXIiLCJyZXF1ZXN0TGF5b3V0IiwiZm9yRWFjaCIsImdyb3VwQ29udGFpbmVyIiwicmVxdWlyZUNvbnRhaW5lciIsIml0ZW1Db250YWluZXIiLCJ2aWV3cG9ydFdpZHRoIiwiaW5uZXJXaWR0aCIsImNvbHVtbkNvdW50IiwieE9mZnNldCIsInlPZmZzZXQiLCJwb3NpdGlvbkVsZW1lbnQiLCJib3VuZGluZ1JlY3QiLCJmbG9vciIsImVsZW1lbnRUZW1wbGF0ZSIsInRlbXBsYXRlIiwiY29udGVudCIsImZpcnN0RWxlbWVudENoaWxkIiwiZXJyb3IiLCJyMSIsInIyIiwiY2xpZW50UmVjdCIsImxpbmUiLCJjbG9uZU5vZGUiLCJhcHBlbmQiLCJib3VuZHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiY2hpbGRyZW4iLCJsYXN0U2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0Iiwib25DbGljayIsImJpbmREcmFnR2VzdHVyZSIsImdldFNlbGVjdGlvbiIsImlzQ29sbGFwc2VkIiwiZGVmYXVsdFByZXZlbnRlZCIsInRhcmdldEVsZW1lbnQiLCJvdXRlckhUTUwiLCJpbnRlcmFjdGl2ZUVsZW1lbnQiLCJuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50Iiwic2hvdWxkUHJldmVudERlZmF1bHQiLCJvblRhcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0Iiwib25TdGFydCIsInBhc3NpdmUiLCJvbkVuZCIsIm9uTW92ZSIsInN0YXRlIiwiaXNTdGFydGluZ0RyYWciLCJzdGFydFgiLCJ0b3VjaGVzIiwic3RhcnRZIiwiY3VycmVudFgiLCJjdXJyZW50WSIsIm9mZnNldFgiLCJvZmZzZXRZIiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwiaW50ZXJhY3RpdmVUYWdzIiwibm9kZU5hbWUiLCJoYXNBdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJST09UX0NMQVNTX1JFRFVDRV9NT1RJT04iLCJST09UX0NMQVNTX05PX0ZPT1ROT1RFUyIsIlBPUFVQX0RJQUxPR19DTEFTUyIsIkZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MiLCJGT09UTk9URVNfQ0xPU0VfQlVUVE9OX0NMQVNTIiwiRk9PVE5PVEVfRk9SQ0VfU0hPVyIsIlRUU19JRF9QUkVWSU9VUyIsIlRUU19JRF9ORVhUIiwiVFRTX0lEX1NMSURFUiIsIlRUU19JRF9BQ1RJVkVfV09SRCIsIlRUU19JRF9DT05UQUlORVIiLCJUVFNfSURfSU5GTyIsIlRUU19OQVZfQlVUVE9OX0NMQVNTIiwiVFRTX0lEX1NQRUFLSU5HX0RPQ19FTEVNRU5UIiwiVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4iLCJUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTiIsIlRUU19JRF9JTkpFQ1RFRF9QQVJFTlQiLCJJRF9ISUdITElHSFRTX0NPTlRBSU5FUiIsIklEX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0NPTlRBSU5FUiIsIkNMQVNTX0FOTk9UQVRJT05fQ09OVEFJTkVSIiwiQ0xBU1NfSElHSExJR0hUX0FSRUEiLCJDTEFTU19BTk5PVEFUSU9OX0FSRUEiLCJDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQSIsIl9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJIiwiQ0xBU1NfUEFHSU5BVEVEIiwiSVNfREVWIiwiX2hpZ2hsaWdodHMiLCJfaGlnaGxpZ2h0c0NvbnRhaW5lciIsIl9hbm5vdGF0aW9uQ29udGFpbmVyIiwibGFzdE1vdXNlRG93blgiLCJsYXN0TW91c2VEb3duWSIsImJvZHlFdmVudExpc3RlbmVyc1NldCIsIlVTRV9TVkciLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkiLCJERUJVR19WSVNVQUxTIiwiREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwiQU5OT1RBVElPTl9XSURUSCIsInJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSIsIl93aW4iLCJoaWdobGlnaHRCb3VuZGluZyIsIm91dGxpbmUiLCJzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJ3aW4iLCJoaWdobGlnaHRBcmVhcyIsInVzZVNWRyIsImhpZ2hsaWdodEFyZWEiLCJpc1NWRyIsIm5hbWVzcGFjZVVSSSIsIlNWR19YTUxfTkFNRVNQQUNFIiwib3BhY2l0eSIsImNvbG9yIiwicmVzZXRIaWdobGlnaHRBcmVhU3R5bGUiLCJwYXJlbnROb2RlIiwiZmluZCIsImgiLCJwcm9jZXNzVG91Y2hFdmVudCIsImV2Iiwic2Nyb2xsRWxlbWVudCIsImdldFNjcm9sbGluZ0VsZW1lbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2luYXRlZCIsImlzUGFnaW5hdGVkIiwiYm9keVJlY3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJmb3VuZEhpZ2hsaWdodCIsImZvdW5kRWxlbWVudCIsImZvdW5kUmVjdCIsImhpZ2hsaWdodFBhcmVudCIsImhpdCIsImhpZ2hsaWdodEZyYWdtZW50cyIsImhpZ2hsaWdodEZyYWdtZW50Iiwid2l0aFJlY3QiLCJoaWdobGlnaHRCb3VuZGluZ3MiLCJhbGxIaWdobGlnaHRBcmVhcyIsImZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmciLCJhbGxIaWdobGlnaHRCb3VuZGluZ3MiLCJzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwic2NyZWVuV2lkdGgiLCJvdXRlcldpZHRoIiwic2NyZWVuSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJwYXlsb2FkIiwicHJvY2VzcyIsImVsZWN0cm9uXzEiLCJpcGNSZW5kZXJlciIsInNlbmRUb0hvc3QiLCJSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0siLCJ3ZWJraXRVUkwiLCJjb25zb2xlIiwiaW5jbHVkZXMiLCJoaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZCIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsInBvc3RNZXNzYWdlIiwiaGlnaGxpZ2h0QWN0aXZhdGVkIiwicHJvY2Vzc01vdXNlRXZlbnQiLCJ0b3VjaGVkUG9zaXRpb24iLCJ0b1ByZXNlcnZlIiwidG9DaGVjayIsImNoZWNrT3ZlcmxhcHMiLCJzdGlsbE92ZXJsYXBpbmdSZWN0cyIsImhhczEiLCJoYXMyIiwieE92ZXJsYXAiLCJnZXRSZWN0T3ZlcmxhcFgiLCJ5T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWSIsInJhbmdlQ2xpZW50UmVjdHMiLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcF8iLCJjbGFzc0xpc3QiLCJlbnN1cmVDb250YWluZXIiLCJhbm5vdGF0aW9uRmxhZyIsInRvdWNoRW5kIiwiaGlkZUFsbGhpZ2hsaWdodHMiLCJkZXN0cm95QWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lIaWdobGlnaHQiLCJfZG9jdW1lbnQiLCJoaWdobGlnaHRDb250YWluZXIiLCJpc0NmaVRleHROb2RlIiwiZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4IiwiY2hpbGQiLCJmb3VuZCIsInRleHROb2RlSW5kZXgiLCJwcmV2aW91c1dhc0VsZW1lbnQiLCJjaGlsZE5vZGUiLCJpc1RleHQiLCJnZXRDb21tb25BbmNlc3RvckVsZW1lbnQiLCJub2RlMSIsIm5vZGUyIiwibm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbiIsIm5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4iLCJjb21tb25BbmNlc3RvciIsIm5vZGUxRWxlbWVudEFuY2VzdG9yIiwibm9kZTJFbGVtZW50QW5jZXN0b3IiLCJmdWxsUXVhbGlmaWVkU2VsZWN0b3IiLCJsb3dlckNhc2VOYW1lIiwibG9jYWxOYW1lIiwiY3NzUGF0aCIsImdldEN1cnJlbnRTZWxlY3Rpb25JbmZvIiwic2VsZWN0aW9uIiwicmF3VGV4dCIsImNsZWFuVGV4dCIsInJlcGxhY2UiLCJhbmNob3JOb2RlIiwiZm9jdXNOb2RlIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJjcmVhdGVPcmRlcmVkUmFuZ2UiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbGxhcHNlZCIsInJhbmdlSW5mbyIsImNvbnZlcnRSYW5nZSIsImNvbXB1dGVDRkkiLCJyZXN0b3JlZFJhbmdlIiwiY29udmVydFJhbmdlSW5mbyIsImR1bXBEZWJ1ZyIsImdldENzc1NlbGVjdG9yIiwicmFuZ2VJbmZvMkxvY2F0aW9uIiwiY2hlY2tCbGFja2xpc3RlZCIsImJsYWNrbGlzdGVkSWQiLCJibGFja2xpc3RlZENsYXNzIiwib3B0aW1pemVkIiwic3RlcHMiLCJjb250ZXh0Tm9kZSIsInN0ZXAiLCJfY3NzUGF0aFN0ZXAiLCJpc1RhcmdldE5vZGUiLCJwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzIiwibmQiLCJjbGFzc0F0dHJpYnV0ZSIsInNwbGl0IiwiQm9vbGVhbiIsIm5tIiwiaWRTZWxlY3RvciIsImlkZCIsImVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZCIsImlkZW50IiwiaXNDU1NJZGVudGlmaWVyIiwic2hvdWxkRXNjYXBlRmlyc3QiLCJ0ZXN0IiwibGFzdEluZGV4IiwiYyIsImlpIiwiaXNDU1NJZGVudENoYXIiLCJlc2NhcGVBc2NpaUNoYXIiLCJpc0xhc3QiLCJ0b0hleEJ5dGUiLCJoZXhCeXRlIiwiY2hhckNvZGVBdCIsIkRPQ1VNRU5UX05PREUiLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8iLCJwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheSIsImFyckl0ZW0iLCJuZWVkc0NsYXNzTmFtZXMiLCJuZWVkc050aENoaWxkIiwib3duSW5kZXgiLCJlbGVtZW50SW5kZXgiLCJzaWJsaW5ncyIsInNpYmxpbmdOYW1lIiwib3duQ2xhc3NOYW1lcyIsIm93bkNsYXNzTmFtZUNvdW50Iiwic2libGluZ0NsYXNzTmFtZXNBcnJheV8iLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5Iiwic2libGluZ0NsYXNzIiwiaW5kIiwicmVzdWx0IiwicHJlZml4ZWROYW1lIiwic3Vic3RyIiwiY2ZpIiwiY3VycmVudEVsZW1lbnQiLCJibGFja2xpc3RlZCIsImN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4iLCJjdXJyZW50RWxlbWVudEluZGV4IiwiY2ZpSW5kZXgiLCJfY3JlYXRlSGlnaGxpZ2h0IiwicG9pbnRlckludGVyYWN0aW9uIiwibG9jYXRpb24yUmFuZ2VJbmZvIiwidW5pcXVlU3RyIiwic3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IiLCJzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCIsImhhc2giLCJyZXF1aXJlIiwic2hhMjU2SGV4Iiwic2hhMjU2IiwiZGlnZXN0IiwiY3JlYXRlSGlnaGxpZ2h0RG9tIiwiY3JlYXRlSGlnaGxpZ2h0Iiwic2VsZWN0aW9uSW5mbyIsImNyZWF0ZUFubm90YXRpb24iLCJzY2FsZSIsIlJFQURJVU0yIiwiaXNGaXhlZExheW91dCIsImZ4bFZpZXdwb3J0U2NhbGUiLCJoaWdobGlnaHRzQ29udGFpbmVyIiwiZHJhd1VuZGVybGluZSIsImRyYXdTdHJpa2VUaHJvdWdoIiwiaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWciLCJyb3VuZGVkQ29ybmVyIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwic3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MiLCJleHRyYSIsInJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdCIsImZyYW1lRm9ySGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtXaXRoSUQiLCJhbm5vdGF0aW9uT2Zmc2V0IiwiYm9yZGVyVGhpY2tuZXNzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImhpZ2hsaWdodEFyZWFTVkdSZWN0IiwiY3JlYXRlRWxlbWVudE5TIiwiaGlnaGxpZ2h0QXJlYVNWR0xpbmUiLCJsaW5lT2Zmc2V0IiwicmdiIiwicmFuZG9tIiwiciIsImciLCJoaWdobGlnaHRBcmVhTGluZSIsImhpZ2hsaWdodEFyZWFTVkciLCJvdmVyZmxvdyIsInJhbmdlQm91bmRpbmdDbGllbnRSZWN0Iiwic3RhcnROb2RlIiwiZW5kTm9kZSIsInJhbmdlUmV2ZXJzZSIsImNvbXB1dGVFbGVtZW50Q0ZJIiwic3RhcnRJc0VsZW1lbnQiLCJzdGFydENvbnRhaW5lckVsZW1lbnQiLCJlbmRJc0VsZW1lbnQiLCJlbmRDb250YWluZXJFbGVtZW50IiwiY29tbW9uRWxlbWVudEFuY2VzdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCIsInJvb3RFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50Q2ZpIiwiZW5kRWxlbWVudENmaSIsInN0YXJ0RWxlbWVudE9yVGV4dENmaSIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpIiwiY2ZpVGV4dE5vZGVJbmRleCIsImNmaUluZGV4T2ZMYXN0RWxlbWVudCIsImNoaWxkRWxlbWVudENvdW50IiwibGFzdENoaWxkTm9kZSIsImVuZEVsZW1lbnRPclRleHRDZmkiLCJlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJzdGFydEVsZW1lbnQiLCJlbmRFbGVtZW50IiwiZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQiLCJ0b3BDbGllbnRSZWN0IiwibWF4SGVpZ2h0IiwibmV3VG9wIiwiYm91bmRpbmdBcmVhcyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJsZW4iLCJib3VuZGluZ0FyZWEiLCJoaWdobGlnaHRXaXRoSUQiLCJwYXJ0aWFsQ2ZpIiwiZG9tUmFuZ2UiLCJsb2NhdGlvbiIsInJlY3RhbmdsZUZvckhpZ2hsaWdodFdpdGhJRCIsImdldFNlbGVjdGlvblJlY3QiLCJzZWwiLCJoYW5kbGVCb3VuZHMiLCJzZXRTY3JvbGxNb2RlIiwiZmxhZyIsImZpbmRGaXJzdFZpc2libGVMb2NhdG9yIiwiZmluZEVsZW1lbnQiLCJocmVmIiwicm9vdEVsZW1lbnQiLCJlbGVtZW50UmVsYXRpdmVQb3NpdGlvbiIsInNob3VsZElnbm9yZUVsZW1lbnQiLCJkb21SZWN0IiwicmVhZGl1bSIsImVsU3R5bGUiLCJkaXNwbGF5IiwibWF0Y2hBbGwiLCJzaGltIiwiZ2V0Q3VycmVudFNlbGVjdGlvbiIsImdldEN1cnJlbnRTZWxlY3Rpb25UZXh0IiwiY2xlYW5IaWdobGlnaHQiLCJzbmlwcGV0TGVuZ3RoIiwiZmlyc3RXb3JkU3RhcnQiLCJsYXN0V29yZEVuZCIsInBvcCIsInJlZ2lzdGVyRGVjb3JhdGlvblRlbXBsYXRlcyIsImlzUmVmbG93YWJsZSIsIm1ldGEiLCJoZWFkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQWlELG9CQUFvQixDQUF1SSxDQUFDLGtCQUFrQixZQUFZLE9BQU8sY0FBYyxhQUFhLGtCQUFrQixrQ0FBa0Msc0JBQXNCLGVBQWUsc0NBQXNDLEtBQUssdUlBQXVJLElBQUksK0JBQStCLHVCQUF1QixZQUFZLDRFQUE0RSxjQUFjLG9GQUFvRixTQUFTLFNBQVMscUJBQXFCLFlBQVksS0FBSyxtQkFBbUIsS0FBSyxtQkFBbUIsd0NBQXdDLFVBQVUsdUNBQXVDLE1BQU0sY0FBYyxXQUFXLCtCQUErQixZQUFZLFlBQVkscUNBQXFDLFFBQVEsMENBQTBDLGNBQWMsSUFBSSxJQUFJLGFBQWEsK0RBQStELHVCQUF1QixFQUFFLDhEQUE4RCw0RkFBNEYsZUFBZSx3Q0FBd0MsU0FBUyxHQUFHLFNBQVMsWUFBWSxhQUFhLGNBQWMsbUNBQW1DLEVBQUUsa0ZBQWtGLGdCQUFnQixhQUFhLCtFQUErRSxjQUFjLCtIQUErSCxxQ0FBcUMsc0NBQXNDLEVBQUUsUUFBUSxhQUFhLHdEQUF3RCxTQUFTLGVBQWUsNEdBQTRHLFNBQVMsR0FBRyxTQUFTLGtPQUFrTyxjQUFjLDJCQUEyQixjQUFjLHFEQUFxRCxjQUFjLHVDQUF1QyxjQUFjLDJFQUEyRSxtQkFBbUIseUJBQXlCLDRCQUE0QixnQkFBZ0Isc1RBQXNULHVCQUF1QixZQUFZLEVBQUUsdVZBQXVWLGNBQWMsb0RBQW9ELGlCQUFpQixtQkFBbUIsd0VBQXdFLGNBQWMsc0JBQXNCLGNBQWMsbUJBQW1CLDRCQUE0QixtQ0FBbUMsYUFBYSxxS0FBcUssdUJBQXVCLHdDQUF3QywrQ0FBK0Msb0JBQW9CLHNLQUFzSyxHQUFHLDRCQUE0QixrQkFBa0Isa0RBQWtELHdEQUF3RCxnQkFBZ0Isd0JBQXdCLDhDQUE4QyxJQUFJLFdBQVcsUUFBUSxLQUFLLFlBQVksNkJBQTZCLFNBQVMsZ0JBQWdCLDZCQUE2QixTQUFTLFVBQVUscUJBQXFCLGlCQUFpQiw4QkFBOEIsWUFBWSx3QkFBd0IsNklBQTZJLHNCQUFzQixpQ0FBaUMsWUFBWSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsWUFBWSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWSxXQUFXLEVBQUUsWUFBWSxjQUFjLDJDQUEyQyxnQ0FBZ0MsY0FBYyw0RkFBNEYsS0FBSyxJQUFJLGNBQWMsdUNBQXVDLEtBQUssbUJBQW1CLFlBQVksRUFBRSxvQ0FBb0MsY0FBYyxxQkFBcUIsTUFBTSxzREFBc0QsNkJBQTZCLElBQUksSUFBSSxTQUFTLGNBQWMsbUNBQW1DLGNBQWMsa0NBQWtDLDBDQUEwQyxjQUFjLG9DQUFvQyxNQUFNLG1GQUFtRixrQkFBa0IsRUFBRSxlQUFlLElBQUksSUFBSSxTQUFTLGlCQUFpQixzQ0FBc0MsR0FBRyxFQUFFLFdBQVcsZUFBZSxLQUFLLHdCQUF3QixpREFBaUQsU0FBUyxxQkFBcUIsaUJBQWlCLGtCQUFrQixlQUFlLFVBQVUsY0FBYyxLQUFLLGVBQWUsdUJBQXVCLHVCQUF1Qix5QkFBeUIsZ0JBQWdCLG1DQUFtQyx3RUFBd0UsRUFBRSxRQUFRLFdBQVcsaUJBQWlCLFFBQVEsc0lBQXNJLHdDQUF3QyxHQUFHLGlCQUFpQixFQUFFLDBDQUEwQyxJQUFJLFNBQVMscUJBQXFCLDJDQUEyQyxtQkFBbUIsbUJBQW1CLHVCQUF1QixtQkFBbUIsc0JBQXNCLG1CQUFtQix1QkFBdUIsb0JBQW9CLElBQUksdURBQXVELGNBQWMsc0VBQXNFLGVBQWUsRUFBRSxlQUFlLHlFQUF5RSxrQ0FBa0MsUUFBUSxZQUFZLHVCQUF1QixzQkFBc0IsNkJBQTZCLHdEQUF3RCxNQUFNLGlCQUFpQix3QkFBd0IsbUJBQW1CLE1BQU0sbUVBQW1FLFlBQVksYUFBYSxrQkFBa0Isb0JBQW9CLDBCQUEwQixXQUFXLHNCQUFzQixhQUFhLHFCQUFxQixpQkFBaUIsZ0NBQWdDLGVBQWUsTUFBTSxrRUFBa0UsaUJBQWlCLG1CQUFtQixNQUFNLHlCQUF5QixrQkFBa0IsOENBQThDLG9CQUFvQix5QkFBeUIsdUJBQXVCLG9CQUFvQiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz80ZWE4Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz83NGM5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/YTYyMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzAxZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NjY2MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NmY5MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz81YTAxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/NDI2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz81YWVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzYzOTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz84ZDcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/ZWFhNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzhlMDkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz8xMzA0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz82NzlhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz84NzVlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZTg1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2IzN2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzP2EwODciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9iODZjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz9iMjE4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzQyNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzFkZTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85OTYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz8wOGE4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZjM5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz9iYWU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzP2UzYTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz84OTU0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz80YmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz82OTRmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz9lZDNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzPzU5OGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9hODA4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz9kNGYxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/Y2E0MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz82ZDczIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzYyZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/NzhjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/NjBhNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz9lNWExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/OGYyNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NjEwMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/YzRkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzP2VkYzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzP2U3ODEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9hODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzP2NmYjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/Yjk1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz83NzM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzP2NlNzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/ZmQyYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTNiNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/NzQ3OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz84YTM0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2Q4MmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/OGRmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz9lMGI2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file +(function(){var __webpack_modules__={3089:function(__unused_webpack_module,exports){"use strict";eval('var __webpack_unused_export__;\n\n/**\n * Implementation of Myers\' online approximate string matching algorithm [1],\n * with additional optimizations suggested by [2].\n *\n * This has O((k/w) * n) complexity where `n` is the length of the text, `k` is\n * the maximum number of errors allowed (always <= the pattern length) and `w`\n * is the word size. Because JS only supports bitwise operations on 32 bit\n * integers, `w` is 32.\n *\n * As far as I am aware, there aren\'t any online algorithms which are\n * significantly better for a wide range of input parameters. The problem can be\n * solved faster using "filter then verify" approaches which first filter out\n * regions of the text that cannot match using a "cheap" check and then verify\n * the remaining potential matches. The verify step requires an algorithm such\n * as this one however.\n *\n * The algorithm\'s approach is essentially to optimize the classic dynamic\n * programming solution to the problem by computing columns of the matrix in\n * word-sized chunks (ie. dealing with 32 chars of the pattern at a time) and\n * avoiding calculating regions of the matrix where the minimum error count is\n * guaranteed to exceed the input threshold.\n *\n * The paper consists of two parts, the first describes the core algorithm for\n * matching patterns <= the size of a word (implemented by `advanceBlock` here).\n * The second uses the core algorithm as part of a larger block-based algorithm\n * to handle longer patterns.\n *\n * [1] G. Myers, “A Fast Bit-Vector Algorithm for Approximate String Matching\n * Based on Dynamic Programming,” vol. 46, no. 3, pp. 395–415, 1999.\n *\n * [2] Šošić, M. (2014). An simd dynamic programming c/c++ library (Doctoral\n * dissertation, Fakultet Elektrotehnike i računarstva, Sveučilište u Zagrebu).\n */\n__webpack_unused_export__ = ({ value: true });\nfunction reverse(s) {\n return s\n .split("")\n .reverse()\n .join("");\n}\n/**\n * Given the ends of approximate matches for `pattern` in `text`, find\n * the start of the matches.\n *\n * @param findEndFn - Function for finding the end of matches in\n * text.\n * @return Matches with the `start` property set.\n */\nfunction findMatchStarts(text, pattern, matches) {\n var patRev = reverse(pattern);\n return matches.map(function (m) {\n // Find start of each match by reversing the pattern and matching segment\n // of text and searching for an approx match with the same number of\n // errors.\n var minStart = Math.max(0, m.end - pattern.length - m.errors);\n var textRev = reverse(text.slice(minStart, m.end));\n // If there are multiple possible start points, choose the one that\n // maximizes the length of the match.\n var start = findMatchEnds(textRev, patRev, m.errors).reduce(function (min, rm) {\n if (m.end - rm.end < min) {\n return m.end - rm.end;\n }\n return min;\n }, m.end);\n return {\n start: start,\n end: m.end,\n errors: m.errors\n };\n });\n}\n/**\n * Return 1 if a number is non-zero or zero otherwise, without using\n * conditional operators.\n *\n * This should get inlined into `advanceBlock` below by the JIT.\n *\n * Adapted from https://stackoverflow.com/a/3912218/434243\n */\nfunction oneIfNotZero(n) {\n return ((n | -n) >> 31) & 1;\n}\n/**\n * Block calculation step of the algorithm.\n *\n * From Fig 8. on p. 408 of [1], additionally optimized to replace conditional\n * checks with bitwise operations as per Section 4.2.3 of [2].\n *\n * @param ctx - The pattern context object\n * @param peq - The `peq` array for the current character (`ctx.peq.get(ch)`)\n * @param b - The block level\n * @param hIn - Horizontal input delta ∈ {1,0,-1}\n * @return Horizontal output delta ∈ {1,0,-1}\n */\nfunction advanceBlock(ctx, peq, b, hIn) {\n var pV = ctx.P[b];\n var mV = ctx.M[b];\n var hInIsNegative = hIn >>> 31; // 1 if hIn < 0 or 0 otherwise.\n var eq = peq[b] | hInIsNegative;\n // Step 1: Compute horizontal deltas.\n var xV = eq | mV;\n var xH = (((eq & pV) + pV) ^ pV) | eq;\n var pH = mV | ~(xH | pV);\n var mH = pV & xH;\n // Step 2: Update score (value of last row of this block).\n var hOut = oneIfNotZero(pH & ctx.lastRowMask[b]) -\n oneIfNotZero(mH & ctx.lastRowMask[b]);\n // Step 3: Update vertical deltas for use when processing next char.\n pH <<= 1;\n mH <<= 1;\n mH |= hInIsNegative;\n pH |= oneIfNotZero(hIn) - hInIsNegative; // set pH[0] if hIn > 0\n pV = mH | ~(xV | pH);\n mV = pH & xV;\n ctx.P[b] = pV;\n ctx.M[b] = mV;\n return hOut;\n}\n/**\n * Find the ends and error counts for matches of `pattern` in `text`.\n *\n * Only the matches with the lowest error count are reported. Other matches\n * with error counts <= maxErrors are discarded.\n *\n * This is the block-based search algorithm from Fig. 9 on p.410 of [1].\n */\nfunction findMatchEnds(text, pattern, maxErrors) {\n if (pattern.length === 0) {\n return [];\n }\n // Clamp error count so we can rely on the `maxErrors` and `pattern.length`\n // rows being in the same block below.\n maxErrors = Math.min(maxErrors, pattern.length);\n var matches = [];\n // Word size.\n var w = 32;\n // Index of maximum block level.\n var bMax = Math.ceil(pattern.length / w) - 1;\n // Context used across block calculations.\n var ctx = {\n P: new Uint32Array(bMax + 1),\n M: new Uint32Array(bMax + 1),\n lastRowMask: new Uint32Array(bMax + 1)\n };\n ctx.lastRowMask.fill(1 << 31);\n ctx.lastRowMask[bMax] = 1 << (pattern.length - 1) % w;\n // Dummy "peq" array for chars in the text which do not occur in the pattern.\n var emptyPeq = new Uint32Array(bMax + 1);\n // Map of UTF-16 character code to bit vector indicating positions in the\n // pattern that equal that character.\n var peq = new Map();\n // Version of `peq` that only stores mappings for small characters. This\n // allows faster lookups when iterating through the text because a simple\n // array lookup can be done instead of a hash table lookup.\n var asciiPeq = [];\n for (var i = 0; i < 256; i++) {\n asciiPeq.push(emptyPeq);\n }\n // Calculate `ctx.peq` - a map of character values to bitmasks indicating\n // positions of that character within the pattern, where each bit represents\n // a position in the pattern.\n for (var c = 0; c < pattern.length; c += 1) {\n var val = pattern.charCodeAt(c);\n if (peq.has(val)) {\n // Duplicate char in pattern.\n continue;\n }\n var charPeq = new Uint32Array(bMax + 1);\n peq.set(val, charPeq);\n if (val < asciiPeq.length) {\n asciiPeq[val] = charPeq;\n }\n for (var b = 0; b <= bMax; b += 1) {\n charPeq[b] = 0;\n // Set all the bits where the pattern matches the current char (ch).\n // For indexes beyond the end of the pattern, always set the bit as if the\n // pattern contained a wildcard char in that position.\n for (var r = 0; r < w; r += 1) {\n var idx = b * w + r;\n if (idx >= pattern.length) {\n continue;\n }\n var match = pattern.charCodeAt(idx) === val;\n if (match) {\n charPeq[b] |= 1 << r;\n }\n }\n }\n }\n // Index of last-active block level in the column.\n var y = Math.max(0, Math.ceil(maxErrors / w) - 1);\n // Initialize maximum error count at bottom of each block.\n var score = new Uint32Array(bMax + 1);\n for (var b = 0; b <= y; b += 1) {\n score[b] = (b + 1) * w;\n }\n score[bMax] = pattern.length;\n // Initialize vertical deltas for each block.\n for (var b = 0; b <= y; b += 1) {\n ctx.P[b] = ~0;\n ctx.M[b] = 0;\n }\n // Process each char of the text, computing the error count for `w` chars of\n // the pattern at a time.\n for (var j = 0; j < text.length; j += 1) {\n // Lookup the bitmask representing the positions of the current char from\n // the text within the pattern.\n var charCode = text.charCodeAt(j);\n var charPeq = void 0;\n if (charCode < asciiPeq.length) {\n // Fast array lookup.\n charPeq = asciiPeq[charCode];\n }\n else {\n // Slower hash table lookup.\n charPeq = peq.get(charCode);\n if (typeof charPeq === "undefined") {\n charPeq = emptyPeq;\n }\n }\n // Calculate error count for blocks that we definitely have to process for\n // this column.\n var carry = 0;\n for (var b = 0; b <= y; b += 1) {\n carry = advanceBlock(ctx, charPeq, b, carry);\n score[b] += carry;\n }\n // Check if we also need to compute an additional block, or if we can reduce\n // the number of blocks processed for the next column.\n if (score[y] - carry <= maxErrors &&\n y < bMax &&\n (charPeq[y + 1] & 1 || carry < 0)) {\n // Error count for bottom block is under threshold, increase the number of\n // blocks processed for this column & next by 1.\n y += 1;\n ctx.P[y] = ~0;\n ctx.M[y] = 0;\n var maxBlockScore = y === bMax ? pattern.length % w : w;\n score[y] =\n score[y - 1] +\n maxBlockScore -\n carry +\n advanceBlock(ctx, charPeq, y, carry);\n }\n else {\n // Error count for bottom block exceeds threshold, reduce the number of\n // blocks processed for the next column.\n while (y > 0 && score[y] >= maxErrors + w) {\n y -= 1;\n }\n }\n // If error count is under threshold, report a match.\n if (y === bMax && score[y] <= maxErrors) {\n if (score[y] < maxErrors) {\n // Discard any earlier, worse matches.\n matches.splice(0, matches.length);\n }\n matches.push({\n start: -1,\n end: j + 1,\n errors: score[y]\n });\n // Because `search` only reports the matches with the lowest error count,\n // we can "ratchet down" the max error threshold whenever a match is\n // encountered and thereby save a small amount of work for the remainder\n // of the text.\n maxErrors = score[y];\n }\n }\n return matches;\n}\n/**\n * Search for matches for `pattern` in `text` allowing up to `maxErrors` errors.\n *\n * Returns the start, and end positions and error counts for each lowest-cost\n * match. Only the "best" matches are returned.\n */\nfunction search(text, pattern, maxErrors) {\n var matches = findMatchEnds(text, pattern, maxErrors);\n return findMatchStarts(text, pattern, matches);\n}\nexports.Z = search;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzA4OS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkMsRUFBRSxhQUFhLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2FwcHJveC1zdHJpbmctbWF0Y2gvZGlzdC9pbmRleC5qcz83MjMwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBNeWVycycgb25saW5lIGFwcHJveGltYXRlIHN0cmluZyBtYXRjaGluZyBhbGdvcml0aG0gWzFdLFxuICogd2l0aCBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgc3VnZ2VzdGVkIGJ5IFsyXS5cbiAqXG4gKiBUaGlzIGhhcyBPKChrL3cpICogbikgY29tcGxleGl0eSB3aGVyZSBgbmAgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdGV4dCwgYGtgIGlzXG4gKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXJyb3JzIGFsbG93ZWQgKGFsd2F5cyA8PSB0aGUgcGF0dGVybiBsZW5ndGgpIGFuZCBgd2BcbiAqIGlzIHRoZSB3b3JkIHNpemUuIEJlY2F1c2UgSlMgb25seSBzdXBwb3J0cyBiaXR3aXNlIG9wZXJhdGlvbnMgb24gMzIgYml0XG4gKiBpbnRlZ2VycywgYHdgIGlzIDMyLlxuICpcbiAqIEFzIGZhciBhcyBJIGFtIGF3YXJlLCB0aGVyZSBhcmVuJ3QgYW55IG9ubGluZSBhbGdvcml0aG1zIHdoaWNoIGFyZVxuICogc2lnbmlmaWNhbnRseSBiZXR0ZXIgZm9yIGEgd2lkZSByYW5nZSBvZiBpbnB1dCBwYXJhbWV0ZXJzLiBUaGUgcHJvYmxlbSBjYW4gYmVcbiAqIHNvbHZlZCBmYXN0ZXIgdXNpbmcgXCJmaWx0ZXIgdGhlbiB2ZXJpZnlcIiBhcHByb2FjaGVzIHdoaWNoIGZpcnN0IGZpbHRlciBvdXRcbiAqIHJlZ2lvbnMgb2YgdGhlIHRleHQgdGhhdCBjYW5ub3QgbWF0Y2ggdXNpbmcgYSBcImNoZWFwXCIgY2hlY2sgYW5kIHRoZW4gdmVyaWZ5XG4gKiB0aGUgcmVtYWluaW5nIHBvdGVudGlhbCBtYXRjaGVzLiBUaGUgdmVyaWZ5IHN0ZXAgcmVxdWlyZXMgYW4gYWxnb3JpdGhtIHN1Y2hcbiAqIGFzIHRoaXMgb25lIGhvd2V2ZXIuXG4gKlxuICogVGhlIGFsZ29yaXRobSdzIGFwcHJvYWNoIGlzIGVzc2VudGlhbGx5IHRvIG9wdGltaXplIHRoZSBjbGFzc2ljIGR5bmFtaWNcbiAqIHByb2dyYW1taW5nIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGJ5IGNvbXB1dGluZyBjb2x1bW5zIG9mIHRoZSBtYXRyaXggaW5cbiAqIHdvcmQtc2l6ZWQgY2h1bmtzIChpZS4gZGVhbGluZyB3aXRoIDMyIGNoYXJzIG9mIHRoZSBwYXR0ZXJuIGF0IGEgdGltZSkgYW5kXG4gKiBhdm9pZGluZyBjYWxjdWxhdGluZyByZWdpb25zIG9mIHRoZSBtYXRyaXggd2hlcmUgdGhlIG1pbmltdW0gZXJyb3IgY291bnQgaXNcbiAqIGd1YXJhbnRlZWQgdG8gZXhjZWVkIHRoZSBpbnB1dCB0aHJlc2hvbGQuXG4gKlxuICogVGhlIHBhcGVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cywgdGhlIGZpcnN0IGRlc2NyaWJlcyB0aGUgY29yZSBhbGdvcml0aG0gZm9yXG4gKiBtYXRjaGluZyBwYXR0ZXJucyA8PSB0aGUgc2l6ZSBvZiBhIHdvcmQgKGltcGxlbWVudGVkIGJ5IGBhZHZhbmNlQmxvY2tgIGhlcmUpLlxuICogVGhlIHNlY29uZCB1c2VzIHRoZSBjb3JlIGFsZ29yaXRobSBhcyBwYXJ0IG9mIGEgbGFyZ2VyIGJsb2NrLWJhc2VkIGFsZ29yaXRobVxuICogdG8gaGFuZGxlIGxvbmdlciBwYXR0ZXJucy5cbiAqXG4gKiBbMV0gRy4gTXllcnMsIOKAnEEgRmFzdCBCaXQtVmVjdG9yIEFsZ29yaXRobSBmb3IgQXBwcm94aW1hdGUgU3RyaW5nIE1hdGNoaW5nXG4gKiBCYXNlZCBvbiBEeW5hbWljIFByb2dyYW1taW5nLOKAnSB2b2wuIDQ2LCBuby4gMywgcHAuIDM5NeKAkzQxNSwgMTk5OS5cbiAqXG4gKiBbMl0gxaBvxaFpxIcsIE0uICgyMDE0KS4gQW4gc2ltZCBkeW5hbWljIHByb2dyYW1taW5nIGMvYysrIGxpYnJhcnkgKERvY3RvcmFsXG4gKiBkaXNzZXJ0YXRpb24sIEZha3VsdGV0IEVsZWt0cm90ZWhuaWtlIGkgcmHEjXVuYXJzdHZhLCBTdmV1xI1pbGnFoXRlIHUgWmFncmVidSkuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIHJldmVyc2Uocykge1xuICAgIHJldHVybiBzXG4gICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKFwiXCIpO1xufVxuLyoqXG4gKiBHaXZlbiB0aGUgZW5kcyBvZiBhcHByb3hpbWF0ZSBtYXRjaGVzIGZvciBgcGF0dGVybmAgaW4gYHRleHRgLCBmaW5kXG4gKiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZXMuXG4gKlxuICogQHBhcmFtIGZpbmRFbmRGbiAtIEZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBlbmQgb2YgbWF0Y2hlcyBpblxuICogdGV4dC5cbiAqIEByZXR1cm4gTWF0Y2hlcyB3aXRoIHRoZSBgc3RhcnRgIHByb3BlcnR5IHNldC5cbiAqL1xuZnVuY3Rpb24gZmluZE1hdGNoU3RhcnRzKHRleHQsIHBhdHRlcm4sIG1hdGNoZXMpIHtcbiAgICB2YXIgcGF0UmV2ID0gcmV2ZXJzZShwYXR0ZXJuKTtcbiAgICByZXR1cm4gbWF0Y2hlcy5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gRmluZCBzdGFydCBvZiBlYWNoIG1hdGNoIGJ5IHJldmVyc2luZyB0aGUgcGF0dGVybiBhbmQgbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAvLyBvZiB0ZXh0IGFuZCBzZWFyY2hpbmcgZm9yIGFuIGFwcHJveCBtYXRjaCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgICAgICAvLyBlcnJvcnMuXG4gICAgICAgIHZhciBtaW5TdGFydCA9IE1hdGgubWF4KDAsIG0uZW5kIC0gcGF0dGVybi5sZW5ndGggLSBtLmVycm9ycyk7XG4gICAgICAgIHZhciB0ZXh0UmV2ID0gcmV2ZXJzZSh0ZXh0LnNsaWNlKG1pblN0YXJ0LCBtLmVuZCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgc3RhcnQgcG9pbnRzLCBjaG9vc2UgdGhlIG9uZSB0aGF0XG4gICAgICAgIC8vIG1heGltaXplcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaC5cbiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZE1hdGNoRW5kcyh0ZXh0UmV2LCBwYXRSZXYsIG0uZXJyb3JzKS5yZWR1Y2UoZnVuY3Rpb24gKG1pbiwgcm0pIHtcbiAgICAgICAgICAgIGlmIChtLmVuZCAtIHJtLmVuZCA8IG1pbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtLmVuZCAtIHJtLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIH0sIG0uZW5kKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgIGVuZDogbS5lbmQsXG4gICAgICAgICAgICBlcnJvcnM6IG0uZXJyb3JzXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vKipcbiAqIFJldHVybiAxIGlmIGEgbnVtYmVyIGlzIG5vbi16ZXJvIG9yIHplcm8gb3RoZXJ3aXNlLCB3aXRob3V0IHVzaW5nXG4gKiBjb25kaXRpb25hbCBvcGVyYXRvcnMuXG4gKlxuICogVGhpcyBzaG91bGQgZ2V0IGlubGluZWQgaW50byBgYWR2YW5jZUJsb2NrYCBiZWxvdyBieSB0aGUgSklULlxuICpcbiAqIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzkxMjIxOC80MzQyNDNcbiAqL1xuZnVuY3Rpb24gb25lSWZOb3RaZXJvKG4pIHtcbiAgICByZXR1cm4gKChuIHwgLW4pID4+IDMxKSAmIDE7XG59XG4vKipcbiAqIEJsb2NrIGNhbGN1bGF0aW9uIHN0ZXAgb2YgdGhlIGFsZ29yaXRobS5cbiAqXG4gKiBGcm9tIEZpZyA4LiBvbiBwLiA0MDggb2YgWzFdLCBhZGRpdGlvbmFsbHkgb3B0aW1pemVkIHRvIHJlcGxhY2UgY29uZGl0aW9uYWxcbiAqIGNoZWNrcyB3aXRoIGJpdHdpc2Ugb3BlcmF0aW9ucyBhcyBwZXIgU2VjdGlvbiA0LjIuMyBvZiBbMl0uXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBwYXR0ZXJuIGNvbnRleHQgb2JqZWN0XG4gKiBAcGFyYW0gcGVxIC0gVGhlIGBwZXFgIGFycmF5IGZvciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgKGBjdHgucGVxLmdldChjaClgKVxuICogQHBhcmFtIGIgLSBUaGUgYmxvY2sgbGV2ZWxcbiAqIEBwYXJhbSBoSW4gLSBIb3Jpem9udGFsIGlucHV0IGRlbHRhIOKIiCB7MSwwLC0xfVxuICogQHJldHVybiBIb3Jpem9udGFsIG91dHB1dCBkZWx0YSDiiIggezEsMCwtMX1cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUJsb2NrKGN0eCwgcGVxLCBiLCBoSW4pIHtcbiAgICB2YXIgcFYgPSBjdHguUFtiXTtcbiAgICB2YXIgbVYgPSBjdHguTVtiXTtcbiAgICB2YXIgaEluSXNOZWdhdGl2ZSA9IGhJbiA+Pj4gMzE7IC8vIDEgaWYgaEluIDwgMCBvciAwIG90aGVyd2lzZS5cbiAgICB2YXIgZXEgPSBwZXFbYl0gfCBoSW5Jc05lZ2F0aXZlO1xuICAgIC8vIFN0ZXAgMTogQ29tcHV0ZSBob3Jpem9udGFsIGRlbHRhcy5cbiAgICB2YXIgeFYgPSBlcSB8IG1WO1xuICAgIHZhciB4SCA9ICgoKGVxICYgcFYpICsgcFYpIF4gcFYpIHwgZXE7XG4gICAgdmFyIHBIID0gbVYgfCB+KHhIIHwgcFYpO1xuICAgIHZhciBtSCA9IHBWICYgeEg7XG4gICAgLy8gU3RlcCAyOiBVcGRhdGUgc2NvcmUgKHZhbHVlIG9mIGxhc3Qgcm93IG9mIHRoaXMgYmxvY2spLlxuICAgIHZhciBoT3V0ID0gb25lSWZOb3RaZXJvKHBIICYgY3R4Lmxhc3RSb3dNYXNrW2JdKSAtXG4gICAgICAgIG9uZUlmTm90WmVybyhtSCAmIGN0eC5sYXN0Um93TWFza1tiXSk7XG4gICAgLy8gU3RlcCAzOiBVcGRhdGUgdmVydGljYWwgZGVsdGFzIGZvciB1c2Ugd2hlbiBwcm9jZXNzaW5nIG5leHQgY2hhci5cbiAgICBwSCA8PD0gMTtcbiAgICBtSCA8PD0gMTtcbiAgICBtSCB8PSBoSW5Jc05lZ2F0aXZlO1xuICAgIHBIIHw9IG9uZUlmTm90WmVybyhoSW4pIC0gaEluSXNOZWdhdGl2ZTsgLy8gc2V0IHBIWzBdIGlmIGhJbiA+IDBcbiAgICBwViA9IG1IIHwgfih4ViB8IHBIKTtcbiAgICBtViA9IHBIICYgeFY7XG4gICAgY3R4LlBbYl0gPSBwVjtcbiAgICBjdHguTVtiXSA9IG1WO1xuICAgIHJldHVybiBoT3V0O1xufVxuLyoqXG4gKiBGaW5kIHRoZSBlbmRzIGFuZCBlcnJvciBjb3VudHMgZm9yIG1hdGNoZXMgb2YgYHBhdHRlcm5gIGluIGB0ZXh0YC5cbiAqXG4gKiBPbmx5IHRoZSBtYXRjaGVzIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudCBhcmUgcmVwb3J0ZWQuIE90aGVyIG1hdGNoZXNcbiAqIHdpdGggZXJyb3IgY291bnRzIDw9IG1heEVycm9ycyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIGJsb2NrLWJhc2VkIHNlYXJjaCBhbGdvcml0aG0gZnJvbSBGaWcuIDkgb24gcC40MTAgb2YgWzFdLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hFbmRzKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIGlmIChwYXR0ZXJuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8vIENsYW1wIGVycm9yIGNvdW50IHNvIHdlIGNhbiByZWx5IG9uIHRoZSBgbWF4RXJyb3JzYCBhbmQgYHBhdHRlcm4ubGVuZ3RoYFxuICAgIC8vIHJvd3MgYmVpbmcgaW4gdGhlIHNhbWUgYmxvY2sgYmVsb3cuXG4gICAgbWF4RXJyb3JzID0gTWF0aC5taW4obWF4RXJyb3JzLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgdmFyIG1hdGNoZXMgPSBbXTtcbiAgICAvLyBXb3JkIHNpemUuXG4gICAgdmFyIHcgPSAzMjtcbiAgICAvLyBJbmRleCBvZiBtYXhpbXVtIGJsb2NrIGxldmVsLlxuICAgIHZhciBiTWF4ID0gTWF0aC5jZWlsKHBhdHRlcm4ubGVuZ3RoIC8gdykgLSAxO1xuICAgIC8vIENvbnRleHQgdXNlZCBhY3Jvc3MgYmxvY2sgY2FsY3VsYXRpb25zLlxuICAgIHZhciBjdHggPSB7XG4gICAgICAgIFA6IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIE06IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSksXG4gICAgICAgIGxhc3RSb3dNYXNrOiBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpXG4gICAgfTtcbiAgICBjdHgubGFzdFJvd01hc2suZmlsbCgxIDw8IDMxKTtcbiAgICBjdHgubGFzdFJvd01hc2tbYk1heF0gPSAxIDw8IChwYXR0ZXJuLmxlbmd0aCAtIDEpICUgdztcbiAgICAvLyBEdW1teSBcInBlcVwiIGFycmF5IGZvciBjaGFycyBpbiB0aGUgdGV4dCB3aGljaCBkbyBub3Qgb2NjdXIgaW4gdGhlIHBhdHRlcm4uXG4gICAgdmFyIGVtcHR5UGVxID0gbmV3IFVpbnQzMkFycmF5KGJNYXggKyAxKTtcbiAgICAvLyBNYXAgb2YgVVRGLTE2IGNoYXJhY3RlciBjb2RlIHRvIGJpdCB2ZWN0b3IgaW5kaWNhdGluZyBwb3NpdGlvbnMgaW4gdGhlXG4gICAgLy8gcGF0dGVybiB0aGF0IGVxdWFsIHRoYXQgY2hhcmFjdGVyLlxuICAgIHZhciBwZXEgPSBuZXcgTWFwKCk7XG4gICAgLy8gVmVyc2lvbiBvZiBgcGVxYCB0aGF0IG9ubHkgc3RvcmVzIG1hcHBpbmdzIGZvciBzbWFsbCBjaGFyYWN0ZXJzLiBUaGlzXG4gICAgLy8gYWxsb3dzIGZhc3RlciBsb29rdXBzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIHRleHQgYmVjYXVzZSBhIHNpbXBsZVxuICAgIC8vIGFycmF5IGxvb2t1cCBjYW4gYmUgZG9uZSBpbnN0ZWFkIG9mIGEgaGFzaCB0YWJsZSBsb29rdXAuXG4gICAgdmFyIGFzY2lpUGVxID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICBhc2NpaVBlcS5wdXNoKGVtcHR5UGVxKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIGBjdHgucGVxYCAtIGEgbWFwIG9mIGNoYXJhY3RlciB2YWx1ZXMgdG8gYml0bWFza3MgaW5kaWNhdGluZ1xuICAgIC8vIHBvc2l0aW9ucyBvZiB0aGF0IGNoYXJhY3RlciB3aXRoaW4gdGhlIHBhdHRlcm4sIHdoZXJlIGVhY2ggYml0IHJlcHJlc2VudHNcbiAgICAvLyBhIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLlxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgcGF0dGVybi5sZW5ndGg7IGMgKz0gMSkge1xuICAgICAgICB2YXIgdmFsID0gcGF0dGVybi5jaGFyQ29kZUF0KGMpO1xuICAgICAgICBpZiAocGVxLmhhcyh2YWwpKSB7XG4gICAgICAgICAgICAvLyBEdXBsaWNhdGUgY2hhciBpbiBwYXR0ZXJuLlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoYXJQZXEgPSBuZXcgVWludDMyQXJyYXkoYk1heCArIDEpO1xuICAgICAgICBwZXEuc2V0KHZhbCwgY2hhclBlcSk7XG4gICAgICAgIGlmICh2YWwgPCBhc2NpaVBlcS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFzY2lpUGVxW3ZhbF0gPSBjaGFyUGVxO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDw9IGJNYXg7IGIgKz0gMSkge1xuICAgICAgICAgICAgY2hhclBlcVtiXSA9IDA7XG4gICAgICAgICAgICAvLyBTZXQgYWxsIHRoZSBiaXRzIHdoZXJlIHRoZSBwYXR0ZXJuIG1hdGNoZXMgdGhlIGN1cnJlbnQgY2hhciAoY2gpLlxuICAgICAgICAgICAgLy8gRm9yIGluZGV4ZXMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGFsd2F5cyBzZXQgdGhlIGJpdCBhcyBpZiB0aGVcbiAgICAgICAgICAgIC8vIHBhdHRlcm4gY29udGFpbmVkIGEgd2lsZGNhcmQgY2hhciBpbiB0aGF0IHBvc2l0aW9uLlxuICAgICAgICAgICAgZm9yICh2YXIgciA9IDA7IHIgPCB3OyByICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gYiAqIHcgKyByO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gcGF0dGVybi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHBhdHRlcm4uY2hhckNvZGVBdChpZHgpID09PSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJQZXFbYl0gfD0gMSA8PCByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJbmRleCBvZiBsYXN0LWFjdGl2ZSBibG9jayBsZXZlbCBpbiB0aGUgY29sdW1uLlxuICAgIHZhciB5ID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKG1heEVycm9ycyAvIHcpIC0gMSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXhpbXVtIGVycm9yIGNvdW50IGF0IGJvdHRvbSBvZiBlYWNoIGJsb2NrLlxuICAgIHZhciBzY29yZSA9IG5ldyBVaW50MzJBcnJheShiTWF4ICsgMSk7XG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIHNjb3JlW2JdID0gKGIgKyAxKSAqIHc7XG4gICAgfVxuICAgIHNjb3JlW2JNYXhdID0gcGF0dGVybi5sZW5ndGg7XG4gICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0aWNhbCBkZWx0YXMgZm9yIGVhY2ggYmxvY2suXG4gICAgZm9yICh2YXIgYiA9IDA7IGIgPD0geTsgYiArPSAxKSB7XG4gICAgICAgIGN0eC5QW2JdID0gfjA7XG4gICAgICAgIGN0eC5NW2JdID0gMDtcbiAgICB9XG4gICAgLy8gUHJvY2VzcyBlYWNoIGNoYXIgb2YgdGhlIHRleHQsIGNvbXB1dGluZyB0aGUgZXJyb3IgY291bnQgZm9yIGB3YCBjaGFycyBvZlxuICAgIC8vIHRoZSBwYXR0ZXJuIGF0IGEgdGltZS5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRleHQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgLy8gTG9va3VwIHRoZSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IGNoYXIgZnJvbVxuICAgICAgICAvLyB0aGUgdGV4dCB3aXRoaW4gdGhlIHBhdHRlcm4uXG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHRleHQuY2hhckNvZGVBdChqKTtcbiAgICAgICAgdmFyIGNoYXJQZXEgPSB2b2lkIDA7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IGFzY2lpUGVxLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gRmFzdCBhcnJheSBsb29rdXAuXG4gICAgICAgICAgICBjaGFyUGVxID0gYXNjaWlQZXFbY2hhckNvZGVdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gU2xvd2VyIGhhc2ggdGFibGUgbG9va3VwLlxuICAgICAgICAgICAgY2hhclBlcSA9IHBlcS5nZXQoY2hhckNvZGUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGFyUGVxID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgY2hhclBlcSA9IGVtcHR5UGVxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENhbGN1bGF0ZSBlcnJvciBjb3VudCBmb3IgYmxvY2tzIHRoYXQgd2UgZGVmaW5pdGVseSBoYXZlIHRvIHByb2Nlc3MgZm9yXG4gICAgICAgIC8vIHRoaXMgY29sdW1uLlxuICAgICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8PSB5OyBiICs9IDEpIHtcbiAgICAgICAgICAgIGNhcnJ5ID0gYWR2YW5jZUJsb2NrKGN0eCwgY2hhclBlcSwgYiwgY2FycnkpO1xuICAgICAgICAgICAgc2NvcmVbYl0gKz0gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxzbyBuZWVkIHRvIGNvbXB1dGUgYW4gYWRkaXRpb25hbCBibG9jaywgb3IgaWYgd2UgY2FuIHJlZHVjZVxuICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIGJsb2NrcyBwcm9jZXNzZWQgZm9yIHRoZSBuZXh0IGNvbHVtbi5cbiAgICAgICAgaWYgKHNjb3JlW3ldIC0gY2FycnkgPD0gbWF4RXJyb3JzICYmXG4gICAgICAgICAgICB5IDwgYk1heCAmJlxuICAgICAgICAgICAgKGNoYXJQZXFbeSArIDFdICYgMSB8fCBjYXJyeSA8IDApKSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGlzIHVuZGVyIHRocmVzaG9sZCwgaW5jcmVhc2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhpcyBjb2x1bW4gJiBuZXh0IGJ5IDEuXG4gICAgICAgICAgICB5ICs9IDE7XG4gICAgICAgICAgICBjdHguUFt5XSA9IH4wO1xuICAgICAgICAgICAgY3R4Lk1beV0gPSAwO1xuICAgICAgICAgICAgdmFyIG1heEJsb2NrU2NvcmUgPSB5ID09PSBiTWF4ID8gcGF0dGVybi5sZW5ndGggJSB3IDogdztcbiAgICAgICAgICAgIHNjb3JlW3ldID1cbiAgICAgICAgICAgICAgICBzY29yZVt5IC0gMV0gK1xuICAgICAgICAgICAgICAgICAgICBtYXhCbG9ja1Njb3JlIC1cbiAgICAgICAgICAgICAgICAgICAgY2FycnkgK1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlQmxvY2soY3R4LCBjaGFyUGVxLCB5LCBjYXJyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBFcnJvciBjb3VudCBmb3IgYm90dG9tIGJsb2NrIGV4Y2VlZHMgdGhyZXNob2xkLCByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAgICAgICAgLy8gYmxvY2tzIHByb2Nlc3NlZCBmb3IgdGhlIG5leHQgY29sdW1uLlxuICAgICAgICAgICAgd2hpbGUgKHkgPiAwICYmIHNjb3JlW3ldID49IG1heEVycm9ycyArIHcpIHtcbiAgICAgICAgICAgICAgICB5IC09IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZXJyb3IgY291bnQgaXMgdW5kZXIgdGhyZXNob2xkLCByZXBvcnQgYSBtYXRjaC5cbiAgICAgICAgaWYgKHkgPT09IGJNYXggJiYgc2NvcmVbeV0gPD0gbWF4RXJyb3JzKSB7XG4gICAgICAgICAgICBpZiAoc2NvcmVbeV0gPCBtYXhFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAvLyBEaXNjYXJkIGFueSBlYXJsaWVyLCB3b3JzZSBtYXRjaGVzLlxuICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKDAsIG1hdGNoZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IC0xLFxuICAgICAgICAgICAgICAgIGVuZDogaiArIDEsXG4gICAgICAgICAgICAgICAgZXJyb3JzOiBzY29yZVt5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBCZWNhdXNlIGBzZWFyY2hgIG9ubHkgcmVwb3J0cyB0aGUgbWF0Y2hlcyB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gXCJyYXRjaGV0IGRvd25cIiB0aGUgbWF4IGVycm9yIHRocmVzaG9sZCB3aGVuZXZlciBhIG1hdGNoIGlzXG4gICAgICAgICAgICAvLyBlbmNvdW50ZXJlZCBhbmQgdGhlcmVieSBzYXZlIGEgc21hbGwgYW1vdW50IG9mIHdvcmsgZm9yIHRoZSByZW1haW5kZXJcbiAgICAgICAgICAgIC8vIG9mIHRoZSB0ZXh0LlxuICAgICAgICAgICAgbWF4RXJyb3JzID0gc2NvcmVbeV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZXM7XG59XG4vKipcbiAqIFNlYXJjaCBmb3IgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGB0ZXh0YCBhbGxvd2luZyB1cCB0byBgbWF4RXJyb3JzYCBlcnJvcnMuXG4gKlxuICogUmV0dXJucyB0aGUgc3RhcnQsIGFuZCBlbmQgcG9zaXRpb25zIGFuZCBlcnJvciBjb3VudHMgZm9yIGVhY2ggbG93ZXN0LWNvc3RcbiAqIG1hdGNoLiBPbmx5IHRoZSBcImJlc3RcIiBtYXRjaGVzIGFyZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHBhdHRlcm4sIG1heEVycm9ycykge1xuICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoRW5kcyh0ZXh0LCBwYXR0ZXJuLCBtYXhFcnJvcnMpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hTdGFydHModGV4dCwgcGF0dGVybiwgbWF0Y2hlcyk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBzZWFyY2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3089\n')},5232:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){"use strict";eval('\n// EXTERNAL MODULE: ./node_modules/approx-string-match/dist/index.js\nvar dist = __webpack_require__(3089);\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/match-quote.js\n\n/**\n * @typedef {import(\'approx-string-match\').Match} StringMatch\n */\n\n/**\n * @typedef Match\n * @prop {number} start - Start offset of match in text\n * @prop {number} end - End offset of match in text\n * @prop {number} score -\n * Score for the match between 0 and 1.0, where 1.0 indicates a perfect match\n * for the quote and context.\n */\n\n/**\n * Find the best approximate matches for `str` in `text` allowing up to `maxErrors` errors.\n *\n * @param {string} text\n * @param {string} str\n * @param {number} maxErrors\n * @return {StringMatch[]}\n */\n\nfunction search(text, str, maxErrors) {\n // Do a fast search for exact matches. The `approx-string-match` library\n // doesn\'t currently incorporate this optimization itself.\n var matchPos = 0;\n var exactMatches = [];\n\n while (matchPos !== -1) {\n matchPos = text.indexOf(str, matchPos);\n\n if (matchPos !== -1) {\n exactMatches.push({\n start: matchPos,\n end: matchPos + str.length,\n errors: 0\n });\n matchPos += 1;\n }\n }\n\n if (exactMatches.length > 0) {\n return exactMatches;\n } // If there are no exact matches, do a more expensive search for matches\n // with errors.\n\n\n return (0,dist/* default */.Z)(text, str, maxErrors);\n}\n/**\n * Compute a score between 0 and 1.0 for the similarity between `text` and `str`.\n *\n * @param {string} text\n * @param {string} str\n */\n\n\nfunction textMatchScore(text, str) {\n /* istanbul ignore next - `scoreMatch` will never pass an empty string */\n if (str.length === 0 || text.length === 0) {\n return 0.0;\n }\n\n var matches = search(text, str, str.length); // prettier-ignore\n\n return 1 - matches[0].errors / str.length;\n}\n/**\n * Find the best approximate match for `quote` in `text`.\n *\n * Returns `null` if no match exceeding the minimum quality threshold was found.\n *\n * @param {string} text - Document text to search\n * @param {string} quote - String to find within `text`\n * @param {Object} context -\n * Context in which the quote originally appeared. This is used to choose the\n * best match.\n * @param {string} [context.prefix] - Expected text before the quote\n * @param {string} [context.suffix] - Expected text after the quote\n * @param {number} [context.hint] - Expected offset of match within text\n * @return {Match|null}\n */\n\n\nfunction matchQuote(text, quote) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (quote.length === 0) {\n return null;\n } // Choose the maximum number of errors to allow for the initial search.\n // This choice involves a tradeoff between:\n //\n // - Recall (proportion of "good" matches found)\n // - Precision (proportion of matches found which are "good")\n // - Cost of the initial search and of processing the candidate matches [1]\n //\n // [1] Specifically, the expected-time complexity of the initial search is\n // `O((maxErrors / 32) * text.length)`. See `approx-string-match` docs.\n\n\n var maxErrors = Math.min(256, quote.length / 2); // Find closest matches for `quote` in `text` based on edit distance.\n\n var matches = search(text, quote, maxErrors);\n\n if (matches.length === 0) {\n return null;\n }\n /**\n * Compute a score between 0 and 1.0 for a match candidate.\n *\n * @param {StringMatch} match\n */\n\n\n var scoreMatch = function scoreMatch(match) {\n var quoteWeight = 50; // Similarity of matched text to quote.\n\n var prefixWeight = 20; // Similarity of text before matched text to `context.prefix`.\n\n var suffixWeight = 20; // Similarity of text after matched text to `context.suffix`.\n\n var posWeight = 2; // Proximity to expected location. Used as a tie-breaker.\n\n var quoteScore = 1 - match.errors / quote.length;\n var prefixScore = context.prefix ? textMatchScore(text.slice(Math.max(0, match.start - context.prefix.length), match.start), context.prefix) : 1.0;\n var suffixScore = context.suffix ? textMatchScore(text.slice(match.end, match.end + context.suffix.length), context.suffix) : 1.0;\n var posScore = 1.0;\n\n if (typeof context.hint === \'number\') {\n var offset = Math.abs(match.start - context.hint);\n posScore = 1.0 - offset / text.length;\n }\n\n var rawScore = quoteWeight * quoteScore + prefixWeight * prefixScore + suffixWeight * suffixScore + posWeight * posScore;\n var maxScore = quoteWeight + prefixWeight + suffixWeight + posWeight;\n var normalizedScore = rawScore / maxScore;\n return normalizedScore;\n }; // Rank matches based on similarity of actual and expected surrounding text\n // and actual/expected offset in the document text.\n\n\n var scoredMatches = matches.map(function (m) {\n return {\n start: m.start,\n end: m.end,\n score: scoreMatch(m)\n };\n }); // Choose match with highest score.\n\n scoredMatches.sort(function (a, b) {\n return b.score - a.score;\n });\n return scoredMatches[0];\n}\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/text-range.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _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; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * Return the combined length of text nodes contained in `node`.\n *\n * @param {Node} node\n */\nfunction nodeTextLength(node) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.TEXT_NODE:\n // nb. `textContent` excludes text in comments and processing instructions\n // when called on a parent element, so we don\'t need to subtract that here.\n return (\n /** @type {string} */\n node.textContent.length\n );\n\n default:\n return 0;\n }\n}\n/**\n * Return the total length of the text of all previous siblings of `node`.\n *\n * @param {Node} node\n */\n\n\nfunction previousSiblingsTextLength(node) {\n var sibling = node.previousSibling;\n var length = 0;\n\n while (sibling) {\n length += nodeTextLength(sibling);\n sibling = sibling.previousSibling;\n }\n\n return length;\n}\n/**\n * Resolve one or more character offsets within an element to (text node, position)\n * pairs.\n *\n * @param {Element} element\n * @param {number[]} offsets - Offsets, which must be sorted in ascending order\n * @return {{ node: Text, offset: number }[]}\n */\n\n\nfunction resolveOffsets(element) {\n for (var _len = arguments.length, offsets = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n offsets[_key - 1] = arguments[_key];\n }\n\n var nextOffset = offsets.shift();\n var nodeIter =\n /** @type {Document} */\n element.ownerDocument.createNodeIterator(element, NodeFilter.SHOW_TEXT);\n var results = [];\n var currentNode = nodeIter.nextNode();\n var textNode;\n var length = 0; // Find the text node containing the `nextOffset`th character from the start\n // of `element`.\n\n while (nextOffset !== undefined && currentNode) {\n textNode =\n /** @type {Text} */\n currentNode;\n\n if (length + textNode.data.length > nextOffset) {\n results.push({\n node: textNode,\n offset: nextOffset - length\n });\n nextOffset = offsets.shift();\n } else {\n currentNode = nodeIter.nextNode();\n length += textNode.data.length;\n }\n } // Boundary case.\n\n\n while (nextOffset !== undefined && textNode && length === nextOffset) {\n results.push({\n node: textNode,\n offset: textNode.data.length\n });\n nextOffset = offsets.shift();\n }\n\n if (nextOffset !== undefined) {\n throw new RangeError(\'Offset exceeds text length\');\n }\n\n return results;\n}\n\nvar RESOLVE_FORWARDS = 1;\nvar RESOLVE_BACKWARDS = 2;\n/**\n * Represents an offset within the text content of an element.\n *\n * This position can be resolved to a specific descendant node in the current\n * DOM subtree of the element using the `resolve` method.\n */\n\nvar text_range_TextPosition = /*#__PURE__*/function () {\n /**\n * Construct a `TextPosition` that refers to the text position `offset` within\n * the text content of `element`.\n *\n * @param {Element} element\n * @param {number} offset\n */\n function TextPosition(element, offset) {\n _classCallCheck(this, TextPosition);\n\n if (offset < 0) {\n throw new Error(\'Offset is invalid\');\n }\n /** Element that `offset` is relative to. */\n\n\n this.element = element;\n /** Character offset from the start of the element\'s `textContent`. */\n\n this.offset = offset;\n }\n /**\n * Return a copy of this position with offset relative to a given ancestor\n * element.\n *\n * @param {Element} parent - Ancestor of `this.element`\n * @return {TextPosition}\n */\n\n\n _createClass(TextPosition, [{\n key: "relativeTo",\n value: function relativeTo(parent) {\n if (!parent.contains(this.element)) {\n throw new Error(\'Parent is not an ancestor of current element\');\n }\n\n var el = this.element;\n var offset = this.offset;\n\n while (el !== parent) {\n offset += previousSiblingsTextLength(el);\n el =\n /** @type {Element} */\n el.parentElement;\n }\n\n return new TextPosition(el, offset);\n }\n /**\n * Resolve the position to a specific text node and offset within that node.\n *\n * Throws if `this.offset` exceeds the length of the element\'s text. In the\n * case where the element has no text and `this.offset` is 0, the `direction`\n * option determines what happens.\n *\n * Offsets at the boundary between two nodes are resolved to the start of the\n * node that begins at the boundary.\n *\n * @param {Object} [options]\n * @param {RESOLVE_FORWARDS|RESOLVE_BACKWARDS} [options.direction] -\n * Specifies in which direction to search for the nearest text node if\n * `this.offset` is `0` and `this.element` has no text. If not specified\n * an error is thrown.\n * @return {{ node: Text, offset: number }}\n * @throws {RangeError}\n */\n\n }, {\n key: "resolve",\n value: function resolve() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n try {\n return resolveOffsets(this.element, this.offset)[0];\n } catch (err) {\n if (this.offset === 0 && options.direction !== undefined) {\n var tw = document.createTreeWalker(this.element.getRootNode(), NodeFilter.SHOW_TEXT);\n tw.currentNode = this.element;\n var forwards = options.direction === RESOLVE_FORWARDS;\n var text =\n /** @type {Text|null} */\n forwards ? tw.nextNode() : tw.previousNode();\n\n if (!text) {\n throw err;\n }\n\n return {\n node: text,\n offset: forwards ? 0 : text.data.length\n };\n } else {\n throw err;\n }\n }\n }\n /**\n * Construct a `TextPosition` that refers to the `offset`th character within\n * `node`.\n *\n * @param {Node} node\n * @param {number} offset\n * @return {TextPosition}\n */\n\n }], [{\n key: "fromCharOffset",\n value: function fromCharOffset(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n return TextPosition.fromPoint(node, offset);\n\n case Node.ELEMENT_NODE:\n return new TextPosition(\n /** @type {Element} */\n node, offset);\n\n default:\n throw new Error(\'Node is not an element or text node\');\n }\n }\n /**\n * Construct a `TextPosition` representing the range start or end point (node, offset).\n *\n * @param {Node} node - Text or Element node\n * @param {number} offset - Offset within the node.\n * @return {TextPosition}\n */\n\n }, {\n key: "fromPoint",\n value: function fromPoint(node, offset) {\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n {\n if (offset < 0 || offset >\n /** @type {Text} */\n node.data.length) {\n throw new Error(\'Text node offset is out of range\');\n }\n\n if (!node.parentElement) {\n throw new Error(\'Text node has no parent\');\n } // Get the offset from the start of the parent element.\n\n\n var textOffset = previousSiblingsTextLength(node) + offset;\n return new TextPosition(node.parentElement, textOffset);\n }\n\n case Node.ELEMENT_NODE:\n {\n if (offset < 0 || offset > node.childNodes.length) {\n throw new Error(\'Child node offset is out of range\');\n } // Get the text length before the `offset`th child of element.\n\n\n var _textOffset = 0;\n\n for (var i = 0; i < offset; i++) {\n _textOffset += nodeTextLength(node.childNodes[i]);\n }\n\n return new TextPosition(\n /** @type {Element} */\n node, _textOffset);\n }\n\n default:\n throw new Error(\'Point is not in an element or text node\');\n }\n }\n }]);\n\n return TextPosition;\n}();\n/**\n * Represents a region of a document as a (start, end) pair of `TextPosition` points.\n *\n * Representing a range in this way allows for changes in the DOM content of the\n * range which don\'t affect its text content, without affecting the text content\n * of the range itself.\n */\n\nvar text_range_TextRange = /*#__PURE__*/function () {\n /**\n * Construct an immutable `TextRange` from a `start` and `end` point.\n *\n * @param {TextPosition} start\n * @param {TextPosition} end\n */\n function TextRange(start, end) {\n _classCallCheck(this, TextRange);\n\n this.start = start;\n this.end = end;\n }\n /**\n * Return a copy of this range with start and end positions relative to a\n * given ancestor. See `TextPosition.relativeTo`.\n *\n * @param {Element} element\n */\n\n\n _createClass(TextRange, [{\n key: "relativeTo",\n value: function relativeTo(element) {\n return new TextRange(this.start.relativeTo(element), this.end.relativeTo(element));\n }\n /**\n * Resolve the `TextRange` to a DOM range.\n *\n * The resulting DOM Range will always start and end in a `Text` node.\n * Hence `TextRange.fromRange(range).toRange()` can be used to "shrink" a\n * range to the text it contains.\n *\n * May throw if the `start` or `end` positions cannot be resolved to a range.\n *\n * @return {Range}\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var start;\n var end;\n\n if (this.start.element === this.end.element && this.start.offset <= this.end.offset) {\n // Fast path for start and end points in same element.\n var _resolveOffsets = resolveOffsets(this.start.element, this.start.offset, this.end.offset);\n\n var _resolveOffsets2 = _slicedToArray(_resolveOffsets, 2);\n\n start = _resolveOffsets2[0];\n end = _resolveOffsets2[1];\n } else {\n start = this.start.resolve({\n direction: RESOLVE_FORWARDS\n });\n end = this.end.resolve({\n direction: RESOLVE_BACKWARDS\n });\n }\n\n var range = new Range();\n range.setStart(start.node, start.offset);\n range.setEnd(end.node, end.offset);\n return range;\n }\n /**\n * Convert an existing DOM `Range` to a `TextRange`\n *\n * @param {Range} range\n * @return {TextRange}\n */\n\n }], [{\n key: "fromRange",\n value: function fromRange(range) {\n var start = text_range_TextPosition.fromPoint(range.startContainer, range.startOffset);\n var end = text_range_TextPosition.fromPoint(range.endContainer, range.endOffset);\n return new TextRange(start, end);\n }\n /**\n * Return a `TextRange` from the `start`th to `end`th characters in `root`.\n *\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n\n }, {\n key: "fromOffsets",\n value: function fromOffsets(root, start, end) {\n return new TextRange(new text_range_TextPosition(root, start), new text_range_TextPosition(root, end));\n }\n }]);\n\n return TextRange;\n}();\n;// CONCATENATED MODULE: ./src/vendor/hypothesis/anchoring/types.js\nfunction 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; }\n\nfunction _objectSpread(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; }\n\nfunction _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; }\n\nfunction types_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction types_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction types_createClass(Constructor, protoProps, staticProps) { if (protoProps) types_defineProperties(Constructor.prototype, protoProps); if (staticProps) types_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * This module exports a set of classes for converting between DOM `Range`\n * objects and different types of selectors. It is mostly a thin wrapper around a\n * set of anchoring libraries. It serves two main purposes:\n *\n * 1. Providing a consistent interface across different types of anchors.\n * 2. Insulating the rest of the code from API changes in the underlying anchoring\n * libraries.\n */\n\n\n\n/**\n * @typedef {import(\'../../types/api\').RangeSelector} RangeSelector\n * @typedef {import(\'../../types/api\').TextPositionSelector} TextPositionSelector\n * @typedef {import(\'../../types/api\').TextQuoteSelector} TextQuoteSelector\n */\n\n/**\n * Converts between `RangeSelector` selectors and `Range` objects.\n */\n\nvar RangeAnchor = /*#__PURE__*/(/* unused pure expression or super */ null && (function () {\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n function RangeAnchor(root, range) {\n types_classCallCheck(this, RangeAnchor);\n\n this.root = root;\n this.range = range;\n }\n /**\n * @param {Node} root - A root element from which to anchor.\n * @param {Range} range - A range describing the anchor.\n */\n\n\n types_createClass(RangeAnchor, [{\n key: "toRange",\n value: function toRange() {\n return this.range;\n }\n /**\n * @return {RangeSelector}\n */\n\n }, {\n key: "toSelector",\n value: function toSelector() {\n // "Shrink" the range so that it tightly wraps its text. This ensures more\n // predictable output for a given text selection.\n var normalizedRange = TextRange.fromRange(this.range).toRange();\n var textRange = TextRange.fromRange(normalizedRange);\n var startContainer = xpathFromNode(textRange.start.element, this.root);\n var endContainer = xpathFromNode(textRange.end.element, this.root);\n return {\n type: \'RangeSelector\',\n startContainer: startContainer,\n startOffset: textRange.start.offset,\n endContainer: endContainer,\n endOffset: textRange.end.offset\n };\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n return new RangeAnchor(root, range);\n }\n /**\n * Create an anchor from a serialized `RangeSelector` selector.\n *\n * @param {Element} root - A root element from which to anchor.\n * @param {RangeSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var startContainer = nodeFromXPath(selector.startContainer, root);\n\n if (!startContainer) {\n throw new Error(\'Failed to resolve startContainer XPath\');\n }\n\n var endContainer = nodeFromXPath(selector.endContainer, root);\n\n if (!endContainer) {\n throw new Error(\'Failed to resolve endContainer XPath\');\n }\n\n var startPos = TextPosition.fromCharOffset(startContainer, selector.startOffset);\n var endPos = TextPosition.fromCharOffset(endContainer, selector.endOffset);\n var range = new TextRange(startPos, endPos).toRange();\n return new RangeAnchor(root, range);\n }\n }]);\n\n return RangeAnchor;\n}()));\n/**\n * Converts between `TextPositionSelector` selectors and `Range` objects.\n */\n\nvar TextPositionAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root\n * @param {number} start\n * @param {number} end\n */\n function TextPositionAnchor(root, start, end) {\n types_classCallCheck(this, TextPositionAnchor);\n\n this.root = root;\n this.start = start;\n this.end = end;\n }\n /**\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextPositionAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextPositionSelector}\n */\n function toSelector() {\n return {\n type: \'TextPositionSelector\',\n start: this.start,\n end: this.end\n };\n }\n }, {\n key: "toRange",\n value: function toRange() {\n return text_range_TextRange.fromOffsets(this.root, this.start, this.end).toRange();\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n return new TextPositionAnchor(root, textRange.start.offset, textRange.end.offset);\n }\n /**\n * @param {Element} root\n * @param {TextPositionSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n return new TextPositionAnchor(root, selector.start, selector.end);\n }\n }]);\n\n return TextPositionAnchor;\n}();\n/**\n * @typedef QuoteMatchOptions\n * @prop {number} [hint] - Expected position of match in text. See `matchQuote`.\n */\n\n/**\n * Converts between `TextQuoteSelector` selectors and `Range` objects.\n */\n\nvar TextQuoteAnchor = /*#__PURE__*/function () {\n /**\n * @param {Element} root - A root element from which to anchor.\n * @param {string} exact\n * @param {Object} context\n * @param {string} [context.prefix]\n * @param {string} [context.suffix]\n */\n function TextQuoteAnchor(root, exact) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n types_classCallCheck(this, TextQuoteAnchor);\n\n this.root = root;\n this.exact = exact;\n this.context = context;\n }\n /**\n * Create a `TextQuoteAnchor` from a range.\n *\n * Will throw if `range` does not contain any text nodes.\n *\n * @param {Element} root\n * @param {Range} range\n */\n\n\n types_createClass(TextQuoteAnchor, [{\n key: "toSelector",\n value:\n /**\n * @return {TextQuoteSelector}\n */\n function toSelector() {\n return {\n type: \'TextQuoteSelector\',\n exact: this.exact,\n prefix: this.context.prefix,\n suffix: this.context.suffix\n };\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toRange",\n value: function toRange() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return this.toPositionAnchor(options).toRange();\n }\n /**\n * @param {QuoteMatchOptions} [options]\n */\n\n }, {\n key: "toPositionAnchor",\n value: function toPositionAnchor() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var text =\n /** @type {string} */\n this.root.textContent;\n var match = matchQuote(text, this.exact, _objectSpread(_objectSpread({}, this.context), {}, {\n hint: options.hint\n }));\n\n if (!match) {\n throw new Error(\'Quote not found\');\n }\n\n return new TextPositionAnchor(this.root, match.start, match.end);\n }\n }], [{\n key: "fromRange",\n value: function fromRange(root, range) {\n var text =\n /** @type {string} */\n root.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(root);\n var start = textRange.start.offset;\n var end = textRange.end.offset; // Number of characters around the quote to capture as context. We currently\n // always use a fixed amount, but it would be better if this code was aware\n // of logical boundaries in the document (paragraph, article etc.) to avoid\n // capturing text unrelated to the quote.\n //\n // In regular prose the ideal content would often be the surrounding sentence.\n // This is a natural unit of meaning which enables displaying quotes in\n // context even when the document is not available. We could use `Intl.Segmenter`\n // for this when available.\n\n var contextLen = 32;\n return new TextQuoteAnchor(root, text.slice(start, end), {\n prefix: text.slice(Math.max(0, start - contextLen), start),\n suffix: text.slice(end, Math.min(text.length, end + contextLen))\n });\n }\n /**\n * @param {Element} root\n * @param {TextQuoteSelector} selector\n */\n\n }, {\n key: "fromSelector",\n value: function fromSelector(root, selector) {\n var prefix = selector.prefix,\n suffix = selector.suffix;\n return new TextQuoteAnchor(root, selector.exact, {\n prefix: prefix,\n suffix: suffix\n });\n }\n }]);\n\n return TextQuoteAnchor;\n}();\n;// CONCATENATED MODULE: ./src/utils.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n // Catch JS errors to log them in the app.\n\nwindow.addEventListener("error", function (event) {\n Android.logError(event.message, event.filename, event.lineno);\n}, false); // Notify native code that the page has loaded.\n\nwindow.addEventListener("load", function () {\n var observer = new ResizeObserver(function () {\n appendVirtualColumnIfNeeded();\n });\n observer.observe(document.body);\n window.addEventListener("orientationchange", function () {\n onViewportWidthChanged();\n snapCurrentOffset();\n });\n onViewportWidthChanged();\n}, false);\n/**\n * Having an odd number of columns when displaying two columns per screen causes snapping and page\n * turning issues. To fix this, we insert a blank virtual column at the end of the resource.\n */\n\nfunction appendVirtualColumnIfNeeded() {\n var id = "readium-virtual-page";\n var virtualCol = document.getElementById(id);\n\n if (isScrollModeEnabled() || getColumnCountPerScreen() != 2) {\n if (virtualCol) {\n virtualCol.remove();\n }\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var colCount = documentWidth / pageWidth;\n var hasOddColCount = Math.round(colCount * 2) / 2 % 1 > 0.1;\n\n if (hasOddColCount) {\n if (virtualCol) {\n virtualCol.remove();\n } else {\n virtualCol = document.createElement("div");\n virtualCol.setAttribute("id", id);\n virtualCol.style.breakBefore = "column";\n virtualCol.innerHTML = "​"; // zero-width space\n\n document.body.appendChild(virtualCol);\n }\n }\n }\n}\n\nvar pageWidth = 1;\n\nfunction onViewportWidthChanged() {\n // We can\'t rely on window.innerWidth for the pageWidth on Android, because if the\n // device pixel ratio is not an integer, we get rounding issues offsetting the pages.\n //\n // See https://github.com/readium/readium-css/issues/97\n // and https://github.com/readium/r2-navigator-kotlin/issues/146\n var width = Android.getViewportWidth();\n pageWidth = width / window.devicePixelRatio;\n setProperty("--RS__viewportWidth", "calc(" + width + "px / " + window.devicePixelRatio + ")");\n}\n\nfunction getColumnCountPerScreen() {\n return parseInt(window.getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n}\nfunction isScrollModeEnabled() {\n return document.documentElement.style.getPropertyValue("--USER__scroll").toString().trim() == "readium-scroll-on";\n}\nfunction isRTL() {\n return document.body.dir.toLowerCase() == "rtl";\n} // Scroll to the given TagId in document and snap.\n\nfunction scrollToId(id) {\n var element = document.getElementById(id);\n\n if (!element) {\n return false;\n }\n\n return scrollToRect(element.getBoundingClientRect());\n} // Position must be in the range [0 - 1], 0-100%.\n\nfunction scrollToPosition(position) {\n // Android.log("scrollToPosition " + position);\n if (position < 0 || position > 1) {\n throw "scrollToPosition() must be given a position from 0.0 to 1.0";\n }\n\n var offset;\n\n if (isScrollModeEnabled()) {\n offset = document.scrollingElement.scrollHeight * position;\n document.scrollingElement.scrollTop = offset; // window.scrollTo(0, offset);\n } else {\n var documentWidth = document.scrollingElement.scrollWidth;\n var factor = isRTL() ? -1 : 1;\n offset = documentWidth * position * factor;\n document.scrollingElement.scrollLeft = snapOffset(offset);\n }\n} // Scrolls to the first occurrence of the given text snippet.\n//\n// The expected text argument is a Locator Text object, as defined here:\n// https://readium.org/architecture/models/locators/\n\nfunction scrollToText(text) {\n var range = rangeFromLocator({\n text: text\n });\n\n if (!range) {\n return false;\n }\n\n scrollToRange(range);\n return true;\n}\n\nfunction scrollToRange(range) {\n return scrollToRect(range.getBoundingClientRect());\n}\n\nfunction scrollToRect(rect) {\n if (isScrollModeEnabled()) {\n document.scrollingElement.scrollTop = rect.top + window.scrollY - window.innerHeight / 2;\n } else {\n document.scrollingElement.scrollLeft = snapOffset(rect.left + window.scrollX);\n }\n\n return true;\n}\n\nfunction scrollToStart() {\n // Android.log("scrollToStart");\n if (!isScrollModeEnabled()) {\n document.scrollingElement.scrollLeft = 0;\n } else {\n document.scrollingElement.scrollTop = 0;\n window.scrollTo(0, 0);\n }\n}\nfunction scrollToEnd() {\n // Android.log("scrollToEnd");\n if (!isScrollModeEnabled()) {\n var factor = isRTL() ? -1 : 1;\n document.scrollingElement.scrollLeft = snapOffset(document.scrollingElement.scrollWidth * factor);\n } else {\n document.scrollingElement.scrollTop = document.body.scrollHeight;\n window.scrollTo(0, document.body.scrollHeight);\n }\n} // Returns false if the page is already at the left-most scroll offset.\n\nfunction scrollLeft() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX - pageWidth;\n var minOffset = isRTL() ? -(documentWidth - pageWidth) : 0;\n return scrollToOffset(Math.max(offset, minOffset));\n} // Returns false if the page is already at the right-most scroll offset.\n\nfunction scrollRight() {\n var documentWidth = document.scrollingElement.scrollWidth;\n var offset = window.scrollX + pageWidth;\n var maxOffset = isRTL() ? 0 : documentWidth - pageWidth;\n return scrollToOffset(Math.min(offset, maxOffset));\n} // Scrolls to the given left offset.\n// Returns false if the page scroll position is already close enough to the given offset.\n\nfunction scrollToOffset(offset) {\n // Android.log("scrollToOffset " + offset);\n if (isScrollModeEnabled()) {\n throw "Called scrollToOffset() with scroll mode enabled. This can only be used in paginated mode.";\n }\n\n var currentOffset = window.scrollX;\n document.scrollingElement.scrollLeft = snapOffset(offset); // In some case the scrollX cannot reach the position respecting to innerWidth\n\n var diff = Math.abs(currentOffset - offset) / pageWidth;\n return diff > 0.01;\n} // Snap the offset to the screen width (page width).\n\n\nfunction snapOffset(offset) {\n var value = offset + (isRTL() ? -1 : 1);\n return value - value % pageWidth;\n} // Snaps the current offset to the page width.\n\n\nfunction snapCurrentOffset() {\n // Android.log("snapCurrentOffset");\n if (isScrollModeEnabled()) {\n return;\n }\n\n var currentOffset = window.scrollX; // Adds half a page to make sure we don\'t snap to the previous page.\n\n var factor = isRTL() ? -1 : 1;\n var delta = factor * (pageWidth / 2);\n document.scrollingElement.scrollLeft = snapOffset(currentOffset + delta);\n}\n\nfunction rangeFromLocator(locator) {\n var text = locator.text;\n\n if (!text || !text.highlight) {\n return null;\n }\n\n try {\n var root;\n var locations = locator.locations;\n\n if (locations && locations.cssSelector) {\n root = document.querySelector(locations.cssSelector);\n }\n\n if (!root) {\n root = document.body;\n }\n\n var anchor = new TextQuoteAnchor(root, text.highlight, {\n prefix: text.before,\n suffix: text.after\n });\n return anchor.toRange();\n } catch (e) {\n logError(e);\n return null;\n }\n} /// User Settings.\n// For setting user setting.\n\nfunction setProperty(key, value) {\n var root = document.documentElement;\n root.style.setProperty(key, value);\n} // For removing user setting.\n\nfunction removeProperty(key) {\n var root = document.documentElement;\n root.style.removeProperty(key);\n} /// Toolkit\n\nfunction log() {\n var message = Array.prototype.slice.call(arguments).join(" ");\n Android.log(message);\n}\nfunction logError(message) {\n Android.logError(message, "", 0);\n}\n;// CONCATENATED MODULE: ./src/rect.js\nfunction _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); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = rect_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction rect_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return rect_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return rect_arrayLikeToArray(o, minLen); }\n\nfunction rect_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; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\nvar debug = false;\n/**\n * Converts a DOMRect into a JSON object understandable by the native side.\n */\n\nfunction toNativeRect(rect) {\n var pixelRatio = window.devicePixelRatio;\n var width = rect.width * pixelRatio;\n var height = rect.height * pixelRatio;\n var left = rect.left * pixelRatio;\n var top = rect.top * pixelRatio;\n var right = left + width;\n var bottom = top + height;\n return {\n width: width,\n height: height,\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\nfunction getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var clientRects = range.getClientRects();\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator = _createForOfIteratorHelper(clientRects),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var rangeClientRect = _step.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n var mergedRects = mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = removeContainedRects(mergedRects, tolerance);\n var newRects = replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n rect_log("CLIENT RECT: remove small");\n newRects.splice(j, 1);\n } else {\n rect_log("CLIENT RECT: remove small, but keep otherwise empty!");\n break;\n }\n }\n }\n\n rect_log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n return newRects;\n}\n\nfunction mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("mergeTouchingRects rect1 === rect2 ??!");\n return "continue";\n }\n\n var rectsLineUpVertically = almostEqual(rect1.top, rect2.top, tolerance) && almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = almostEqual(rect1.left, rect2.left, tolerance) && almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n rect_log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret = _loop(j);\n\n if (_ret === "continue") continue;\n if (_typeof(_ret) === "object") return _ret.v;\n }\n }\n\n return rects;\n}\n\nfunction getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator2 = _createForOfIteratorHelper(rects),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var rect = _step2.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n rect_log("CLIENT RECT: remove tiny");\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator3 = _createForOfIteratorHelper(rects),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var possiblyContainingRect = _step3.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (rectContains(possiblyContainingRect, rect, tolerance)) {\n rect_log("CLIENT RECT: remove contained");\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction rectContains(rect1, rect2, tolerance) {\n return rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || almostEqual(rect.left, x, tolerance)) && (rect.right > x || almostEqual(rect.right, x, tolerance)) && (rect.top < y || almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n rect_log("replaceOverlapingRects rect1 === rect2 ??!");\n continue;\n }\n\n if (rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret2 = function () {\n var toAdd = [];\n var toRemove = void 0;\n var subtractRects1 = rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n var subtractRects2 = rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n }\n }\n\n rect_log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: replaceOverlapingRects(newRects)\n };\n }();\n\n if (_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction rectSubtract(rect1, rect2) {\n var rectIntersected = rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n return {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n}\n\nfunction rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction rect_log() {\n if (debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/decorator.js\nfunction decorator_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = decorator_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction decorator_slicedToArray(arr, i) { return decorator_arrayWithHoles(arr) || decorator_iterableToArrayLimit(arr, i) || decorator_unsupportedIterableToArray(arr, i) || decorator_nonIterableRest(); }\n\nfunction decorator_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction decorator_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return decorator_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return decorator_arrayLikeToArray(o, minLen); }\n\nfunction decorator_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; }\n\nfunction decorator_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction decorator_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nvar styles = new Map();\nvar groups = new Map();\nvar lastGroupId = 0;\n/**\n * Registers a list of additional supported Decoration Templates.\n *\n * Each template object is indexed by the style ID.\n */\n\nfunction registerTemplates(newStyles) {\n var stylesheet = "";\n\n for (var _i = 0, _Object$entries = Object.entries(newStyles); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = decorator_slicedToArray(_Object$entries[_i], 2),\n id = _Object$entries$_i[0],\n style = _Object$entries$_i[1];\n\n styles.set(id, style);\n\n if (style.stylesheet) {\n stylesheet += style.stylesheet + "\\n";\n }\n }\n\n if (stylesheet) {\n var styleElement = document.createElement("style");\n styleElement.innerHTML = stylesheet;\n document.getElementsByTagName("head")[0].appendChild(styleElement);\n }\n}\n/**\n * Returns an instance of DecorationGroup for the given group name.\n */\n\nfunction getDecorations(groupName) {\n var group = groups.get(groupName);\n\n if (!group) {\n var id = "r2-decoration-" + lastGroupId++;\n group = DecorationGroup(id, groupName);\n groups.set(groupName, group);\n }\n\n return group;\n}\n/**\n * Handles click events on a Decoration.\n * Returns whether a decoration matched this event.\n */\n\nfunction handleDecorationClickEvent(event, clickEvent) {\n if (groups.size === 0) {\n return false;\n }\n\n function findTarget() {\n var _iterator = decorator_createForOfIteratorHelper(groups),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var _step$value = decorator_slicedToArray(_step.value, 2),\n group = _step$value[0],\n groupContent = _step$value[1];\n\n var _iterator2 = decorator_createForOfIteratorHelper(groupContent.items.reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var item = _step2.value;\n\n if (!item.clickableElements) {\n continue;\n }\n\n var _iterator3 = decorator_createForOfIteratorHelper(item.clickableElements),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var element = _step3.value;\n var rect = element.getBoundingClientRect().toJSON();\n\n if (rectContainsPoint(rect, event.clientX, event.clientY, 1)) {\n return {\n group: group,\n item: item,\n element: element,\n rect: rect\n };\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n var target = findTarget();\n\n if (!target) {\n return false;\n }\n\n return Android.onDecorationActivated(JSON.stringify({\n id: target.item.decoration.id,\n group: target.group,\n rect: toNativeRect(target.item.range.getBoundingClientRect()),\n click: clickEvent\n }));\n}\n/**\n * Creates a DecorationGroup object from a unique HTML ID and its name.\n */\n\nfunction DecorationGroup(groupId, groupName) {\n var items = [];\n var lastItemId = 0;\n var container = null;\n /**\n * Adds a new decoration to the group.\n */\n\n function add(decoration) {\n var id = groupId + "-" + lastItemId++;\n var range = rangeFromLocator(decoration.locator);\n\n if (!range) {\n log("Can\'t locate DOM range for decoration", decoration);\n return;\n }\n\n var item = {\n id: id,\n decoration: decoration,\n range: range\n };\n items.push(item);\n layout(item);\n }\n /**\n * Removes the decoration with given ID from the group.\n */\n\n\n function remove(decorationId) {\n var index = items.findIndex(function (i) {\n return i.decoration.id === decorationId;\n });\n\n if (index === -1) {\n return;\n }\n\n var item = items[index];\n items.splice(index, 1);\n item.clickableElements = null;\n\n if (item.container) {\n item.container.remove();\n item.container = null;\n }\n }\n /**\n * Notifies that the given decoration was modified and needs to be updated.\n */\n\n\n function update(decoration) {\n remove(decoration.id);\n add(decoration);\n }\n /**\n * Removes all decorations from this group.\n */\n\n\n function clear() {\n clearContainer();\n items.length = 0;\n }\n /**\n * Recreates the decoration elements.\n *\n * To be called after reflowing the resource, for example.\n */\n\n\n function requestLayout() {\n clearContainer();\n items.forEach(function (item) {\n return layout(item);\n });\n }\n /**\n * Layouts a single Decoration item.\n */\n\n\n function layout(item) {\n var groupContainer = requireContainer();\n var style = styles.get(item.decoration.style);\n\n if (!style) {\n logError("Unknown decoration style: ".concat(item.decoration.style));\n return;\n }\n\n var itemContainer = document.createElement("div");\n itemContainer.setAttribute("id", item.id);\n itemContainer.setAttribute("data-style", item.decoration.style);\n itemContainer.style.setProperty("pointer-events", "none");\n var viewportWidth = window.innerWidth;\n var columnCount = parseInt(getComputedStyle(document.documentElement).getPropertyValue("column-count"));\n var pageWidth = viewportWidth / (columnCount || 1);\n var scrollingElement = document.scrollingElement;\n var xOffset = scrollingElement.scrollLeft;\n var yOffset = scrollingElement.scrollTop;\n\n function positionElement(element, rect, boundingRect) {\n element.style.position = "absolute";\n\n if (style.width === "wrap") {\n element.style.width = "".concat(rect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(rect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "viewport") {\n element.style.width = "".concat(viewportWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n var left = Math.floor(rect.left / viewportWidth) * viewportWidth;\n element.style.left = "".concat(left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "bounds") {\n element.style.width = "".concat(boundingRect.width, "px");\n element.style.height = "".concat(rect.height, "px");\n element.style.left = "".concat(boundingRect.left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n } else if (style.width === "page") {\n element.style.width = "".concat(pageWidth, "px");\n element.style.height = "".concat(rect.height, "px");\n\n var _left = Math.floor(rect.left / pageWidth) * pageWidth;\n\n element.style.left = "".concat(_left + xOffset, "px");\n element.style.top = "".concat(rect.top + yOffset, "px");\n }\n }\n\n var boundingRect = item.range.getBoundingClientRect();\n var elementTemplate;\n\n try {\n var template = document.createElement("template");\n template.innerHTML = item.decoration.element.trim();\n elementTemplate = template.content.firstElementChild;\n } catch (error) {\n logError("Invalid decoration element \\"".concat(item.decoration.element, "\\": ").concat(error.message));\n return;\n }\n\n if (style.layout === "boxes") {\n var doNotMergeHorizontallyAlignedRects = true;\n var clientRects = getClientRectsNoOverlap(item.range, doNotMergeHorizontallyAlignedRects);\n clientRects = clientRects.sort(function (r1, r2) {\n if (r1.top < r2.top) {\n return -1;\n } else if (r1.top > r2.top) {\n return 1;\n } else {\n return 0;\n }\n });\n\n var _iterator4 = decorator_createForOfIteratorHelper(clientRects),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var clientRect = _step4.value;\n var line = elementTemplate.cloneNode(true);\n line.style.setProperty("pointer-events", "none");\n positionElement(line, clientRect, boundingRect);\n itemContainer.append(line);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n } else if (style.layout === "bounds") {\n var bounds = elementTemplate.cloneNode(true);\n bounds.style.setProperty("pointer-events", "none");\n positionElement(bounds, boundingRect, boundingRect);\n itemContainer.append(bounds);\n }\n\n groupContainer.append(itemContainer);\n item.container = itemContainer;\n item.clickableElements = Array.from(itemContainer.querySelectorAll("[data-activable=\'1\']"));\n\n if (item.clickableElements.length === 0) {\n item.clickableElements = Array.from(itemContainer.children);\n }\n }\n /**\n * Returns the group container element, after making sure it exists.\n */\n\n\n function requireContainer() {\n if (!container) {\n container = document.createElement("div");\n container.setAttribute("id", groupId);\n container.setAttribute("data-group", groupName);\n container.style.setProperty("pointer-events", "none");\n document.body.append(container);\n }\n\n return container;\n }\n /**\n * Removes the group container.\n */\n\n\n function clearContainer() {\n if (container) {\n container.remove();\n container = null;\n }\n }\n\n return {\n add: add,\n remove: remove,\n update: update,\n clear: clear,\n items: items,\n requestLayout: requestLayout\n };\n}\nwindow.addEventListener("load", function () {\n // Will relayout all the decorations when the document body is resized.\n var body = document.body;\n var lastSize = {\n width: 0,\n height: 0\n };\n var observer = new ResizeObserver(function () {\n if (lastSize.width === body.clientWidth && lastSize.height === body.clientHeight) {\n return;\n }\n\n lastSize = {\n width: body.clientWidth,\n height: body.clientHeight\n };\n groups.forEach(function (group) {\n group.requestLayout();\n });\n });\n observer.observe(body);\n}, false);\n;// CONCATENATED MODULE: ./src/gestures.js\n/*\n * Copyright 2021 Readium Foundation. All rights reserved.\n * Use of this source code is governed by the BSD-style license\n * available in the top-level LICENSE file of the project.\n */\n\nwindow.addEventListener("DOMContentLoaded", function () {\n document.addEventListener("click", onClick, false);\n bindDragGesture(document);\n});\n\nfunction onClick(event) {\n if (!window.getSelection().isCollapsed) {\n // There\'s an on-going selection, the tap will dismiss it so we don\'t forward it.\n return;\n }\n\n var pixelRatio = window.devicePixelRatio;\n var clickEvent = {\n defaultPrevented: event.defaultPrevented,\n x: event.clientX * pixelRatio,\n y: event.clientY * pixelRatio,\n targetElement: event.target.outerHTML,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n\n if (handleDecorationClickEvent(event, clickEvent)) {\n return;\n } // Send the tap data over the JS bridge even if it\'s been handled within the web view, so that\n // it can be preserved and used by the toolkit if needed.\n\n\n var shouldPreventDefault = Android.onTap(JSON.stringify(clickEvent));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n}\n\nfunction bindDragGesture(element) {\n // passive: false is necessary to be able to prevent the default behavior.\n element.addEventListener("touchstart", onStart, {\n passive: false\n });\n element.addEventListener("touchend", onEnd, {\n passive: false\n });\n element.addEventListener("touchmove", onMove, {\n passive: false\n });\n var state = undefined;\n var isStartingDrag = false;\n var pixelRatio = window.devicePixelRatio;\n\n function onStart(event) {\n isStartingDrag = true;\n var startX = event.touches[0].clientX * pixelRatio;\n var startY = event.touches[0].clientY * pixelRatio;\n state = {\n defaultPrevented: event.defaultPrevented,\n startX: startX,\n startY: startY,\n currentX: startX,\n currentY: startY,\n offsetX: 0,\n offsetY: 0,\n interactiveElement: nearestInteractiveElement(event.target)\n };\n }\n\n function onMove(event) {\n if (!state) return;\n state.currentX = event.touches[0].clientX * pixelRatio;\n state.currentY = event.touches[0].clientY * pixelRatio;\n state.offsetX = state.currentX - state.startX;\n state.offsetY = state.currentY - state.startY;\n var shouldPreventDefault = false; // Wait for a movement of at least 6 pixels before reporting a drag.\n\n if (isStartingDrag) {\n if (Math.abs(state.offsetX) >= 6 || Math.abs(state.offsetY) >= 6) {\n isStartingDrag = false;\n shouldPreventDefault = Android.onDragStart(JSON.stringify(state));\n }\n } else {\n shouldPreventDefault = Android.onDragMove(JSON.stringify(state));\n }\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n function onEnd(event) {\n if (!state) return;\n var shouldPreventDefault = Android.onDragEnd(JSON.stringify(state));\n\n if (shouldPreventDefault) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n state = undefined;\n }\n} // See. https://github.com/JayPanoz/architecture/tree/touch-handling/misc/touch-handling\n\n\nfunction nearestInteractiveElement(element) {\n var interactiveTags = ["a", "audio", "button", "canvas", "details", "input", "label", "option", "select", "submit", "textarea", "video"];\n\n if (interactiveTags.indexOf(element.nodeName.toLowerCase()) != -1) {\n return element.outerHTML;\n } // Checks whether the element is editable by the user.\n\n\n if (element.hasAttribute("contenteditable") && element.getAttribute("contenteditable").toLowerCase() != "false") {\n return element.outerHTML;\n } // Checks parents recursively because the touch might be for example on an inside a .\n\n\n if (element.parentElement) {\n return nearestInteractiveElement(element.parentElement);\n }\n\n return null;\n}\n;// CONCATENATED MODULE: ./src/highlight.js\nfunction highlight_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { highlight_typeof = function _typeof(obj) { return typeof obj; }; } else { highlight_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return highlight_typeof(obj); }\n\nfunction highlight_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = highlight_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction highlight_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return highlight_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(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return highlight_arrayLikeToArray(o, minLen); }\n\nfunction highlight_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; }\n\n/* eslint-disable */\n//\n// highlight.js\n// r2-navigator-kotlin\n//\n// Organized by Taehyun Kim on 6/27/19 from r2-navigator-js.\n//\n// Copyright 2019 Readium Foundation. All rights reserved.\n// Use of this source code is governed by a BSD-style license which is detailed\n// in the LICENSE file present in the project repository where this source code is maintained.\n//\nvar ROOT_CLASS_REDUCE_MOTION = "r2-reduce-motion";\nvar ROOT_CLASS_NO_FOOTNOTES = "r2-no-popup-foonotes";\nvar POPUP_DIALOG_CLASS = "r2-popup-dialog";\nvar FOOTNOTES_CONTAINER_CLASS = "r2-footnote-container";\nvar FOOTNOTES_CLOSE_BUTTON_CLASS = "r2-footnote-close";\nvar FOOTNOTE_FORCE_SHOW = "r2-footnote-force-show";\nvar TTS_ID_PREVIOUS = "r2-tts-previous";\nvar TTS_ID_NEXT = "r2-tts-next";\nvar TTS_ID_SLIDER = "r2-tts-slider";\nvar TTS_ID_ACTIVE_WORD = "r2-tts-active-word";\nvar TTS_ID_CONTAINER = "r2-tts-txt";\nvar TTS_ID_INFO = "r2-tts-info";\nvar TTS_NAV_BUTTON_CLASS = "r2-tts-button";\nvar TTS_ID_SPEAKING_DOC_ELEMENT = "r2-tts-speaking-el";\nvar TTS_CLASS_INJECTED_SPAN = "r2-tts-speaking-txt";\nvar TTS_CLASS_INJECTED_SUBSPAN = "r2-tts-speaking-word";\nvar TTS_ID_INJECTED_PARENT = "r2-tts-speaking-txt-parent";\nvar ID_HIGHLIGHTS_CONTAINER = "R2_ID_HIGHLIGHTS_CONTAINER";\nvar ID_ANNOTATION_CONTAINER = "R2_ID_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_CONTAINER = "R2_CLASS_HIGHLIGHT_CONTAINER";\nvar CLASS_ANNOTATION_CONTAINER = "R2_CLASS_ANNOTATION_CONTAINER";\nvar CLASS_HIGHLIGHT_AREA = "R2_CLASS_HIGHLIGHT_AREA";\nvar CLASS_ANNOTATION_AREA = "R2_CLASS_ANNOTATION_AREA";\nvar CLASS_HIGHLIGHT_BOUNDING_AREA = "R2_CLASS_HIGHLIGHT_BOUNDING_AREA";\nvar CLASS_ANNOTATION_BOUNDING_AREA = "R2_CLASS_ANNOTATION_BOUNDING_AREA"; // tslint:disable-next-line:max-line-length\n\nvar _blacklistIdClassForCFI = [POPUP_DIALOG_CLASS, TTS_CLASS_INJECTED_SPAN, TTS_CLASS_INJECTED_SUBSPAN, ID_HIGHLIGHTS_CONTAINER, CLASS_HIGHLIGHT_CONTAINER, CLASS_HIGHLIGHT_AREA, CLASS_HIGHLIGHT_BOUNDING_AREA, "resize-sensor"];\nvar CLASS_PAGINATED = "r2-css-paginated"; //const IS_DEV = (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "dev");\n\nvar IS_DEV = false;\nvar _highlights = [];\n\nvar _highlightsContainer;\n\nvar _annotationContainer;\n\nvar lastMouseDownX = -1;\nvar lastMouseDownY = -1;\nvar bodyEventListenersSet = false;\nvar USE_SVG = false;\nvar DEFAULT_BACKGROUND_COLOR_OPACITY = 0.3;\nvar ALT_BACKGROUND_COLOR_OPACITY = 0.45; //const DEBUG_VISUALS = false;\n\nvar DEBUG_VISUALS = false;\nvar DEFAULT_BACKGROUND_COLOR = {\n blue: 100,\n green: 50,\n red: 230\n};\nvar ANNOTATION_WIDTH = 15;\n\nfunction resetHighlightBoundingStyle(_win, highlightBounding) {\n if (highlightBounding.getAttribute("class") == CLASS_ANNOTATION_BOUNDING_AREA) {\n return;\n }\n\n highlightBounding.style.outline = "none";\n highlightBounding.style.setProperty("background-color", "transparent", "important");\n}\n\nfunction setHighlightAreaStyle(win, highlightAreas, highlight) {\n var useSVG = !DEBUG_VISUALS && USE_SVG;\n\n var _iterator = highlight_createForOfIteratorHelper(highlightAreas),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var highlightArea = _step.value;\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var opacity = ALT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n}\n\nfunction resetHighlightAreaStyle(win, highlightArea) {\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var isSVG = useSVG && highlightArea.namespaceURI === SVG_XML_NAMESPACE;\n var id = isSVG ? highlightArea.parentNode && highlightArea.parentNode.parentNode && highlightArea.parentNode.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.parentNode.getAttribute ? highlightArea.parentNode.parentNode.getAttribute("id") : undefined : highlightArea.parentNode && highlightArea.parentNode.nodeType === Node.ELEMENT_NODE && highlightArea.parentNode.getAttribute ? highlightArea.parentNode.getAttribute("id") : undefined;\n\n if (id) {\n var highlight = _highlights.find(function (h) {\n return h.id === id;\n });\n\n if (highlight) {\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n\n if (isSVG) {\n highlightArea.style.setProperty("fill", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("fill-opacity", "".concat(opacity), "important");\n highlightArea.style.setProperty("stroke", "rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ")"), "important");\n highlightArea.style.setProperty("stroke-opacity", "".concat(opacity), "important");\n } else {\n highlightArea.style.setProperty("background-color", "rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ")"), "important");\n }\n }\n }\n}\n\nfunction processTouchEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.changedTouches[0].clientX;\n var y = ev.changedTouches[0].clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect; // _highlights.sort(function(a, b) {\n // console.log(JSON.stringify(a.selectionInfo))\n // return a.selectionInfo.cleanText.length < b.selectionInfo.cleanText.length\n // })\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator2 = highlight_createForOfIteratorHelper(highlightFragments),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var highlightFragment = _step2.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator3 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var highlightBounding = _step3.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i = 0, _allHighlightAreas = allHighlightAreas; _i < _allHighlightAreas.length; _i++) {\n var highlightArea = _allHighlightAreas[_i];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas2 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator4 = highlight_createForOfIteratorHelper(_allHighlightAreas2),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _highlightArea = _step4.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea) < 0) {\n resetHighlightAreaStyle(win, _highlightArea);\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator5 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _highlightBounding = _step5.value;\n\n if (!foundElementHighlightBounding || _highlightBounding !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "touchstart" || ev.type === "touchend") {\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight.id,\n size: size\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n console.log(foundHighlight.id.includes("R2_ANNOTATION_"));\n\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n}\n\nfunction processMouseEvent(win, ev) {\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var x = ev.clientX;\n var y = ev.clientY;\n\n if (!_highlightsContainer) {\n return;\n }\n\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var xOffset;\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var foundHighlight;\n var foundElement;\n var foundRect;\n\n for (var i = _highlights.length - 1; i >= 0; i--) {\n var highlight = _highlights[i];\n var highlightParent = document.getElementById("".concat(highlight.id));\n\n if (!highlightParent) {\n highlightParent = _highlightsContainer.querySelector("#".concat(highlight.id));\n }\n\n if (!highlightParent) {\n continue;\n }\n\n var hit = false;\n var highlightFragments = highlightParent.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator6 = highlight_createForOfIteratorHelper(highlightFragments),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var highlightFragment = _step6.value;\n var withRect = highlightFragment;\n var left = withRect.rect.left + xOffset;\n var top = withRect.rect.top + yOffset;\n foundRect = withRect.rect;\n\n if (x >= left && x < left + withRect.rect.width && y >= top && y < top + withRect.rect.height) {\n hit = true;\n break;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (hit) {\n foundHighlight = highlight;\n foundElement = highlightParent;\n break;\n }\n }\n\n if (!foundHighlight || !foundElement) {\n var highlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator7 = highlight_createForOfIteratorHelper(highlightBoundings),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var highlightBounding = _step7.value;\n resetHighlightBoundingStyle(win, highlightBounding);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n var allHighlightAreas = Array.from(_highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n for (var _i2 = 0, _allHighlightAreas3 = allHighlightAreas; _i2 < _allHighlightAreas3.length; _i2++) {\n var highlightArea = _allHighlightAreas3[_i2];\n resetHighlightAreaStyle(win, highlightArea);\n }\n\n return;\n }\n\n if (foundElement.getAttribute("data-click")) {\n if (ev.type === "mousemove") {\n var foundElementHighlightAreas = Array.from(foundElement.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA)));\n\n var _allHighlightAreas4 = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_AREA));\n\n var _iterator8 = highlight_createForOfIteratorHelper(_allHighlightAreas4),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _highlightArea2 = _step8.value;\n\n if (foundElementHighlightAreas.indexOf(_highlightArea2) < 0) {\n resetHighlightAreaStyle(win, _highlightArea2);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n setHighlightAreaStyle(win, foundElementHighlightAreas, foundHighlight);\n var foundElementHighlightBounding = foundElement.querySelector(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var allHighlightBoundings = _highlightsContainer.querySelectorAll(".".concat(CLASS_HIGHLIGHT_BOUNDING_AREA));\n\n var _iterator9 = highlight_createForOfIteratorHelper(allHighlightBoundings),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _highlightBounding2 = _step9.value;\n\n if (!foundElementHighlightBounding || _highlightBounding2 !== foundElementHighlightBounding) {\n resetHighlightBoundingStyle(win, _highlightBounding2);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (foundElementHighlightBounding) {\n if (DEBUG_VISUALS) {\n setHighlightBoundingStyle(win, foundElementHighlightBounding, foundHighlight);\n }\n }\n } else if (ev.type === "mouseup" || ev.type === "touchend") {\n var touchedPosition = {\n screenWidth: window.outerWidth,\n screenHeight: window.innerHeight,\n left: foundRect.left,\n width: foundRect.width,\n top: foundRect.top,\n height: foundRect.height\n };\n var payload = {\n highlight: foundHighlight,\n position: touchedPosition\n };\n\n if (typeof window !== "undefined" && highlight_typeof(window.process) === "object" && window.process.type === "renderer") {\n electron_1.ipcRenderer.sendToHost(R2_EVENT_HIGHLIGHT_CLICK, payload);\n } else if (window.webkitURL) {\n if (foundHighlight.id.search("R2_ANNOTATION_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightAnnotationMarkActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightAnnotationMarkActivated.postMessage(foundHighlight.id);\n }\n } else if (foundHighlight.id.search("R2_HIGHLIGHT_") >= 0) {\n if (navigator.userAgent.match(/Android/i)) {\n Android.highlightActivated(foundHighlight.id);\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n webkit.messageHandlers.highlightActivated.postMessage(foundHighlight.id);\n }\n }\n }\n\n ev.stopPropagation();\n }\n }\n}\n\nfunction highlight_rectsTouchOrOverlap(rect1, rect2, tolerance) {\n return (rect1.left < rect2.right || tolerance >= 0 && highlight_almostEqual(rect1.left, rect2.right, tolerance)) && (rect2.left < rect1.right || tolerance >= 0 && highlight_almostEqual(rect2.left, rect1.right, tolerance)) && (rect1.top < rect2.bottom || tolerance >= 0 && highlight_almostEqual(rect1.top, rect2.bottom, tolerance)) && (rect2.top < rect1.bottom || tolerance >= 0 && highlight_almostEqual(rect2.top, rect1.bottom, tolerance));\n}\n\nfunction highlight_replaceOverlapingRects(rects) {\n for (var i = 0; i < rects.length; i++) {\n for (var j = i + 1; j < rects.length; j++) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("replaceOverlapingRects rect1 === rect2 ??!");\n }\n\n continue;\n }\n\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n var _ret = function () {\n var toAdd = [];\n var toRemove = void 0;\n var toPreserve = void 0;\n var subtractRects1 = highlight_rectSubtract(rect1, rect2);\n\n if (subtractRects1.length === 1) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n var subtractRects2 = highlight_rectSubtract(rect2, rect1);\n\n if (subtractRects1.length < subtractRects2.length) {\n toAdd = subtractRects1;\n toRemove = rect1;\n toPreserve = rect2;\n } else {\n toAdd = subtractRects2;\n toRemove = rect2;\n toPreserve = rect1;\n }\n }\n\n if (IS_DEV) {\n var toCheck = [];\n toCheck.push(toPreserve);\n Array.prototype.push.apply(toCheck, toAdd);\n checkOverlaps(toCheck);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: overlap, cut one rect into ".concat(toAdd.length));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== toRemove;\n });\n Array.prototype.push.apply(newRects, toAdd);\n return {\n v: highlight_replaceOverlapingRects(newRects)\n };\n }();\n\n if (highlight_typeof(_ret) === "object") return _ret.v;\n }\n }\n }\n\n return rects;\n}\n\nfunction checkOverlaps(rects) {\n var stillOverlapingRects = [];\n\n var _iterator10 = highlight_createForOfIteratorHelper(rects),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var rect1 = _step10.value;\n\n var _iterator11 = highlight_createForOfIteratorHelper(rects),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var rect2 = _step11.value;\n\n if (rect1 === rect2) {\n continue;\n }\n\n var has1 = stillOverlapingRects.indexOf(rect1) >= 0;\n var has2 = stillOverlapingRects.indexOf(rect2) >= 0;\n\n if (!has1 || !has2) {\n if (highlight_rectsTouchOrOverlap(rect1, rect2, -1)) {\n if (!has1) {\n stillOverlapingRects.push(rect1);\n }\n\n if (!has2) {\n stillOverlapingRects.push(rect2);\n }\n\n console.log("CLIENT RECT: overlap ---");\n console.log("#1 TOP:".concat(rect1.top, " BOTTOM:").concat(rect1.bottom, " LEFT:").concat(rect1.left, " RIGHT:").concat(rect1.right, " WIDTH:").concat(rect1.width, " HEIGHT:").concat(rect1.height));\n console.log("#2 TOP:".concat(rect2.top, " BOTTOM:").concat(rect2.bottom, " LEFT:").concat(rect2.left, " RIGHT:").concat(rect2.right, " WIDTH:").concat(rect2.width, " HEIGHT:").concat(rect2.height));\n var xOverlap = getRectOverlapX(rect1, rect2);\n console.log("xOverlap: ".concat(xOverlap));\n var yOverlap = getRectOverlapY(rect1, rect2);\n console.log("yOverlap: ".concat(yOverlap));\n }\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (stillOverlapingRects.length) {\n console.log("CLIENT RECT: overlaps ".concat(stillOverlapingRects.length));\n }\n}\n\nfunction highlight_removeContainedRects(rects, tolerance) {\n var rectsToKeep = new Set(rects);\n\n var _iterator12 = highlight_createForOfIteratorHelper(rects),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var rect = _step12.value;\n var bigEnough = rect.width > 1 && rect.height > 1;\n\n if (!bigEnough) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove tiny");\n }\n\n rectsToKeep.delete(rect);\n continue;\n }\n\n var _iterator13 = highlight_createForOfIteratorHelper(rects),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var possiblyContainingRect = _step13.value;\n\n if (rect === possiblyContainingRect) {\n continue;\n }\n\n if (!rectsToKeep.has(possiblyContainingRect)) {\n continue;\n }\n\n if (highlight_rectContains(possiblyContainingRect, rect, tolerance)) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove contained");\n }\n\n rectsToKeep.delete(rect);\n break;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return Array.from(rectsToKeep);\n}\n\nfunction highlight_almostEqual(a, b, tolerance) {\n return Math.abs(a - b) <= tolerance;\n}\n\nfunction highlight_rectIntersect(rect1, rect2) {\n var maxLeft = Math.max(rect1.left, rect2.left);\n var minRight = Math.min(rect1.right, rect2.right);\n var maxTop = Math.max(rect1.top, rect2.top);\n var minBottom = Math.min(rect1.bottom, rect2.bottom);\n var rect = {\n bottom: minBottom,\n height: Math.max(0, minBottom - maxTop),\n left: maxLeft,\n right: minRight,\n top: maxTop,\n width: Math.max(0, minRight - maxLeft)\n };\n return rect;\n}\n\nfunction highlight_rectSubtract(rect1, rect2) {\n var rectIntersected = highlight_rectIntersect(rect2, rect1);\n\n if (rectIntersected.height === 0 || rectIntersected.width === 0) {\n return [rect1];\n }\n\n var rects = [];\n {\n var rectA = {\n bottom: rect1.bottom,\n height: 0,\n left: rect1.left,\n right: rectIntersected.left,\n top: rect1.top,\n width: 0\n };\n rectA.width = rectA.right - rectA.left;\n rectA.height = rectA.bottom - rectA.top;\n\n if (rectA.height !== 0 && rectA.width !== 0) {\n rects.push(rectA);\n }\n }\n {\n var rectB = {\n bottom: rectIntersected.top,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rect1.top,\n width: 0\n };\n rectB.width = rectB.right - rectB.left;\n rectB.height = rectB.bottom - rectB.top;\n\n if (rectB.height !== 0 && rectB.width !== 0) {\n rects.push(rectB);\n }\n }\n {\n var rectC = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.left,\n right: rectIntersected.right,\n top: rectIntersected.bottom,\n width: 0\n };\n rectC.width = rectC.right - rectC.left;\n rectC.height = rectC.bottom - rectC.top;\n\n if (rectC.height !== 0 && rectC.width !== 0) {\n rects.push(rectC);\n }\n }\n {\n var rectD = {\n bottom: rect1.bottom,\n height: 0,\n left: rectIntersected.right,\n right: rect1.right,\n top: rect1.top,\n width: 0\n };\n rectD.width = rectD.right - rectD.left;\n rectD.height = rectD.bottom - rectD.top;\n\n if (rectD.height !== 0 && rectD.width !== 0) {\n rects.push(rectD);\n }\n }\n return rects;\n}\n\nfunction highlight_rectContainsPoint(rect, x, y, tolerance) {\n return (rect.left < x || highlight_almostEqual(rect.left, x, tolerance)) && (rect.right > x || highlight_almostEqual(rect.right, x, tolerance)) && (rect.top < y || highlight_almostEqual(rect.top, y, tolerance)) && (rect.bottom > y || highlight_almostEqual(rect.bottom, y, tolerance));\n}\n\nfunction highlight_rectContains(rect1, rect2, tolerance) {\n return highlight_rectContainsPoint(rect1, rect2.left, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.top, tolerance) && highlight_rectContainsPoint(rect1, rect2.left, rect2.bottom, tolerance) && highlight_rectContainsPoint(rect1, rect2.right, rect2.bottom, tolerance);\n}\n\nfunction highlight_getBoundingRect(rect1, rect2) {\n var left = Math.min(rect1.left, rect2.left);\n var right = Math.max(rect1.right, rect2.right);\n var top = Math.min(rect1.top, rect2.top);\n var bottom = Math.max(rect1.bottom, rect2.bottom);\n return {\n bottom: bottom,\n height: bottom - top,\n left: left,\n right: right,\n top: top,\n width: right - left\n };\n}\n\nfunction highlight_mergeTouchingRects(rects, tolerance, doNotMergeHorizontallyAlignedRects) {\n for (var i = 0; i < rects.length; i++) {\n var _loop = function _loop(j) {\n var rect1 = rects[i];\n var rect2 = rects[j];\n\n if (rect1 === rect2) {\n if (IS_DEV) {\n console.log("mergeTouchingRects rect1 === rect2 ??!");\n }\n\n return "continue";\n }\n\n var rectsLineUpVertically = highlight_almostEqual(rect1.top, rect2.top, tolerance) && highlight_almostEqual(rect1.bottom, rect2.bottom, tolerance);\n var rectsLineUpHorizontally = highlight_almostEqual(rect1.left, rect2.left, tolerance) && highlight_almostEqual(rect1.right, rect2.right, tolerance);\n var horizontalAllowed = !doNotMergeHorizontallyAlignedRects;\n var aligned = rectsLineUpHorizontally && horizontalAllowed || rectsLineUpVertically && !rectsLineUpHorizontally;\n var canMerge = aligned && highlight_rectsTouchOrOverlap(rect1, rect2, tolerance);\n\n if (canMerge) {\n if (IS_DEV) {\n console.log("CLIENT RECT: merging two into one, VERTICAL: ".concat(rectsLineUpVertically, " HORIZONTAL: ").concat(rectsLineUpHorizontally, " (").concat(doNotMergeHorizontallyAlignedRects, ")"));\n }\n\n var newRects = rects.filter(function (rect) {\n return rect !== rect1 && rect !== rect2;\n });\n var replacementClientRect = highlight_getBoundingRect(rect1, rect2);\n newRects.push(replacementClientRect);\n return {\n v: highlight_mergeTouchingRects(newRects, tolerance, doNotMergeHorizontallyAlignedRects)\n };\n }\n };\n\n for (var j = i + 1; j < rects.length; j++) {\n var _ret2 = _loop(j);\n\n if (_ret2 === "continue") continue;\n if (highlight_typeof(_ret2) === "object") return _ret2.v;\n }\n }\n\n return rects;\n}\n\nfunction highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects) {\n var rangeClientRects = range.getClientRects();\n return getClientRectsNoOverlap_(rangeClientRects, doNotMergeHorizontallyAlignedRects);\n}\n\nfunction getClientRectsNoOverlap_(clientRects, doNotMergeHorizontallyAlignedRects) {\n var tolerance = 1;\n var originalRects = [];\n\n var _iterator14 = highlight_createForOfIteratorHelper(clientRects),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var rangeClientRect = _step14.value;\n originalRects.push({\n bottom: rangeClientRect.bottom,\n height: rangeClientRect.height,\n left: rangeClientRect.left,\n right: rangeClientRect.right,\n top: rangeClientRect.top,\n width: rangeClientRect.width\n });\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n var mergedRects = highlight_mergeTouchingRects(originalRects, tolerance, doNotMergeHorizontallyAlignedRects);\n var noContainedRects = highlight_removeContainedRects(mergedRects, tolerance);\n var newRects = highlight_replaceOverlapingRects(noContainedRects);\n var minArea = 2 * 2;\n\n for (var j = newRects.length - 1; j >= 0; j--) {\n var rect = newRects[j];\n var bigEnough = rect.width * rect.height > minArea;\n\n if (!bigEnough) {\n if (newRects.length > 1) {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small");\n }\n\n newRects.splice(j, 1);\n } else {\n if (IS_DEV) {\n console.log("CLIENT RECT: remove small, but keep otherwise empty!");\n }\n\n break;\n }\n }\n }\n\n if (IS_DEV) {\n checkOverlaps(newRects);\n }\n\n if (IS_DEV) {\n console.log("CLIENT RECT: reduced ".concat(originalRects.length, " --\x3e ").concat(newRects.length));\n }\n\n return newRects;\n}\n\nfunction isPaginated(document) {\n return document && document.documentElement && document.documentElement.classList.contains(CLASS_PAGINATED);\n}\n\nfunction getScrollingElement(document) {\n if (document.scrollingElement) {\n return document.scrollingElement;\n }\n\n return document.body;\n}\n\nfunction ensureContainer(win, annotationFlag) {\n var document = win.document;\n\n if (!_highlightsContainer) {\n if (!bodyEventListenersSet) {\n bodyEventListenersSet = true;\n document.body.addEventListener("mousedown", function (ev) {\n lastMouseDownX = ev.clientX;\n lastMouseDownY = ev.clientY;\n }, false);\n document.body.addEventListener("mouseup", function (ev) {\n if (Math.abs(lastMouseDownX - ev.clientX) < 3 && Math.abs(lastMouseDownY - ev.clientY) < 3) {\n processMouseEvent(win, ev);\n }\n }, false);\n document.body.addEventListener("mousemove", function (ev) {\n processMouseEvent(win, ev);\n }, false);\n document.body.addEventListener("touchend", function touchEnd(e) {\n processTouchEvent(win, e);\n }, false);\n }\n\n _highlightsContainer = document.createElement("div");\n\n _highlightsContainer.setAttribute("id", ID_HIGHLIGHTS_CONTAINER);\n\n _highlightsContainer.style.setProperty("pointer-events", "none");\n\n document.body.append(_highlightsContainer);\n }\n\n return _highlightsContainer;\n}\n\nfunction hideAllhighlights() {\n if (_highlightsContainer) {\n _highlightsContainer.remove();\n\n _highlightsContainer = null;\n }\n}\n\nfunction destroyAllhighlights() {\n hideAllhighlights();\n\n _highlights.splice(0, _highlights.length);\n}\n\nfunction destroyHighlight(id) {\n var i = -1;\n var _document = window.document;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (highlight && i >= 0 && i < _highlights.length) {\n _highlights.splice(i, 1);\n }\n\n var highlightContainer = _document.getElementById(id);\n\n if (highlightContainer) {\n highlightContainer.remove();\n }\n}\n\nfunction isCfiTextNode(node) {\n return node.nodeType !== Node.ELEMENT_NODE;\n}\n\nfunction getChildTextNodeCfiIndex(element, child) {\n var found = -1;\n var textNodeIndex = -1;\n var previousWasElement = false;\n\n for (var i = 0; i < element.childNodes.length; i++) {\n var childNode = element.childNodes[i];\n var isText = isCfiTextNode(childNode);\n\n if (isText || previousWasElement) {\n textNodeIndex += 2;\n }\n\n if (isText) {\n if (childNode === child) {\n found = textNodeIndex;\n break;\n }\n }\n\n previousWasElement = childNode.nodeType === Node.ELEMENT_NODE;\n }\n\n return found;\n}\n\nfunction getCommonAncestorElement(node1, node2) {\n if (node1.nodeType === Node.ELEMENT_NODE && node1 === node2) {\n return node1;\n }\n\n if (node1.nodeType === Node.ELEMENT_NODE && node1.contains(node2)) {\n return node1;\n }\n\n if (node2.nodeType === Node.ELEMENT_NODE && node2.contains(node1)) {\n return node2;\n }\n\n var node1ElementAncestorChain = [];\n var parent = node1.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node1ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var node2ElementAncestorChain = [];\n parent = node2.parentNode;\n\n while (parent && parent.nodeType === Node.ELEMENT_NODE) {\n node2ElementAncestorChain.push(parent);\n parent = parent.parentNode;\n }\n\n var commonAncestor = node1ElementAncestorChain.find(function (node1ElementAncestor) {\n return node2ElementAncestorChain.indexOf(node1ElementAncestor) >= 0;\n });\n\n if (!commonAncestor) {\n commonAncestor = node2ElementAncestorChain.find(function (node2ElementAncestor) {\n return node1ElementAncestorChain.indexOf(node2ElementAncestor) >= 0;\n });\n }\n\n return commonAncestor;\n}\n\nfunction fullQualifiedSelector(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n return lowerCaseName;\n } //return cssPath(node, justSelector);\n\n\n return cssPath(node, true);\n}\n\nfunction getCurrentSelectionInfo() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n console.log("^^^ SELECTION COLLAPSED.");\n return undefined;\n }\n\n var rawText = selection.toString();\n var cleanText = rawText.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanText.length === 0) {\n console.log("^^^ SELECTION TEXT EMPTY.");\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n console.log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var rangeInfo = convertRange(range, fullQualifiedSelector, computeCFI);\n\n if (!rangeInfo) {\n console.log("^^^ SELECTION RANGE INFO FAIL?!");\n return undefined;\n }\n\n if (IS_DEV && DEBUG_VISUALS) {\n var restoredRange = convertRangeInfo(win.document, rangeInfo);\n\n if (restoredRange) {\n if (restoredRange.startOffset === range.startOffset && restoredRange.endOffset === range.endOffset && restoredRange.startContainer === range.startContainer && restoredRange.endContainer === range.endContainer) {\n console.log("SELECTION RANGE RESTORED OKAY (dev check).");\n } else {\n console.log("SELECTION RANGE RESTORE FAIL (dev check).");\n dumpDebug("SELECTION", selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset, getCssSelector);\n dumpDebug("ORDERED RANGE FROM SELECTION", range.startContainer, range.startOffset, range.endContainer, range.endOffset, getCssSelector);\n dumpDebug("RESTORED RANGE", restoredRange.startContainer, restoredRange.startOffset, restoredRange.endContainer, restoredRange.endOffset, getCssSelector);\n }\n } else {\n console.log("CANNOT RESTORE SELECTION RANGE ??!");\n }\n } else {}\n\n return {\n locations: rangeInfo2Location(rangeInfo),\n text: {\n highlight: rawText\n }\n };\n}\n\nfunction checkBlacklisted(el) {\n var blacklistedId;\n var id = el.getAttribute("id");\n\n if (id && _blacklistIdClassForCFI.indexOf(id) >= 0) {\n console.log("checkBlacklisted ID: " + id);\n blacklistedId = id;\n }\n\n var blacklistedClass;\n\n var _iterator15 = highlight_createForOfIteratorHelper(_blacklistIdClassForCFI),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var item = _step15.value;\n\n if (el.classList.contains(item)) {\n console.log("checkBlacklisted CLASS: " + item);\n blacklistedClass = item;\n break;\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n if (blacklistedId || blacklistedClass) {\n return true;\n }\n\n return false;\n}\n\nfunction cssPath(node, optimized) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return "";\n }\n\n var steps = [];\n var contextNode = node;\n\n while (contextNode) {\n var step = _cssPathStep(contextNode, !!optimized, contextNode === node);\n\n if (!step) {\n break; // Error - bail out early.\n }\n\n steps.push(step.value);\n\n if (step.optimized) {\n break;\n }\n\n contextNode = contextNode.parentNode;\n }\n\n steps.reverse();\n return steps.join(" > ");\n} // tslint:disable-next-line:max-line-length\n// https://chromium.googlesource.com/chromium/blink/+/master/Source/devtools/front_end/components/DOMPresentationUtils.js#316\n\n\nfunction _cssPathStep(node, optimized, isTargetNode) {\n function prefixedElementClassNames(nd) {\n var classAttribute = nd.getAttribute("class");\n\n if (!classAttribute) {\n return [];\n }\n\n return classAttribute.split(/\\s+/g).filter(Boolean).map(function (nm) {\n // The prefix is required to store "__proto__" in a object-based map.\n return "$" + nm;\n });\n }\n\n function idSelector(idd) {\n return "#" + escapeIdentifierIfNeeded(idd);\n }\n\n function escapeIdentifierIfNeeded(ident) {\n if (isCSSIdentifier(ident)) {\n return ident;\n }\n\n var shouldEscapeFirst = /^(?:[0-9]|-[0-9-]?)/.test(ident);\n var lastIndex = ident.length - 1;\n return ident.replace(/./g, function (c, ii) {\n return shouldEscapeFirst && ii === 0 || !isCSSIdentChar(c) ? escapeAsciiChar(c, ii === lastIndex) : c;\n });\n }\n\n function escapeAsciiChar(c, isLast) {\n return "\\\\" + toHexByte(c) + (isLast ? "" : " ");\n }\n\n function toHexByte(c) {\n var hexByte = c.charCodeAt(0).toString(16);\n\n if (hexByte.length === 1) {\n hexByte = "0" + hexByte;\n }\n\n return hexByte;\n }\n\n function isCSSIdentChar(c) {\n if (/[a-zA-Z0-9_-]/.test(c)) {\n return true;\n }\n\n return c.charCodeAt(0) >= 0xa0;\n }\n\n function isCSSIdentifier(value) {\n return /^-?[a-zA-Z_][a-zA-Z0-9_-]*$/.test(value);\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var lowerCaseName = node.localName && node.localName.toLowerCase() || node.nodeName.toLowerCase();\n var element = node;\n var id = element.getAttribute("id");\n\n if (optimized) {\n if (id) {\n return {\n optimized: true,\n value: idSelector(id)\n };\n }\n\n if (lowerCaseName === "body" || lowerCaseName === "head" || lowerCaseName === "html") {\n return {\n optimized: true,\n value: lowerCaseName // node.nodeNameInCorrectCase(),\n\n };\n }\n }\n\n var nodeName = lowerCaseName; // node.nodeNameInCorrectCase();\n\n if (id) {\n return {\n optimized: true,\n value: nodeName + idSelector(id)\n };\n }\n\n var parent = node.parentNode;\n\n if (!parent || parent.nodeType === Node.DOCUMENT_NODE) {\n return {\n optimized: true,\n value: nodeName\n };\n }\n\n var prefixedOwnClassNamesArray_ = prefixedElementClassNames(element);\n var prefixedOwnClassNamesArray = []; // .keySet()\n\n prefixedOwnClassNamesArray_.forEach(function (arrItem) {\n if (prefixedOwnClassNamesArray.indexOf(arrItem) < 0) {\n prefixedOwnClassNamesArray.push(arrItem);\n }\n });\n var needsClassNames = false;\n var needsNthChild = false;\n var ownIndex = -1;\n var elementIndex = -1;\n var siblings = parent.children;\n\n var _loop2 = function _loop2(i) {\n var sibling = siblings[i];\n\n if (sibling.nodeType !== Node.ELEMENT_NODE) {\n return "continue";\n }\n\n elementIndex += 1;\n\n if (sibling === node) {\n ownIndex = elementIndex;\n return "continue";\n }\n\n if (needsNthChild) {\n return "continue";\n } // sibling.nodeNameInCorrectCase()\n\n\n var siblingName = sibling.localName && sibling.localName.toLowerCase() || sibling.nodeName.toLowerCase();\n\n if (siblingName !== nodeName) {\n return "continue";\n }\n\n needsClassNames = true;\n var ownClassNames = [];\n prefixedOwnClassNamesArray.forEach(function (arrItem) {\n ownClassNames.push(arrItem);\n });\n var ownClassNameCount = ownClassNames.length;\n\n if (ownClassNameCount === 0) {\n needsNthChild = true;\n return "continue";\n }\n\n var siblingClassNamesArray_ = prefixedElementClassNames(sibling);\n var siblingClassNamesArray = []; // .keySet()\n\n siblingClassNamesArray_.forEach(function (arrItem) {\n if (siblingClassNamesArray.indexOf(arrItem) < 0) {\n siblingClassNamesArray.push(arrItem);\n }\n });\n\n for (var _i3 = 0, _siblingClassNamesArr = siblingClassNamesArray; _i3 < _siblingClassNamesArr.length; _i3++) {\n var siblingClass = _siblingClassNamesArr[_i3];\n var ind = ownClassNames.indexOf(siblingClass);\n\n if (ind < 0) {\n continue;\n }\n\n ownClassNames.splice(ind, 1); // delete ownClassNames[siblingClass];\n\n if (! --ownClassNameCount) {\n needsNthChild = true;\n break;\n }\n }\n };\n\n for (var i = 0; (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) {\n var _ret3 = _loop2(i);\n\n if (_ret3 === "continue") continue;\n }\n\n var result = nodeName;\n\n if (isTargetNode && nodeName === "input" && element.getAttribute("type") && !element.getAttribute("id") && !element.getAttribute("class")) {\n result += \'[type="\' + element.getAttribute("type") + \'"]\';\n }\n\n if (needsNthChild) {\n result += ":nth-child(" + (ownIndex + 1) + ")";\n } else if (needsClassNames) {\n var _iterator16 = highlight_createForOfIteratorHelper(prefixedOwnClassNamesArray),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var prefixedName = _step16.value;\n result += "." + escapeIdentifierIfNeeded(prefixedName.substr(1));\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n\n return {\n optimized: false,\n value: result\n };\n}\n\nfunction computeCFI(node) {\n // TODO: handle character position inside text node\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n }\n\n var cfi = "";\n var currentElement = node;\n\n while (currentElement.parentNode && currentElement.parentNode.nodeType === Node.ELEMENT_NODE) {\n var blacklisted = checkBlacklisted(currentElement);\n\n if (!blacklisted) {\n var currentElementParentChildren = currentElement.parentNode.children;\n var currentElementIndex = -1;\n\n for (var i = 0; i < currentElementParentChildren.length; i++) {\n if (currentElement === currentElementParentChildren[i]) {\n currentElementIndex = i;\n break;\n }\n }\n\n if (currentElementIndex >= 0) {\n var cfiIndex = (currentElementIndex + 1) * 2;\n cfi = cfiIndex + (currentElement.id ? "[" + currentElement.id + "]" : "") + (cfi.length ? "/" + cfi : "");\n }\n }\n\n currentElement = currentElement.parentNode;\n }\n\n return "/" + cfi;\n}\n\nfunction _createHighlight(locations, color, pointerInteraction, type) {\n var rangeInfo = location2RangeInfo(locations);\n var uniqueStr = "".concat(rangeInfo.cfi).concat(rangeInfo.startContainerElementCssSelector).concat(rangeInfo.startContainerChildTextNodeIndex).concat(rangeInfo.startOffset).concat(rangeInfo.endContainerElementCssSelector).concat(rangeInfo.endContainerChildTextNodeIndex).concat(rangeInfo.endOffset);\n\n var hash = __webpack_require__(3715);\n\n var sha256Hex = hash.sha256().update(uniqueStr).digest("hex");\n var id;\n\n if (type == ID_HIGHLIGHTS_CONTAINER) {\n id = "R2_HIGHLIGHT_" + sha256Hex;\n } else {\n id = "R2_ANNOTATION_" + sha256Hex;\n }\n\n destroyHighlight(id);\n var highlight = {\n color: color ? color : DEFAULT_BACKGROUND_COLOR,\n id: id,\n pointerInteraction: pointerInteraction,\n rangeInfo: rangeInfo\n };\n\n _highlights.push(highlight);\n\n createHighlightDom(window, highlight, type == ID_ANNOTATION_CONTAINER ? true : false);\n return highlight;\n}\n\nfunction createHighlight(selectionInfo, color, pointerInteraction) {\n return _createHighlight(selectionInfo, color, pointerInteraction, ID_HIGHLIGHTS_CONTAINER);\n}\nfunction createAnnotation(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n if (i == _highlights.length) return;\n var locations = {\n locations: rangeInfo2Location(highlight.rangeInfo)\n };\n return _createHighlight(locations, highlight.color, true, ID_ANNOTATION_CONTAINER);\n}\n\nfunction createHighlightDom(win, highlight, annotationFlag) {\n var document = win.document;\n var scale = 1 / (win.READIUM2 && win.READIUM2.isFixedLayout ? win.READIUM2.fxlViewportScale : 1);\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var paginated = isPaginated(document);\n var highlightsContainer = ensureContainer(win, annotationFlag);\n var highlightParent = document.createElement("div");\n highlightParent.setAttribute("id", highlight.id);\n highlightParent.setAttribute("class", CLASS_HIGHLIGHT_CONTAINER);\n document.body.style.position = "relative";\n highlightParent.style.setProperty("pointer-events", "none");\n\n if (highlight.pointerInteraction) {\n highlightParent.setAttribute("data-click", "1");\n }\n\n var bodyRect = document.body.getBoundingClientRect();\n var useSVG = !DEBUG_VISUALS && USE_SVG; //const useSVG = USE_SVG;\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var highlightAreaSVGDocFrag;\n var roundedCorner = 3;\n var underlineThickness = 2;\n var strikeThroughLineThickness = 3;\n var opacity = DEFAULT_BACKGROUND_COLOR_OPACITY;\n var extra = "";\n var rangeAnnotationBoundingClientRect = frameForHighlightAnnotationMarkWithID(win, highlight.id);\n var xOffset;\n var yOffset;\n var annotationOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n xOffset = paginated ? -scrollElement.scrollLeft : bodyRect.left;\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n annotationOffset = parseInt((rangeAnnotationBoundingClientRect.right - xOffset) / window.innerWidth) + 1;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n xOffset = paginated ? 0 : -scrollElement.scrollLeft;\n yOffset = paginated ? 0 : bodyRect.top;\n annotationOffset = parseInt(rangeAnnotationBoundingClientRect.right / window.innerWidth + 1);\n }\n\n var _iterator17 = highlight_createForOfIteratorHelper(clientRects),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var clientRect = _step17.value;\n\n if (useSVG) {\n var borderThickness = 0;\n\n if (!highlightAreaSVGDocFrag) {\n highlightAreaSVGDocFrag = document.createDocumentFragment();\n }\n\n var highlightAreaSVGRect = document.createElementNS(SVG_XML_NAMESPACE, "rect");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGRect.setAttribute("style", "fill: rgb(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; fill-opacity: ").concat(opacity, " !important; stroke-width: 0;"));\n highlightAreaSVGRect.scale = scale;\n /*\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGRect.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGRect.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaSVGRect.setAttribute("rx", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("ry", "".concat(roundedCorner * scale));\n highlightAreaSVGRect.setAttribute("x", "".concat((highlightAreaSVGRect.rect.left - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("y", "".concat((highlightAreaSVGRect.rect.top - borderThickness) * scale));\n highlightAreaSVGRect.setAttribute("height", "".concat((highlightAreaSVGRect.rect.height + borderThickness * 2) * scale));\n highlightAreaSVGRect.setAttribute("width", "".concat((highlightAreaSVGRect.rect.width + borderThickness * 2) * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGRect);\n\n if (drawUnderline) {\n var highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaSVGLine.setAttribute("style", "stroke-linecap: round; stroke-width: ".concat(underlineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n var lineOffset = highlightAreaSVGLine.rect.width > roundedCorner ? roundedCorner : 0;\n highlightAreaSVGLine.setAttribute("x1", "".concat((highlightAreaSVGLine.rect.left + lineOffset) * scale));\n highlightAreaSVGLine.setAttribute("x2", "".concat((highlightAreaSVGLine.rect.left + highlightAreaSVGLine.rect.width - lineOffset) * scale));\n var y = (highlightAreaSVGLine.rect.top + highlightAreaSVGLine.rect.height - underlineThickness / 2) * scale;\n highlightAreaSVGLine.setAttribute("y1", "".concat(y));\n highlightAreaSVGLine.setAttribute("y2", "".concat(y));\n highlightAreaSVGLine.setAttribute("height", "".concat(highlightAreaSVGLine.rect.height * scale));\n highlightAreaSVGLine.setAttribute("width", "".concat(highlightAreaSVGLine.rect.width * scale));\n highlightAreaSVGDocFrag.appendChild(highlightAreaSVGLine);\n }\n\n if (drawStrikeThrough) {\n var _highlightAreaSVGLine = document.createElementNS(SVG_XML_NAMESPACE, "line");\n\n highlightAreaSVGRect.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n _highlightAreaSVGLine.setAttribute("style", "stroke-linecap: butt; stroke-width: ".concat(strikeThroughLineThickness * scale, "; stroke: rgb(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ") !important; stroke-opacity: ").concat(opacity, " !important"));\n\n _highlightAreaSVGLine.scale = scale;\n /*\n highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n _highlightAreaSVGLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n _highlightAreaSVGLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n _highlightAreaSVGLine.setAttribute("x1", "".concat(_highlightAreaSVGLine.rect.left * scale));\n\n _highlightAreaSVGLine.setAttribute("x2", "".concat((_highlightAreaSVGLine.rect.left + _highlightAreaSVGLine.rect.width) * scale));\n\n var _lineOffset = _highlightAreaSVGLine.rect.height / 2;\n\n var _y = (_highlightAreaSVGLine.rect.top + _lineOffset) * scale;\n\n _highlightAreaSVGLine.setAttribute("y1", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("y2", "".concat(_y));\n\n _highlightAreaSVGLine.setAttribute("height", "".concat(_highlightAreaSVGLine.rect.height * scale));\n\n _highlightAreaSVGLine.setAttribute("width", "".concat(_highlightAreaSVGLine.rect.width * scale));\n\n highlightAreaSVGDocFrag.appendChild(_highlightAreaSVGLine);\n }\n } else {\n var highlightArea = document.createElement("div");\n highlightArea.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n\n if (DEBUG_VISUALS) {\n var rgb = Math.round(0xffffff * Math.random());\n var r = rgb >> 16;\n var g = rgb >> 8 & 255;\n var b = rgb & 255;\n extra = "outline-color: rgb(".concat(r, ", ").concat(g, ", ").concat(b, "); outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n } else {\n if (drawUnderline) {\n extra += "border-bottom: ".concat(underlineThickness * scale, "px solid rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important");\n }\n }\n\n highlightArea.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n highlightArea.style.setProperty("pointer-events", "none");\n highlightArea.style.position = paginated ? "fixed" : "absolute";\n highlightArea.scale = scale;\n /*\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightArea.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightArea.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightArea.style.width = "".concat(highlightArea.rect.width * scale, "px");\n highlightArea.style.height = "".concat(highlightArea.rect.height * scale, "px");\n highlightArea.style.left = "".concat(highlightArea.rect.left * scale, "px");\n highlightArea.style.top = "".concat(highlightArea.rect.top * scale, "px");\n highlightParent.append(highlightArea);\n\n if (!DEBUG_VISUALS && drawStrikeThrough) {\n //if (drawStrikeThrough) {\n var highlightAreaLine = document.createElement("div");\n highlightAreaLine.setAttribute("class", CLASS_HIGHLIGHT_AREA);\n highlightAreaLine.setAttribute("style", "background-color: rgba(".concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important;"));\n highlightAreaLine.style.setProperty("pointer-events", "none");\n highlightAreaLine.style.position = paginated ? "fixed" : "absolute";\n highlightAreaLine.scale = scale;\n /*\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width,\n };\n */\n\n if (annotationFlag) {\n highlightAreaLine.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n highlightAreaLine.rect = {\n height: clientRect.height,\n left: clientRect.left - xOffset,\n top: clientRect.top - yOffset,\n width: clientRect.width\n };\n }\n\n highlightAreaLine.style.width = "".concat(highlightAreaLine.rect.width * scale, "px");\n highlightAreaLine.style.height = "".concat(strikeThroughLineThickness * scale, "px");\n highlightAreaLine.style.left = "".concat(highlightAreaLine.rect.left * scale, "px");\n highlightAreaLine.style.top = "".concat((highlightAreaLine.rect.top + highlightAreaLine.rect.height / 2 - strikeThroughLineThickness / 2) * scale, "px");\n highlightParent.append(highlightAreaLine);\n }\n }\n\n if (annotationFlag) {\n break;\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n if (useSVG && highlightAreaSVGDocFrag) {\n var highlightAreaSVG = document.createElementNS(SVG_XML_NAMESPACE, "svg");\n highlightAreaSVG.setAttribute("pointer-events", "none");\n highlightAreaSVG.style.position = paginated ? "fixed" : "absolute";\n highlightAreaSVG.style.overflow = "visible";\n highlightAreaSVG.style.left = "0";\n highlightAreaSVG.style.top = "0";\n highlightAreaSVG.append(highlightAreaSVGDocFrag);\n highlightParent.append(highlightAreaSVG);\n }\n\n var highlightBounding = document.createElement("div");\n\n if (annotationFlag) {\n highlightBounding.setAttribute("class", CLASS_ANNOTATION_BOUNDING_AREA);\n highlightBounding.setAttribute("style", "border-radius: ".concat(roundedCorner, "px !important; background-color: rgba(").concat(highlight.color.red, ", ").concat(highlight.color.green, ", ").concat(highlight.color.blue, ", ").concat(opacity, ") !important; ").concat(extra));\n } else {\n highlightBounding.setAttribute("class", CLASS_HIGHLIGHT_BOUNDING_AREA);\n }\n\n highlightBounding.style.setProperty("pointer-events", "none");\n highlightBounding.style.position = paginated ? "fixed" : "absolute";\n highlightBounding.scale = scale;\n\n if (DEBUG_VISUALS) {\n highlightBounding.setAttribute("style", "outline-color: magenta; outline-style: solid; outline-width: 1px; outline-offset: -1px;");\n }\n\n if (annotationFlag) {\n highlightBounding.rect = {\n height: ANNOTATION_WIDTH,\n //rangeAnnotationBoundingClientRect.height - rangeAnnotationBoundingClientRect.height/4,\n left: window.innerWidth * annotationOffset - ANNOTATION_WIDTH,\n top: rangeAnnotationBoundingClientRect.top - yOffset,\n width: ANNOTATION_WIDTH\n };\n } else {\n var rangeBoundingClientRect = range.getBoundingClientRect();\n highlightBounding.rect = {\n height: rangeBoundingClientRect.height,\n left: rangeBoundingClientRect.left - xOffset,\n top: rangeBoundingClientRect.top - yOffset,\n width: rangeBoundingClientRect.width\n };\n }\n\n highlightBounding.style.width = "".concat(highlightBounding.rect.width * scale, "px");\n highlightBounding.style.height = "".concat(highlightBounding.rect.height * scale, "px");\n highlightBounding.style.left = "".concat(highlightBounding.rect.left * scale, "px");\n highlightBounding.style.top = "".concat(highlightBounding.rect.top * scale, "px");\n highlightParent.append(highlightBounding);\n highlightsContainer.append(highlightParent);\n return highlightParent;\n}\n\nfunction createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n console.log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n console.log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n console.log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction convertRange(range, getCssSelector, computeElementCFI) {\n var startIsElement = range.startContainer.nodeType === Node.ELEMENT_NODE;\n var startContainerElement = startIsElement ? range.startContainer : range.startContainer.parentNode && range.startContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.startContainer.parentNode : undefined;\n\n if (!startContainerElement) {\n return undefined;\n }\n\n var startContainerChildTextNodeIndex = startIsElement ? -1 : Array.from(startContainerElement.childNodes).indexOf(range.startContainer);\n\n if (startContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var startContainerElementCssSelector = getCssSelector(startContainerElement);\n var endIsElement = range.endContainer.nodeType === Node.ELEMENT_NODE;\n var endContainerElement = endIsElement ? range.endContainer : range.endContainer.parentNode && range.endContainer.parentNode.nodeType === Node.ELEMENT_NODE ? range.endContainer.parentNode : undefined;\n\n if (!endContainerElement) {\n return undefined;\n }\n\n var endContainerChildTextNodeIndex = endIsElement ? -1 : Array.from(endContainerElement.childNodes).indexOf(range.endContainer);\n\n if (endContainerChildTextNodeIndex < -1) {\n return undefined;\n }\n\n var endContainerElementCssSelector = getCssSelector(endContainerElement);\n var commonElementAncestor = getCommonAncestorElement(range.startContainer, range.endContainer);\n\n if (!commonElementAncestor) {\n console.log("^^^ NO RANGE COMMON ANCESTOR?!");\n return undefined;\n }\n\n if (range.commonAncestorContainer) {\n var rangeCommonAncestorElement = range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE ? range.commonAncestorContainer : range.commonAncestorContainer.parentNode;\n\n if (rangeCommonAncestorElement && rangeCommonAncestorElement.nodeType === Node.ELEMENT_NODE) {\n if (commonElementAncestor !== rangeCommonAncestorElement) {\n console.log(">>>>>> COMMON ANCESTOR CONTAINER DIFF??!");\n console.log(getCssSelector(commonElementAncestor));\n console.log(getCssSelector(rangeCommonAncestorElement));\n }\n }\n }\n\n var rootElementCfi = computeElementCFI(commonElementAncestor);\n var startElementCfi = computeElementCFI(startContainerElement);\n var endElementCfi = computeElementCFI(endContainerElement);\n var cfi;\n\n if (rootElementCfi && startElementCfi && endElementCfi) {\n var startElementOrTextCfi = startElementCfi;\n\n if (!startIsElement) {\n var startContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(startContainerElement, range.startContainer);\n startElementOrTextCfi = startElementCfi + "/" + startContainerChildTextNodeIndexForCfi + ":" + range.startOffset;\n } else {\n if (range.startOffset >= 0 && range.startOffset < startContainerElement.childNodes.length) {\n var childNode = startContainerElement.childNodes[range.startOffset];\n\n if (childNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (range.startOffset + 1) * 2;\n } else {\n var cfiTextNodeIndex = getChildTextNodeCfiIndex(startContainerElement, childNode);\n startElementOrTextCfi = startElementCfi + "/" + cfiTextNodeIndex;\n }\n } else {\n var cfiIndexOfLastElement = startContainerElement.childElementCount * 2;\n var lastChildNode = startContainerElement.childNodes[startContainerElement.childNodes.length - 1];\n\n if (lastChildNode.nodeType === Node.ELEMENT_NODE) {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 1);\n } else {\n startElementOrTextCfi = startElementCfi + "/" + (cfiIndexOfLastElement + 2);\n }\n }\n }\n\n var endElementOrTextCfi = endElementCfi;\n\n if (!endIsElement) {\n var endContainerChildTextNodeIndexForCfi = getChildTextNodeCfiIndex(endContainerElement, range.endContainer);\n endElementOrTextCfi = endElementCfi + "/" + endContainerChildTextNodeIndexForCfi + ":" + range.endOffset;\n } else {\n if (range.endOffset >= 0 && range.endOffset < endContainerElement.childNodes.length) {\n var _childNode = endContainerElement.childNodes[range.endOffset];\n\n if (_childNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (range.endOffset + 1) * 2;\n } else {\n var _cfiTextNodeIndex = getChildTextNodeCfiIndex(endContainerElement, _childNode);\n\n endElementOrTextCfi = endElementCfi + "/" + _cfiTextNodeIndex;\n }\n } else {\n var _cfiIndexOfLastElement = endContainerElement.childElementCount * 2;\n\n var _lastChildNode = endContainerElement.childNodes[endContainerElement.childNodes.length - 1];\n\n if (_lastChildNode.nodeType === Node.ELEMENT_NODE) {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 1);\n } else {\n endElementOrTextCfi = endElementCfi + "/" + (_cfiIndexOfLastElement + 2);\n }\n }\n }\n\n cfi = rootElementCfi + "," + startElementOrTextCfi.replace(rootElementCfi, "") + "," + endElementOrTextCfi.replace(rootElementCfi, "");\n }\n\n return {\n cfi: cfi,\n endContainerChildTextNodeIndex: endContainerChildTextNodeIndex,\n endContainerElementCssSelector: endContainerElementCssSelector,\n endOffset: range.endOffset,\n startContainerChildTextNodeIndex: startContainerChildTextNodeIndex,\n startContainerElementCssSelector: startContainerElementCssSelector,\n startOffset: range.startOffset\n };\n}\n\nfunction convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n console.log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n console.log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n console.log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n console.log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\n\nfunction frameForHighlightAnnotationMarkWithID(win, id) {\n var clientRects = frameForHighlightWithID(id);\n if (!clientRects) return;\n var topClientRect = clientRects[0];\n var maxHeight = topClientRect.height;\n\n var _iterator18 = highlight_createForOfIteratorHelper(clientRects),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var clientRect = _step18.value;\n if (clientRect.top < topClientRect.top) topClientRect = clientRect;\n if (clientRect.height > maxHeight) maxHeight = clientRect.height;\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n var document = win.document;\n var scrollElement = getScrollingElement(document);\n var paginated = isPaginated(document);\n var bodyRect = document.body.getBoundingClientRect();\n var yOffset;\n\n if (navigator.userAgent.match(/Android/i)) {\n yOffset = paginated ? -scrollElement.scrollTop : bodyRect.top;\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\n yOffset = paginated ? 0 : bodyRect.top;\n }\n\n var newTop = topClientRect.top;\n\n if (_highlightsContainer) {\n do {\n var boundingAreas = document.getElementsByClassName(CLASS_ANNOTATION_BOUNDING_AREA);\n var found = false; //for (let i = 0, length = boundingAreas.snapshotLength; i < length; ++i) {\n\n for (var i = 0, len = boundingAreas.length | 0; i < len; i = i + 1 | 0) {\n var boundingArea = boundingAreas[i];\n\n if (Math.abs(boundingArea.rect.top - (newTop - yOffset)) < 3) {\n newTop += boundingArea.rect.height;\n found = true;\n break;\n }\n }\n } while (found);\n }\n\n topClientRect.top = newTop;\n topClientRect.height = maxHeight;\n return topClientRect;\n}\n\nfunction highlightWithID(id) {\n var i = -1;\n\n var highlight = _highlights.find(function (h, j) {\n i = j;\n return h.id === id;\n });\n\n return highlight;\n}\n\nfunction frameForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n return clientRects;\n}\n\nfunction rangeInfo2Location(rangeInfo) {\n return {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n partialCfi: rangeInfo.cfi,\n domRange: {\n start: {\n cssSelector: rangeInfo.startContainerElementCssSelector,\n textNodeIndex: rangeInfo.startContainerChildTextNodeIndex,\n offset: rangeInfo.startOffset\n },\n end: {\n cssSelector: rangeInfo.endContainerElementCssSelector,\n textNodeIndex: rangeInfo.endContainerChildTextNodeIndex,\n offset: rangeInfo.endOffset\n }\n }\n };\n}\n\nfunction location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n cfi: location.partialCfi,\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction rectangleForHighlightWithID(id) {\n var highlight = highlightWithID(id);\n if (!highlight) return;\n var document = window.document;\n var scrollElement = getScrollingElement(document);\n var range = convertRangeInfo(document, highlight.rangeInfo);\n\n if (!range) {\n return undefined;\n }\n\n var drawUnderline = false;\n var drawStrikeThrough = false;\n var doNotMergeHorizontallyAlignedRects = drawUnderline || drawStrikeThrough; //const clientRects = DEBUG_VISUALS ? range.getClientRects() :\n\n var clientRects = highlight_getClientRectsNoOverlap(range, doNotMergeHorizontallyAlignedRects);\n var size = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRects[0].left,\n width: clientRects[0].width,\n top: clientRects[0].top,\n height: clientRects[0].height\n };\n return size;\n}\nfunction getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n var clientRect = range.getBoundingClientRect();\n var handleBounds = {\n screenWidth: window.outerWidth,\n screenHeight: window.outerHeight,\n left: clientRect.left,\n width: clientRect.width,\n top: clientRect.top,\n height: clientRect.height\n };\n return handleBounds;\n } catch (e) {\n return null;\n }\n}\nfunction setScrollMode(flag) {\n if (!flag) {\n document.documentElement.classList.add(CLASS_PAGINATED);\n } else {\n document.documentElement.classList.remove(CLASS_PAGINATED);\n }\n}\n/*\n if (document.addEventListener) { // IE >= 9; other browsers\n document.addEventListener(\'contextmenu\', function(e) {\n //alert("You\'ve tried to open context menu"); //here you draw your own menu\n //e.preventDefault();\n //let getCssSelector = fullQualifiedSelector;\n \n\t\t\tlet str = window.getSelection();\n\t\t\tlet selectionInfo = getCurrentSelectionInfo();\n\t\t\tlet pos = createHighlight(selectionInfo,{red:10,green:50,blue:230},true);\n\t\t\tlet ret2 = createAnnotation(pos.id);\n\t\t\t\n }, false);\n } else { // IE < 9\n document.attachEvent(\'oncontextmenu\', function() {\n alert("You\'ve tried to open context menu");\n window.event.returnValue = false;\n });\n }\n*/\n// EXTERNAL MODULE: ./node_modules/css-selector-generator/build/index.js\nvar build = __webpack_require__(4766);\n;// CONCATENATED MODULE: ./src/dom.js\n//\n// Copyright 2022 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\nfunction findFirstVisibleLocator() {\n var element = findElement(document.body);\n\n if (!element) {\n return undefined;\n }\n\n return {\n href: "#",\n type: "application/xhtml+xml",\n locations: {\n cssSelector: (0,build.getCssSelector)(element)\n },\n text: {\n highlight: element.textContent\n }\n };\n}\n\nfunction findElement(rootElement) {\n var foundElement = undefined;\n\n for (var i = rootElement.children.length - 1; i >= 0; i--) {\n var child = rootElement.children[i];\n var position = elementRelativePosition(child, undefined);\n\n if (position == 0) {\n if (!shouldIgnoreElement(child)) {\n foundElement = child;\n }\n } else if (position < 0) {\n if (!foundElement) {\n foundElement = child;\n }\n\n break;\n }\n }\n\n if (foundElement) {\n return findElement(foundElement);\n }\n\n return rootElement;\n} // See computeVisibility_() in r2-navigator-js\n\n\nfunction elementRelativePosition(element, domRect\n/* nullable */\n) {\n if (readium.isFixedLayout) return true;\n\n if (element === document.body || element === document.documentElement) {\n return -1;\n }\n\n if (!document || !document.documentElement || !document.body) {\n return 1;\n }\n\n var rect = domRect || element.getBoundingClientRect();\n\n if (isScrollModeEnabled()) {\n return rect.top >= 0 && rect.top <= document.documentElement.clientHeight;\n } else {\n if (rect.left >= pageWidth) {\n return 1;\n } else if (rect.left >= 0) {\n return 0;\n } else {\n return -1;\n }\n }\n}\n\nfunction shouldIgnoreElement(element) {\n var elStyle = getComputedStyle(element);\n\n if (elStyle) {\n var display = elStyle.getPropertyValue("display");\n\n if (display === "none") {\n return true;\n } // Cannot be relied upon, because web browser engine reports invisible when out of view in\n // scrolled columns!\n // const visibility = elStyle.getPropertyValue("visibility");\n // if (visibility === "hidden") {\n // return false;\n // }\n\n\n var opacity = elStyle.getPropertyValue("opacity");\n\n if (opacity === "0") {\n return true;\n }\n }\n\n return false;\n}\n// EXTERNAL MODULE: ./node_modules/string.prototype.matchall/index.js\nvar string_prototype_matchall = __webpack_require__(4956);\nvar string_prototype_matchall_default = /*#__PURE__*/__webpack_require__.n(string_prototype_matchall);\n;// CONCATENATED MODULE: ./src/selection.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n\n\n // Polyfill for Android API 26\n\n\nstring_prototype_matchall_default().shim();\nvar selection_debug = true;\nfunction getCurrentSelection() {\n var text = getCurrentSelectionText();\n\n if (!text) {\n return null;\n }\n\n var rect = selection_getSelectionRect();\n return {\n text: text,\n rect: rect\n };\n}\n\nfunction selection_getSelectionRect() {\n try {\n var sel = window.getSelection();\n\n if (!sel) {\n return;\n }\n\n var range = sel.getRangeAt(0);\n return toNativeRect(range.getBoundingClientRect());\n } catch (e) {\n logError(e);\n return null;\n }\n}\n\nfunction getCurrentSelectionText() {\n var selection = window.getSelection();\n\n if (!selection) {\n return undefined;\n }\n\n if (selection.isCollapsed) {\n return undefined;\n }\n\n var highlight = selection.toString();\n var cleanHighlight = highlight.trim().replace(/\\n/g, " ").replace(/\\s\\s+/g, " ");\n\n if (cleanHighlight.length === 0) {\n return undefined;\n }\n\n if (!selection.anchorNode || !selection.focusNode) {\n return undefined;\n }\n\n var range = selection.rangeCount === 1 ? selection.getRangeAt(0) : selection_createOrderedRange(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n if (!range || range.collapsed) {\n selection_log("$$$$$$$$$$$$$$$$$ CANNOT GET NON-COLLAPSED SELECTION RANGE?!");\n return undefined;\n }\n\n var text = document.body.textContent;\n var textRange = text_range_TextRange.fromRange(range).relativeTo(document.body);\n var start = textRange.start.offset;\n var end = textRange.end.offset;\n var snippetLength = 200; // Compute the text before the highlight, ignoring the first "word", which might be cut.\n\n var before = text.slice(Math.max(0, start - snippetLength), start);\n var firstWordStart = before.search(/(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/g);\n\n if (firstWordStart !== -1) {\n before = before.slice(firstWordStart + 1);\n } // Compute the text after the highlight, ignoring the last "word", which might be cut.\n\n\n var after = text.slice(end, Math.min(text.length, end + snippetLength));\n var lastWordEnd = Array.from(after.matchAll(/(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\0-@\\[-`\\{-\\xA9\\xAB-\\xB4\\xB6-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u036F\\u0375\\u0378\\u0379\\u037E\\u0380-\\u0385\\u0387\\u038B\\u038D\\u03A2\\u03F6\\u0482-\\u0489\\u0530\\u0557\\u0558\\u055A-\\u055F\\u0589-\\u05CF\\u05EB-\\u05EE\\u05F3-\\u061F\\u064B-\\u066D\\u0670\\u06D4\\u06D6-\\u06E4\\u06E7-\\u06ED\\u06F0-\\u06F9\\u06FD\\u06FE\\u0700-\\u070F\\u0711\\u0730-\\u074C\\u07A6-\\u07B0\\u07B2-\\u07C9\\u07EB-\\u07F3\\u07F6-\\u07F9\\u07FB-\\u07FF\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u083F\\u0859-\\u085F\\u086B-\\u086F\\u0888\\u088F-\\u089F\\u08CA-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0970\\u0981-\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA-\\u09BC\\u09BE-\\u09CD\\u09CF-\\u09DB\\u09DE\\u09E2-\\u09EF\\u09F2-\\u09FB\\u09FD-\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A-\\u0A58\\u0A5D\\u0A5F-\\u0A71\\u0A75-\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA-\\u0ABC\\u0ABE-\\u0ACF\\u0AD1-\\u0ADF\\u0AE2-\\u0AF8\\u0AFA-\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A-\\u0B3C\\u0B3E-\\u0B5B\\u0B5E\\u0B62-\\u0B70\\u0B72-\\u0B82\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BCF\\u0BD1-\\u0C04\\u0C0D\\u0C11\\u0C29\\u0C3A-\\u0C3C\\u0C3E-\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C62-\\u0C7F\\u0C81-\\u0C84\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA-\\u0CBC\\u0CBE-\\u0CDC\\u0CDF\\u0CE2-\\u0CF0\\u0CF3-\\u0D03\\u0D0D\\u0D11\\u0D3B\\u0D3C\\u0D3E-\\u0D4D\\u0D4F-\\u0D53\\u0D57-\\u0D5E\\u0D62-\\u0D79\\u0D80-\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0E00\\u0E31\\u0E34-\\u0E3F\\u0E47-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EB1\\u0EB4-\\u0EBC\\u0EBE\\u0EBF\\u0EC5\\u0EC7-\\u0EDB\\u0EE0-\\u0EFF\\u0F01-\\u0F3F\\u0F48\\u0F6D-\\u0F87\\u0F8D-\\u0FFF\\u102B-\\u103E\\u1040-\\u104F\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109F\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u10FB\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B-\\u137F\\u1390-\\u139F\\u13F6\\u13F7\\u13FE-\\u1400\\u166D\\u166E\\u1680\\u169B-\\u169F\\u16EB-\\u16F0\\u16F9-\\u16FF\\u1712-\\u171E\\u1732-\\u173F\\u1752-\\u175F\\u176D\\u1771-\\u177F\\u17B4-\\u17D6\\u17D8-\\u17DB\\u17DD-\\u181F\\u1879-\\u187F\\u1885\\u1886\\u18A9\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F-\\u194F\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19FF\\u1A17-\\u1A1F\\u1A55-\\u1AA6\\u1AA8-\\u1B04\\u1B34-\\u1B44\\u1B4D-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BFF\\u1C24-\\u1C4C\\u1C50-\\u1C59\\u1C7E\\u1C7F\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC0-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1CFB-\\u1CFF\\u1DC0-\\u1DFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FBD\\u1FBF-\\u1FC1\\u1FC5\\u1FCD-\\u1FCF\\u1FD4\\u1FD5\\u1FDC-\\u1FDF\\u1FED-\\u1FF1\\u1FF5\\u1FFD-\\u2070\\u2072-\\u207E\\u2080-\\u208F\\u209D-\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F-\\u2182\\u2185-\\u2BFF\\u2CE5-\\u2CEA\\u2CEF-\\u2CF1\\u2CF4-\\u2CFF\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D70-\\u2D7F\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF-\\u2E2E\\u2E30-\\u3004\\u3007-\\u3030\\u3036-\\u303A\\u303D-\\u3040\\u3097-\\u309C\\u30A0\\u30FB\\u3100-\\u3104\\u3130\\u318F-\\u319F\\u31C0-\\u31EF\\u3200-\\u33FF\\u4DC0-\\u4DFF\\uA48D-\\uA4CF\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA620-\\uA629\\uA62C-\\uA63F\\uA66F-\\uA67E\\uA69E\\uA69F\\uA6E6-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA802\\uA806\\uA80B\\uA823-\\uA83F\\uA874-\\uA881\\uA8B4-\\uA8F1\\uA8F8-\\uA8FA\\uA8FC\\uA8FF-\\uA909\\uA926-\\uA92F\\uA947-\\uA95F\\uA97D-\\uA983\\uA9B3-\\uA9CE\\uA9D0-\\uA9DF\\uA9E5\\uA9F0-\\uA9F9\\uA9FF\\uAA29-\\uAA3F\\uAA43\\uAA4C-\\uAA5F\\uAA77-\\uAA79\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAC3-\\uAADA\\uAADE\\uAADF\\uAAEB-\\uAAF1\\uAAF5-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB5B\\uAB6A-\\uAB6F\\uABE3-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uE000-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB1E\\uFB29\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBB2-\\uFBD2\\uFD3E-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDEF\\uFDFC-\\uFE6F\\uFE75\\uFEFD-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFFF]|\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEFF\\uDF20-\\uDF2C\\uDF41\\uDF4A-\\uDF4F\\uDF76-\\uDF7F\\uDF9E\\uDF9F\\uDFC4-\\uDFC7\\uDFD0-\\uDFFF]|\\uD801[\\uDC9E-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6F\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56-\\uDC5F\\uDC77-\\uDC7F\\uDC9F-\\uDCDF\\uDCF3\\uDCF6-\\uDCFF\\uDD16-\\uDD1F\\uDD3A-\\uDD7F\\uDDB8-\\uDDBD\\uDDC0-\\uDDFF\\uDE01-\\uDE0F\\uDE14\\uDE18\\uDE36-\\uDE5F\\uDE7D-\\uDE7F\\uDE9D-\\uDEBF\\uDEC8\\uDEE5-\\uDEFF\\uDF36-\\uDF3F\\uDF56-\\uDF5F\\uDF73-\\uDF7F\\uDF92-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCFF\\uDD24-\\uDE7F\\uDEAA-\\uDEAF\\uDEB2-\\uDEFF\\uDF1D-\\uDF26\\uDF28-\\uDF2F\\uDF46-\\uDF6F\\uDF82-\\uDFAF\\uDFC5-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC70\\uDC73\\uDC74\\uDC76-\\uDC82\\uDCB0-\\uDCCF\\uDCE9-\\uDD02\\uDD27-\\uDD43\\uDD45\\uDD46\\uDD48-\\uDD4F\\uDD73-\\uDD75\\uDD77-\\uDD82\\uDDB3-\\uDDC0\\uDDC5-\\uDDD9\\uDDDB\\uDDDD-\\uDDFF\\uDE12\\uDE2C-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEA9-\\uDEAF\\uDEDF-\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A-\\uDF3C\\uDF3E-\\uDF4F\\uDF51-\\uDF5C\\uDF62-\\uDFFF]|\\uD805[\\uDC35-\\uDC46\\uDC4B-\\uDC5E\\uDC62-\\uDC7F\\uDCB0-\\uDCC3\\uDCC6\\uDCC8-\\uDD7F\\uDDAF-\\uDDD7\\uDDDC-\\uDDFF\\uDE30-\\uDE43\\uDE45-\\uDE7F\\uDEAB-\\uDEB7\\uDEB9-\\uDEFF\\uDF1B-\\uDF3F\\uDF47-\\uDFFF]|\\uD806[\\uDC2C-\\uDC9F\\uDCE0-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD30-\\uDD3E\\uDD40\\uDD42-\\uDD9F\\uDDA8\\uDDA9\\uDDD1-\\uDDE0\\uDDE2\\uDDE4-\\uDDFF\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE4F\\uDE51-\\uDE5B\\uDE8A-\\uDE9C\\uDE9E-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC2F-\\uDC3F\\uDC41-\\uDC71\\uDC90-\\uDCFF\\uDD07\\uDD0A\\uDD31-\\uDD45\\uDD47-\\uDD5F\\uDD66\\uDD69\\uDD8A-\\uDD97\\uDD99-\\uDEDF\\uDEF3-\\uDFAF\\uDFB1-\\uDFFF]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC00-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD834\\uD836\\uD83C-\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF1-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F-\\uDE6F\\uDEBF-\\uDECF\\uDEEE-\\uDEFF\\uDF30-\\uDF3F\\uDF44-\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE80-\\uDEFF\\uDF4B-\\uDF4F\\uDF51-\\uDF92\\uDFA0-\\uDFDF\\uDFE2\\uDFE4-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3\\uDFCC-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC00-\\uDCFF\\uDD2D-\\uDD36\\uDD3E-\\uDD4D\\uDD4F-\\uDE8F\\uDEAE-\\uDEBF\\uDEEC-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5-\\uDCFF\\uDD44-\\uDD4A\\uDD4C-\\uDFFF]|\\uD83B[\\uDC00-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g)).pop();\n\n if (lastWordEnd !== undefined && lastWordEnd.index > 1) {\n after = after.slice(0, lastWordEnd.index + 1);\n }\n\n return {\n highlight: highlight,\n before: before,\n after: after\n };\n}\n\nfunction selection_createOrderedRange(startNode, startOffset, endNode, endOffset) {\n var range = new Range();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n\n if (!range.collapsed) {\n return range;\n }\n\n selection_log(">>> createOrderedRange COLLAPSED ... RANGE REVERSE?");\n var rangeReverse = new Range();\n rangeReverse.setStart(endNode, endOffset);\n rangeReverse.setEnd(startNode, startOffset);\n\n if (!rangeReverse.collapsed) {\n selection_log(">>> createOrderedRange RANGE REVERSE OK.");\n return range;\n }\n\n selection_log(">>> createOrderedRange RANGE REVERSE ALSO COLLAPSED?!");\n return undefined;\n}\n\nfunction selection_convertRangeInfo(document, rangeInfo) {\n var startElement = document.querySelector(rangeInfo.startContainerElementCssSelector);\n\n if (!startElement) {\n selection_log("^^^ convertRangeInfo NO START ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var startContainer = startElement;\n\n if (rangeInfo.startContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.startContainerChildTextNodeIndex >= startElement.childNodes.length?!");\n return undefined;\n }\n\n startContainer = startElement.childNodes[rangeInfo.startContainerChildTextNodeIndex];\n\n if (startContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo startContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n var endElement = document.querySelector(rangeInfo.endContainerElementCssSelector);\n\n if (!endElement) {\n selection_log("^^^ convertRangeInfo NO END ELEMENT CSS SELECTOR?!");\n return undefined;\n }\n\n var endContainer = endElement;\n\n if (rangeInfo.endContainerChildTextNodeIndex >= 0) {\n if (rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length) {\n selection_log("^^^ convertRangeInfo rangeInfo.endContainerChildTextNodeIndex >= endElement.childNodes.length?!");\n return undefined;\n }\n\n endContainer = endElement.childNodes[rangeInfo.endContainerChildTextNodeIndex];\n\n if (endContainer.nodeType !== Node.TEXT_NODE) {\n selection_log("^^^ convertRangeInfo endContainer.nodeType !== Node.TEXT_NODE?!");\n return undefined;\n }\n }\n\n return selection_createOrderedRange(startContainer, rangeInfo.startOffset, endContainer, rangeInfo.endOffset);\n}\nfunction selection_location2RangeInfo(location) {\n var locations = location.locations;\n var domRange = locations.domRange;\n var start = domRange.start;\n var end = domRange.end;\n return {\n endContainerChildTextNodeIndex: end.textNodeIndex,\n endContainerElementCssSelector: end.cssSelector,\n endOffset: end.offset,\n startContainerChildTextNodeIndex: start.textNodeIndex,\n startContainerElementCssSelector: start.cssSelector,\n startOffset: start.offset\n };\n}\n\nfunction selection_log() {\n if (selection_debug) {\n log.apply(null, arguments);\n }\n}\n;// CONCATENATED MODULE: ./src/index.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Base script used by both reflowable and fixed layout resources.\n\n\n\n\n\n // Public API used by the navigator.\n\nwindow.readium = {\n // utils\n scrollToId: scrollToId,\n scrollToPosition: scrollToPosition,\n scrollToText: scrollToText,\n scrollLeft: scrollLeft,\n scrollRight: scrollRight,\n scrollToStart: scrollToStart,\n scrollToEnd: scrollToEnd,\n setProperty: setProperty,\n removeProperty: removeProperty,\n // selection\n getCurrentSelection: getCurrentSelection,\n // decoration\n registerDecorationTemplates: registerTemplates,\n getDecorations: getDecorations,\n // DOM\n findFirstVisibleLocator: findFirstVisibleLocator\n}; // Legacy highlights API.\n\nwindow.createAnnotation = createAnnotation;\nwindow.createHighlight = createHighlight;\nwindow.destroyHighlight = destroyHighlight;\nwindow.getCurrentSelectionInfo = getCurrentSelectionInfo;\nwindow.getSelectionRect = getSelectionRect;\nwindow.rectangleForHighlightWithID = rectangleForHighlightWithID;\nwindow.setScrollMode = setScrollMode;\n;// CONCATENATED MODULE: ./src/index-reflowable.js\n//\n// Copyright 2021 Readium Foundation. All rights reserved.\n// Use of this source code is governed by the BSD-style license\n// available in the top-level LICENSE file of the project.\n//\n// Script used for reflowable resources.\n\nwindow.readium.isReflowable = true;\ndocument.addEventListener("DOMContentLoaded", function () {\n // Setups the `viewport` meta tag to disable zooming.\n var meta = document.createElement("meta");\n meta.setAttribute("name", "viewport");\n meta.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no");\n document.head.appendChild(meta);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUM0Wix1QkFBUCxHQUFpQ0EsdUJBQWpDO0FBQ0E1WixNQUFNLENBQUM0akIsZ0JBQVAsR0FBMEJBLGdCQUExQjtBQUNBNWpCLE1BQU0sQ0FBQzJqQiwyQkFBUCxHQUFxQ0EsMkJBQXJDO0FBQ0EzakIsTUFBTSxDQUFDK2pCLGFBQVAsR0FBdUJBLGFBQXZCLEM7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUEvakIsTUFBTSxDQUFDd2tCLE9BQVAsQ0FBZWEsWUFBZixHQUE4QixJQUE5QjtBQUVBNW5CLFFBQVEsQ0FBQ3dDLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxZQUFZO0FBQ3hEO0FBQ0EsTUFBSXFsQixJQUFJLEdBQUc3bkIsUUFBUSxDQUFDbUUsYUFBVCxDQUF1QixNQUF2QixDQUFYO0FBQ0EwakIsRUFBQUEsSUFBSSxDQUFDempCLFlBQUwsQ0FBa0IsTUFBbEIsRUFBMEIsVUFBMUI7QUFDQXlqQixFQUFBQSxJQUFJLENBQUN6akIsWUFBTCxDQUNFLFNBREYsRUFFRSw4RkFGRjtBQUlBcEUsRUFBQUEsUUFBUSxDQUFDOG5CLElBQVQsQ0FBY3RqQixXQUFkLENBQTBCcWpCLElBQTFCO0FBQ0QsQ0FURCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL21hdGNoLXF1b3RlLmpzP2RkNmEiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdGV4dC1yYW5nZS5qcz9mZGVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3R5cGVzLmpzPzQwMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvcmVjdC5qcz80ZDVhIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvZGVjb3JhdG9yLmpzPzFiMDQiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9nZXN0dXJlcy5qcz8xNGMyIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaGlnaGxpZ2h0LmpzPzhkYTgiLCJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL3NyYy9kb20uanM/Y2JmMCIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL3NlbGVjdGlvbi5qcz81OWFjIiwid2VicGFjazovL3JlYWRpdW0tanMvLi9zcmMvaW5kZXguanM/YjYzNSIsIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vc3JjL2luZGV4LXJlZmxvd2FibGUuanM/MzkyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwcm94U2VhcmNoIGZyb20gJ2FwcHJveC1zdHJpbmctbWF0Y2gnO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcHJveC1zdHJpbmctbWF0Y2gnKS5NYXRjaH0gU3RyaW5nTWF0Y2hcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE1hdGNoXG4gKiBAcHJvcCB7bnVtYmVyfSBzdGFydCAtIFN0YXJ0IG9mZnNldCBvZiBtYXRjaCBpbiB0ZXh0XG4gKiBAcHJvcCB7bnVtYmVyfSBlbmQgLSBFbmQgb2Zmc2V0IG9mIG1hdGNoIGluIHRleHRcbiAqIEBwcm9wIHtudW1iZXJ9IHNjb3JlIC1cbiAqICAgU2NvcmUgZm9yIHRoZSBtYXRjaCBiZXR3ZWVuIDAgYW5kIDEuMCwgd2hlcmUgMS4wIGluZGljYXRlcyBhIHBlcmZlY3QgbWF0Y2hcbiAqICAgZm9yIHRoZSBxdW90ZSBhbmQgY29udGV4dC5cbiAqL1xuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2hlcyBmb3IgYHN0cmAgaW4gYHRleHRgIGFsbG93aW5nIHVwIHRvIGBtYXhFcnJvcnNgIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtudW1iZXJ9IG1heEVycm9yc1xuICogQHJldHVybiB7U3RyaW5nTWF0Y2hbXX1cbiAqL1xuZnVuY3Rpb24gc2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKSB7XG4gIC8vIERvIGEgZmFzdCBzZWFyY2ggZm9yIGV4YWN0IG1hdGNoZXMuIFRoZSBgYXBwcm94LXN0cmluZy1tYXRjaGAgbGlicmFyeVxuICAvLyBkb2Vzbid0IGN1cnJlbnRseSBpbmNvcnBvcmF0ZSB0aGlzIG9wdGltaXphdGlvbiBpdHNlbGYuXG4gIGxldCBtYXRjaFBvcyA9IDA7XG4gIGxldCBleGFjdE1hdGNoZXMgPSBbXTtcbiAgd2hpbGUgKG1hdGNoUG9zICE9PSAtMSkge1xuICAgIG1hdGNoUG9zID0gdGV4dC5pbmRleE9mKHN0ciwgbWF0Y2hQb3MpO1xuICAgIGlmIChtYXRjaFBvcyAhPT0gLTEpIHtcbiAgICAgIGV4YWN0TWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IG1hdGNoUG9zLFxuICAgICAgICBlbmQ6IG1hdGNoUG9zICsgc3RyLmxlbmd0aCxcbiAgICAgICAgZXJyb3JzOiAwLFxuICAgICAgfSk7XG4gICAgICBtYXRjaFBvcyArPSAxO1xuICAgIH1cbiAgfVxuICBpZiAoZXhhY3RNYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZXhhY3RNYXRjaGVzO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4YWN0IG1hdGNoZXMsIGRvIGEgbW9yZSBleHBlbnNpdmUgc2VhcmNoIGZvciBtYXRjaGVzXG4gIC8vIHdpdGggZXJyb3JzLlxuICByZXR1cm4gYXBwcm94U2VhcmNoKHRleHQsIHN0ciwgbWF4RXJyb3JzKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIGEgc2NvcmUgYmV0d2VlbiAwIGFuZCAxLjAgZm9yIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gYHRleHRgIGFuZCBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB0ZXh0TWF0Y2hTY29yZSh0ZXh0LCBzdHIpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgLSBgc2NvcmVNYXRjaGAgd2lsbCBuZXZlciBwYXNzIGFuIGVtcHR5IHN0cmluZyAqL1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCB0ZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwLjA7XG4gIH1cbiAgY29uc3QgbWF0Y2hlcyA9IHNlYXJjaCh0ZXh0LCBzdHIsIHN0ci5sZW5ndGgpO1xuXG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICByZXR1cm4gMSAtIChtYXRjaGVzWzBdLmVycm9ycyAvIHN0ci5sZW5ndGgpO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGJlc3QgYXBwcm94aW1hdGUgbWF0Y2ggZm9yIGBxdW90ZWAgaW4gYHRleHRgLlxuICpcbiAqIFJldHVybnMgYG51bGxgIGlmIG5vIG1hdGNoIGV4Y2VlZGluZyB0aGUgbWluaW11bSBxdWFsaXR5IHRocmVzaG9sZCB3YXMgZm91bmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBEb2N1bWVudCB0ZXh0IHRvIHNlYXJjaFxuICogQHBhcmFtIHtzdHJpbmd9IHF1b3RlIC0gU3RyaW5nIHRvIGZpbmQgd2l0aGluIGB0ZXh0YFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgLVxuICogICBDb250ZXh0IGluIHdoaWNoIHRoZSBxdW90ZSBvcmlnaW5hbGx5IGFwcGVhcmVkLiBUaGlzIGlzIHVzZWQgdG8gY2hvb3NlIHRoZVxuICogICBiZXN0IG1hdGNoLlxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQucHJlZml4XSAtIEV4cGVjdGVkIHRleHQgYmVmb3JlIHRoZSBxdW90ZVxuICogICBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc3VmZml4XSAtIEV4cGVjdGVkIHRleHQgYWZ0ZXIgdGhlIHF1b3RlXG4gKiAgIEBwYXJhbSB7bnVtYmVyfSBbY29udGV4dC5oaW50XSAtIEV4cGVjdGVkIG9mZnNldCBvZiBtYXRjaCB3aXRoaW4gdGV4dFxuICogQHJldHVybiB7TWF0Y2h8bnVsbH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoUXVvdGUodGV4dCwgcXVvdGUsIGNvbnRleHQgPSB7fSkge1xuICBpZiAocXVvdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaG9vc2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVycm9ycyB0byBhbGxvdyBmb3IgdGhlIGluaXRpYWwgc2VhcmNoLlxuICAvLyBUaGlzIGNob2ljZSBpbnZvbHZlcyBhIHRyYWRlb2ZmIGJldHdlZW46XG4gIC8vXG4gIC8vICAtIFJlY2FsbCAocHJvcG9ydGlvbiBvZiBcImdvb2RcIiBtYXRjaGVzIGZvdW5kKVxuICAvLyAgLSBQcmVjaXNpb24gKHByb3BvcnRpb24gb2YgbWF0Y2hlcyBmb3VuZCB3aGljaCBhcmUgXCJnb29kXCIpXG4gIC8vICAtIENvc3Qgb2YgdGhlIGluaXRpYWwgc2VhcmNoIGFuZCBvZiBwcm9jZXNzaW5nIHRoZSBjYW5kaWRhdGUgbWF0Y2hlcyBbMV1cbiAgLy9cbiAgLy8gWzFdIFNwZWNpZmljYWxseSwgdGhlIGV4cGVjdGVkLXRpbWUgY29tcGxleGl0eSBvZiB0aGUgaW5pdGlhbCBzZWFyY2ggaXNcbiAgLy8gICAgIGBPKChtYXhFcnJvcnMgLyAzMikgKiB0ZXh0Lmxlbmd0aClgLiBTZWUgYGFwcHJveC1zdHJpbmctbWF0Y2hgIGRvY3MuXG4gIGNvbnN0IG1heEVycm9ycyA9IE1hdGgubWluKDI1NiwgcXVvdGUubGVuZ3RoIC8gMik7XG5cbiAgLy8gRmluZCBjbG9zZXN0IG1hdGNoZXMgZm9yIGBxdW90ZWAgaW4gYHRleHRgIGJhc2VkIG9uIGVkaXQgZGlzdGFuY2UuXG4gIGNvbnN0IG1hdGNoZXMgPSBzZWFyY2godGV4dCwgcXVvdGUsIG1heEVycm9ycyk7XG5cbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBhIHNjb3JlIGJldHdlZW4gMCBhbmQgMS4wIGZvciBhIG1hdGNoIGNhbmRpZGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdNYXRjaH0gbWF0Y2hcbiAgICovXG4gIGNvbnN0IHNjb3JlTWF0Y2ggPSBtYXRjaCA9PiB7XG4gICAgY29uc3QgcXVvdGVXZWlnaHQgPSA1MDsgLy8gU2ltaWxhcml0eSBvZiBtYXRjaGVkIHRleHQgdG8gcXVvdGUuXG4gICAgY29uc3QgcHJlZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBiZWZvcmUgbWF0Y2hlZCB0ZXh0IHRvIGBjb250ZXh0LnByZWZpeGAuXG4gICAgY29uc3Qgc3VmZml4V2VpZ2h0ID0gMjA7IC8vIFNpbWlsYXJpdHkgb2YgdGV4dCBhZnRlciBtYXRjaGVkIHRleHQgdG8gYGNvbnRleHQuc3VmZml4YC5cbiAgICBjb25zdCBwb3NXZWlnaHQgPSAyOyAvLyBQcm94aW1pdHkgdG8gZXhwZWN0ZWQgbG9jYXRpb24uIFVzZWQgYXMgYSB0aWUtYnJlYWtlci5cblxuICAgIGNvbnN0IHF1b3RlU2NvcmUgPSAxIC0gbWF0Y2guZXJyb3JzIC8gcXVvdGUubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJlZml4U2NvcmUgPSBjb250ZXh0LnByZWZpeFxuICAgICAgPyB0ZXh0TWF0Y2hTY29yZShcbiAgICAgICAgICB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIG1hdGNoLnN0YXJ0IC0gY29udGV4dC5wcmVmaXgubGVuZ3RoKSwgbWF0Y2guc3RhcnQpLFxuICAgICAgICAgIGNvbnRleHQucHJlZml4XG4gICAgICAgIClcbiAgICAgIDogMS4wO1xuICAgIGNvbnN0IHN1ZmZpeFNjb3JlID0gY29udGV4dC5zdWZmaXhcbiAgICAgID8gdGV4dE1hdGNoU2NvcmUoXG4gICAgICAgICAgdGV4dC5zbGljZShtYXRjaC5lbmQsIG1hdGNoLmVuZCArIGNvbnRleHQuc3VmZml4Lmxlbmd0aCksXG4gICAgICAgICAgY29udGV4dC5zdWZmaXhcbiAgICAgICAgKVxuICAgICAgOiAxLjA7XG5cbiAgICBsZXQgcG9zU2NvcmUgPSAxLjA7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmhpbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmFicyhtYXRjaC5zdGFydCAtIGNvbnRleHQuaGludCk7XG4gICAgICBwb3NTY29yZSA9IDEuMCAtIG9mZnNldCAvIHRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1Njb3JlID1cbiAgICAgIHF1b3RlV2VpZ2h0ICogcXVvdGVTY29yZSArXG4gICAgICBwcmVmaXhXZWlnaHQgKiBwcmVmaXhTY29yZSArXG4gICAgICBzdWZmaXhXZWlnaHQgKiBzdWZmaXhTY29yZSArXG4gICAgICBwb3NXZWlnaHQgKiBwb3NTY29yZTtcbiAgICBjb25zdCBtYXhTY29yZSA9IHF1b3RlV2VpZ2h0ICsgcHJlZml4V2VpZ2h0ICsgc3VmZml4V2VpZ2h0ICsgcG9zV2VpZ2h0O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTY29yZSA9IHJhd1Njb3JlIC8gbWF4U2NvcmU7XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZFNjb3JlO1xuICB9O1xuXG4gIC8vIFJhbmsgbWF0Y2hlcyBiYXNlZCBvbiBzaW1pbGFyaXR5IG9mIGFjdHVhbCBhbmQgZXhwZWN0ZWQgc3Vycm91bmRpbmcgdGV4dFxuICAvLyBhbmQgYWN0dWFsL2V4cGVjdGVkIG9mZnNldCBpbiB0aGUgZG9jdW1lbnQgdGV4dC5cbiAgY29uc3Qgc2NvcmVkTWF0Y2hlcyA9IG1hdGNoZXMubWFwKG0gPT4gKHtcbiAgICBzdGFydDogbS5zdGFydCxcbiAgICBlbmQ6IG0uZW5kLFxuICAgIHNjb3JlOiBzY29yZU1hdGNoKG0pLFxuICB9KSk7XG5cbiAgLy8gQ2hvb3NlIG1hdGNoIHdpdGggaGlnaGVzdCBzY29yZS5cbiAgc2NvcmVkTWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIHJldHVybiBzY29yZWRNYXRjaGVzWzBdO1xufVxuIiwiLyoqXG4gKiBSZXR1cm4gdGhlIGNvbWJpbmVkIGxlbmd0aCBvZiB0ZXh0IG5vZGVzIGNvbnRhaW5lZCBpbiBgbm9kZWAuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKi9cbmZ1bmN0aW9uIG5vZGVUZXh0TGVuZ3RoKG5vZGUpIHtcbiAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgLy8gbmIuIGB0ZXh0Q29udGVudGAgZXhjbHVkZXMgdGV4dCBpbiBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnNcbiAgICAgIC8vIHdoZW4gY2FsbGVkIG9uIGEgcGFyZW50IGVsZW1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3VidHJhY3QgdGhhdCBoZXJlLlxuXG4gICAgICByZXR1cm4gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChub2RlLnRleHRDb250ZW50KS5sZW5ndGg7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIHRleHQgb2YgYWxsIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqL1xuZnVuY3Rpb24gcHJldmlvdXNTaWJsaW5nc1RleHRMZW5ndGgobm9kZSkge1xuICBsZXQgc2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICBsZXQgbGVuZ3RoID0gMDtcbiAgd2hpbGUgKHNpYmxpbmcpIHtcbiAgICBsZW5ndGggKz0gbm9kZVRleHRMZW5ndGgoc2libGluZyk7XG4gICAgc2libGluZyA9IHNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG4gIHJldHVybiBsZW5ndGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXIgb2Zmc2V0cyB3aXRoaW4gYW4gZWxlbWVudCB0byAodGV4dCBub2RlLCBwb3NpdGlvbilcbiAqIHBhaXJzLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJbXX0gb2Zmc2V0cyAtIE9mZnNldHMsIHdoaWNoIG11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9W119XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPZmZzZXRzKGVsZW1lbnQsIC4uLm9mZnNldHMpIHtcbiAgbGV0IG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIGNvbnN0IG5vZGVJdGVyID0gLyoqIEB0eXBlIHtEb2N1bWVudH0gKi8gKFxuICAgIGVsZW1lbnQub3duZXJEb2N1bWVudFxuICApLmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICBsZXQgY3VycmVudE5vZGUgPSBub2RlSXRlci5uZXh0Tm9kZSgpO1xuICBsZXQgdGV4dE5vZGU7XG4gIGxldCBsZW5ndGggPSAwO1xuXG4gIC8vIEZpbmQgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRoZSBgbmV4dE9mZnNldGB0aCBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RhcnRcbiAgLy8gb2YgYGVsZW1lbnRgLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIGN1cnJlbnROb2RlKSB7XG4gICAgdGV4dE5vZGUgPSAvKiogQHR5cGUge1RleHR9ICovIChjdXJyZW50Tm9kZSk7XG4gICAgaWYgKGxlbmd0aCArIHRleHROb2RlLmRhdGEubGVuZ3RoID4gbmV4dE9mZnNldCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHsgbm9kZTogdGV4dE5vZGUsIG9mZnNldDogbmV4dE9mZnNldCAtIGxlbmd0aCB9KTtcbiAgICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gbm9kZUl0ZXIubmV4dE5vZGUoKTtcbiAgICAgIGxlbmd0aCArPSB0ZXh0Tm9kZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICAvLyBCb3VuZGFyeSBjYXNlLlxuICB3aGlsZSAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkICYmIHRleHROb2RlICYmIGxlbmd0aCA9PT0gbmV4dE9mZnNldCkge1xuICAgIHJlc3VsdHMucHVzaCh7IG5vZGU6IHRleHROb2RlLCBvZmZzZXQ6IHRleHROb2RlLmRhdGEubGVuZ3RoIH0pO1xuICAgIG5leHRPZmZzZXQgPSBvZmZzZXRzLnNoaWZ0KCk7XG4gIH1cblxuICBpZiAobmV4dE9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ09mZnNldCBleGNlZWRzIHRleHQgbGVuZ3RoJyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGxldCBSRVNPTFZFX0ZPUldBUkRTID0gMTtcbmV4cG9ydCBsZXQgUkVTT0xWRV9CQUNLV0FSRFMgPSAyO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gb2Zmc2V0IHdpdGhpbiB0aGUgdGV4dCBjb250ZW50IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogVGhpcyBwb3NpdGlvbiBjYW4gYmUgcmVzb2x2ZWQgdG8gYSBzcGVjaWZpYyBkZXNjZW5kYW50IG5vZGUgaW4gdGhlIGN1cnJlbnRcbiAqIERPTSBzdWJ0cmVlIG9mIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBgcmVzb2x2ZWAgbWV0aG9kLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSB0ZXh0IHBvc2l0aW9uIGBvZmZzZXRgIHdpdGhpblxuICAgKiB0aGUgdGV4dCBjb250ZW50IG9mIGBlbGVtZW50YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9mZnNldCkge1xuICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZnNldCBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLyoqIEVsZW1lbnQgdGhhdCBgb2Zmc2V0YCBpcyByZWxhdGl2ZSB0by4gKi9cbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgLyoqIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGVsZW1lbnQncyBgdGV4dENvbnRlbnRgLiAqL1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgb2YgdGhpcyBwb3NpdGlvbiB3aXRoIG9mZnNldCByZWxhdGl2ZSB0byBhIGdpdmVuIGFuY2VzdG9yXG4gICAqIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50IC0gQW5jZXN0b3Igb2YgYHRoaXMuZWxlbWVudGBcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgcmVsYXRpdmVUbyhwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudC5jb250YWlucyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY3VycmVudCBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgbGV0IGVsID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBvZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB3aGlsZSAoZWwgIT09IHBhcmVudCkge1xuICAgICAgb2Zmc2V0ICs9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKGVsKTtcbiAgICAgIGVsID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oZWwsIG9mZnNldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcG9zaXRpb24gdG8gYSBzcGVjaWZpYyB0ZXh0IG5vZGUgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLlxuICAgKlxuICAgKiBUaHJvd3MgaWYgYHRoaXMub2Zmc2V0YCBleGNlZWRzIHRoZSBsZW5ndGggb2YgdGhlIGVsZW1lbnQncyB0ZXh0LiBJbiB0aGVcbiAgICogY2FzZSB3aGVyZSB0aGUgZWxlbWVudCBoYXMgbm8gdGV4dCBhbmQgYHRoaXMub2Zmc2V0YCBpcyAwLCB0aGUgYGRpcmVjdGlvbmBcbiAgICogb3B0aW9uIGRldGVybWluZXMgd2hhdCBoYXBwZW5zLlxuICAgKlxuICAgKiBPZmZzZXRzIGF0IHRoZSBib3VuZGFyeSBiZXR3ZWVuIHR3byBub2RlcyBhcmUgcmVzb2x2ZWQgdG8gdGhlIHN0YXJ0IG9mIHRoZVxuICAgKiBub2RlIHRoYXQgYmVnaW5zIGF0IHRoZSBib3VuZGFyeS5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiAgIEBwYXJhbSB7UkVTT0xWRV9GT1JXQVJEU3xSRVNPTFZFX0JBQ0tXQVJEU30gW29wdGlvbnMuZGlyZWN0aW9uXSAtXG4gICAqICAgICBTcGVjaWZpZXMgaW4gd2hpY2ggZGlyZWN0aW9uIHRvIHNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgdGV4dCBub2RlIGlmXG4gICAqICAgICBgdGhpcy5vZmZzZXRgIGlzIGAwYCBhbmQgYHRoaXMuZWxlbWVudGAgaGFzIG5vIHRleHQuIElmIG5vdCBzcGVjaWZpZWRcbiAgICogICAgIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogQHJldHVybiB7eyBub2RlOiBUZXh0LCBvZmZzZXQ6IG51bWJlciB9fVxuICAgKiBAdGhyb3dzIHtSYW5nZUVycm9yfVxuICAgKi9cbiAgcmVzb2x2ZShvcHRpb25zID0ge30pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlc29sdmVPZmZzZXRzKHRoaXMuZWxlbWVudCwgdGhpcy5vZmZzZXQpWzBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMub2Zmc2V0ID09PSAwICYmIG9wdGlvbnMuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5nZXRSb290Tm9kZSgpLFxuICAgICAgICAgIE5vZGVGaWx0ZXIuU0hPV19URVhUXG4gICAgICAgICk7XG4gICAgICAgIHR3LmN1cnJlbnROb2RlID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBjb25zdCBmb3J3YXJkcyA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBSRVNPTFZFX0ZPUldBUkRTO1xuICAgICAgICBjb25zdCB0ZXh0ID0gLyoqIEB0eXBlIHtUZXh0fG51bGx9ICovIChcbiAgICAgICAgICBmb3J3YXJkcyA/IHR3Lm5leHROb2RlKCkgOiB0dy5wcmV2aW91c05vZGUoKVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbm9kZTogdGV4dCwgb2Zmc2V0OiBmb3J3YXJkcyA/IDAgOiB0ZXh0LmRhdGEubGVuZ3RoIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHRoYXQgcmVmZXJzIHRvIHRoZSBgb2Zmc2V0YHRoIGNoYXJhY3RlciB3aXRoaW5cbiAgICogYG5vZGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcmV0dXJuIHtUZXh0UG9zaXRpb259XG4gICAqL1xuICBzdGF0aWMgZnJvbUNoYXJPZmZzZXQobm9kZSwgb2Zmc2V0KSB7XG4gICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOlxuICAgICAgICByZXR1cm4gVGV4dFBvc2l0aW9uLmZyb21Qb2ludChub2RlLCBvZmZzZXQpO1xuICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpcbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIG9mZnNldCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vZGUgaXMgbm90IGFuIGVsZW1lbnQgb3IgdGV4dCBub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIGBUZXh0UG9zaXRpb25gIHJlcHJlc2VudGluZyB0aGUgcmFuZ2Ugc3RhcnQgb3IgZW5kIHBvaW50IChub2RlLCBvZmZzZXQpLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUZXh0IG9yIEVsZW1lbnQgbm9kZVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gT2Zmc2V0IHdpdGhpbiB0aGUgbm9kZS5cbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9ufVxuICAgKi9cbiAgc3RhdGljIGZyb21Qb2ludChub2RlLCBvZmZzZXQpIHtcbiAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RleHQgbm9kZSBvZmZzZXQgaXMgb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBub2RlIGhhcyBubyBwYXJlbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IHByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoKG5vZGUpICsgb2Zmc2V0O1xuXG4gICAgICAgIHJldHVybiBuZXcgVGV4dFBvc2l0aW9uKG5vZGUucGFyZW50RWxlbWVudCwgdGV4dE9mZnNldCk7XG4gICAgICB9XG4gICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIG5vZGUgb2Zmc2V0IGlzIG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHRoZSB0ZXh0IGxlbmd0aCBiZWZvcmUgdGhlIGBvZmZzZXRgdGggY2hpbGQgb2YgZWxlbWVudC5cbiAgICAgICAgbGV0IHRleHRPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICAgICAgdGV4dE9mZnNldCArPSBub2RlVGV4dExlbmd0aChub2RlLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb24oLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAobm9kZSksIHRleHRPZmZzZXQpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludCBpcyBub3QgaW4gYW4gZWxlbWVudCBvciB0ZXh0IG5vZGUnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVnaW9uIG9mIGEgZG9jdW1lbnQgYXMgYSAoc3RhcnQsIGVuZCkgcGFpciBvZiBgVGV4dFBvc2l0aW9uYCBwb2ludHMuXG4gKlxuICogUmVwcmVzZW50aW5nIGEgcmFuZ2UgaW4gdGhpcyB3YXkgYWxsb3dzIGZvciBjaGFuZ2VzIGluIHRoZSBET00gY29udGVudCBvZiB0aGVcbiAqIHJhbmdlIHdoaWNoIGRvbid0IGFmZmVjdCBpdHMgdGV4dCBjb250ZW50LCB3aXRob3V0IGFmZmVjdGluZyB0aGUgdGV4dCBjb250ZW50XG4gKiBvZiB0aGUgcmFuZ2UgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFJhbmdlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhbiBpbW11dGFibGUgYFRleHRSYW5nZWAgZnJvbSBhIGBzdGFydGAgYW5kIGBlbmRgIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1RleHRQb3NpdGlvbn0gc3RhcnRcbiAgICogQHBhcmFtIHtUZXh0UG9zaXRpb259IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9ucyByZWxhdGl2ZSB0byBhXG4gICAqIGdpdmVuIGFuY2VzdG9yLiBTZWUgYFRleHRQb3NpdGlvbi5yZWxhdGl2ZVRvYC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAqL1xuICByZWxhdGl2ZVRvKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShcbiAgICAgIHRoaXMuc3RhcnQucmVsYXRpdmVUbyhlbGVtZW50KSxcbiAgICAgIHRoaXMuZW5kLnJlbGF0aXZlVG8oZWxlbWVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGBUZXh0UmFuZ2VgIHRvIGEgRE9NIHJhbmdlLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIERPTSBSYW5nZSB3aWxsIGFsd2F5cyBzdGFydCBhbmQgZW5kIGluIGEgYFRleHRgIG5vZGUuXG4gICAqIEhlbmNlIGBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS50b1JhbmdlKClgIGNhbiBiZSB1c2VkIHRvIFwic2hyaW5rXCIgYVxuICAgKiByYW5nZSB0byB0aGUgdGV4dCBpdCBjb250YWlucy5cbiAgICpcbiAgICogTWF5IHRocm93IGlmIHRoZSBgc3RhcnRgIG9yIGBlbmRgIHBvc2l0aW9ucyBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYSByYW5nZS5cbiAgICpcbiAgICogQHJldHVybiB7UmFuZ2V9XG4gICAqL1xuICB0b1JhbmdlKCkge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGFydC5lbGVtZW50ID09PSB0aGlzLmVuZC5lbGVtZW50ICYmXG4gICAgICB0aGlzLnN0YXJ0Lm9mZnNldCA8PSB0aGlzLmVuZC5vZmZzZXRcbiAgICApIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3RhcnQgYW5kIGVuZCBwb2ludHMgaW4gc2FtZSBlbGVtZW50LlxuICAgICAgW3N0YXJ0LCBlbmRdID0gcmVzb2x2ZU9mZnNldHMoXG4gICAgICAgIHRoaXMuc3RhcnQuZWxlbWVudCxcbiAgICAgICAgdGhpcy5zdGFydC5vZmZzZXQsXG4gICAgICAgIHRoaXMuZW5kLm9mZnNldFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSB0aGlzLnN0YXJ0LnJlc29sdmUoeyBkaXJlY3Rpb246IFJFU09MVkVfRk9SV0FSRFMgfSk7XG4gICAgICBlbmQgPSB0aGlzLmVuZC5yZXNvbHZlKHsgZGlyZWN0aW9uOiBSRVNPTFZFX0JBQ0tXQVJEUyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgcmFuZ2Uuc2V0RW5kKGVuZC5ub2RlLCBlbmQub2Zmc2V0KTtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbiBleGlzdGluZyBET00gYFJhbmdlYCB0byBhIGBUZXh0UmFuZ2VgXG4gICAqXG4gICAqIEBwYXJhbSB7UmFuZ2V9IHJhbmdlXG4gICAqIEByZXR1cm4ge1RleHRSYW5nZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tUmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCBzdGFydCA9IFRleHRQb3NpdGlvbi5mcm9tUG9pbnQoXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgKTtcbiAgICBjb25zdCBlbmQgPSBUZXh0UG9zaXRpb24uZnJvbVBvaW50KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFRleHRSYW5nZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBgVGV4dFJhbmdlYCBmcm9tIHRoZSBgc3RhcnRgdGggdG8gYGVuZGB0aCBjaGFyYWN0ZXJzIGluIGByb290YC5cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gICAqL1xuICBzdGF0aWMgZnJvbU9mZnNldHMocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKFxuICAgICAgbmV3IFRleHRQb3NpdGlvbihyb290LCBzdGFydCksXG4gICAgICBuZXcgVGV4dFBvc2l0aW9uKHJvb3QsIGVuZClcbiAgICApO1xuICB9XG59XG4iLCIvKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgY2xhc3NlcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIERPTSBgUmFuZ2VgXG4gKiBvYmplY3RzIGFuZCBkaWZmZXJlbnQgdHlwZXMgb2Ygc2VsZWN0b3JzLiBJdCBpcyBtb3N0bHkgYSB0aGluIHdyYXBwZXIgYXJvdW5kIGFcbiAqIHNldCBvZiBhbmNob3JpbmcgbGlicmFyaWVzLiBJdCBzZXJ2ZXMgdHdvIG1haW4gcHVycG9zZXM6XG4gKlxuICogIDEuIFByb3ZpZGluZyBhIGNvbnNpc3RlbnQgaW50ZXJmYWNlIGFjcm9zcyBkaWZmZXJlbnQgdHlwZXMgb2YgYW5jaG9ycy5cbiAqICAyLiBJbnN1bGF0aW5nIHRoZSByZXN0IG9mIHRoZSBjb2RlIGZyb20gQVBJIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgYW5jaG9yaW5nXG4gKiAgICAgbGlicmFyaWVzLlxuICovXG5cbmltcG9ydCB7IG1hdGNoUXVvdGUgfSBmcm9tICcuL21hdGNoLXF1b3RlJztcbmltcG9ydCB7IFRleHRSYW5nZSwgVGV4dFBvc2l0aW9uIH0gZnJvbSAnLi90ZXh0LXJhbmdlJztcbmltcG9ydCB7IG5vZGVGcm9tWFBhdGgsIHhwYXRoRnJvbU5vZGUgfSBmcm9tICcuL3hwYXRoJztcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5SYW5nZVNlbGVjdG9yfSBSYW5nZVNlbGVjdG9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcGknKS5UZXh0UG9zaXRpb25TZWxlY3Rvcn0gVGV4dFBvc2l0aW9uU2VsZWN0b3JcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwaScpLlRleHRRdW90ZVNlbGVjdG9yfSBUZXh0UXVvdGVTZWxlY3RvclxuICovXG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZUFuY2hvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgLSBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihyb290LCByYW5nZSkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZX0gcmFuZ2UgLSAgQSByYW5nZSBkZXNjcmliaW5nIHRoZSBhbmNob3IuXG4gICAqL1xuICBzdGF0aWMgZnJvbVJhbmdlKHJvb3QsIHJhbmdlKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUFuY2hvcihyb290LCByYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFuY2hvciBmcm9tIGEgc2VyaWFsaXplZCBgUmFuZ2VTZWxlY3RvcmAgc2VsZWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdCAtICBBIHJvb3QgZWxlbWVudCBmcm9tIHdoaWNoIHRvIGFuY2hvci5cbiAgICogQHBhcmFtIHtSYW5nZVNlbGVjdG9yfSBzZWxlY3RvclxuICAgKi9cbiAgc3RhdGljIGZyb21TZWxlY3Rvcihyb290LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0gbm9kZUZyb21YUGF0aChzZWxlY3Rvci5zdGFydENvbnRhaW5lciwgcm9vdCk7XG4gICAgaWYgKCFzdGFydENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBzdGFydENvbnRhaW5lciBYUGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IG5vZGVGcm9tWFBhdGgoc2VsZWN0b3IuZW5kQ29udGFpbmVyLCByb290KTtcbiAgICBpZiAoIWVuZENvbnRhaW5lcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVzb2x2ZSBlbmRDb250YWluZXIgWFBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgICAgc2VsZWN0b3Iuc3RhcnRPZmZzZXRcbiAgICApO1xuICAgIGNvbnN0IGVuZFBvcyA9IFRleHRQb3NpdGlvbi5mcm9tQ2hhck9mZnNldChcbiAgICAgIGVuZENvbnRhaW5lcixcbiAgICAgIHNlbGVjdG9yLmVuZE9mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCByYW5nZSA9IG5ldyBUZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcykudG9SYW5nZSgpO1xuICAgIHJldHVybiBuZXcgUmFuZ2VBbmNob3Iocm9vdCwgcmFuZ2UpO1xuICB9XG5cbiAgdG9SYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtSYW5nZVNlbGVjdG9yfVxuICAgKi9cbiAgdG9TZWxlY3RvcigpIHtcbiAgICAvLyBcIlNocmlua1wiIHRoZSByYW5nZSBzbyB0aGF0IGl0IHRpZ2h0bHkgd3JhcHMgaXRzIHRleHQuIFRoaXMgZW5zdXJlcyBtb3JlXG4gICAgLy8gcHJlZGljdGFibGUgb3V0cHV0IGZvciBhIGdpdmVuIHRleHQgc2VsZWN0aW9uLlxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UodGhpcy5yYW5nZSkudG9SYW5nZSgpO1xuXG4gICAgY29uc3QgdGV4dFJhbmdlID0gVGV4dFJhbmdlLmZyb21SYW5nZShub3JtYWxpemVkUmFuZ2UpO1xuICAgIGNvbnN0IHN0YXJ0Q29udGFpbmVyID0geHBhdGhGcm9tTm9kZSh0ZXh0UmFuZ2Uuc3RhcnQuZWxlbWVudCwgdGhpcy5yb290KTtcbiAgICBjb25zdCBlbmRDb250YWluZXIgPSB4cGF0aEZyb21Ob2RlKHRleHRSYW5nZS5lbmQuZWxlbWVudCwgdGhpcy5yb290KTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUmFuZ2VTZWxlY3RvcicsXG4gICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgIHN0YXJ0T2Zmc2V0OiB0ZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0LFxuICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgZW5kT2Zmc2V0OiB0ZXh0UmFuZ2UuZW5kLm9mZnNldCxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYmV0d2VlbiBgVGV4dFBvc2l0aW9uU2VsZWN0b3JgIHNlbGVjdG9ycyBhbmQgYFJhbmdlYCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFBvc2l0aW9uQW5jaG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKi9cbiAgY29uc3RydWN0b3Iocm9vdCwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3IoXG4gICAgICByb290LFxuICAgICAgdGV4dFJhbmdlLnN0YXJ0Lm9mZnNldCxcbiAgICAgIHRleHRSYW5nZS5lbmQub2Zmc2V0XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0UG9zaXRpb25BbmNob3Iocm9vdCwgc2VsZWN0b3Iuc3RhcnQsIHNlbGVjdG9yLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFBvc2l0aW9uU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFBvc2l0aW9uU2VsZWN0b3InLFxuICAgICAgc3RhcnQ6IHRoaXMuc3RhcnQsXG4gICAgICBlbmQ6IHRoaXMuZW5kLFxuICAgIH07XG4gIH1cblxuICB0b1JhbmdlKCkge1xuICAgIHJldHVybiBUZXh0UmFuZ2UuZnJvbU9mZnNldHModGhpcy5yb290LCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCkudG9SYW5nZSgpO1xuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUXVvdGVNYXRjaE9wdGlvbnNcbiAqIEBwcm9wIHtudW1iZXJ9IFtoaW50XSAtIEV4cGVjdGVkIHBvc2l0aW9uIG9mIG1hdGNoIGluIHRleHQuIFNlZSBgbWF0Y2hRdW90ZWAuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBiZXR3ZWVuIGBUZXh0UXVvdGVTZWxlY3RvcmAgc2VsZWN0b3JzIGFuZCBgUmFuZ2VgIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXh0UXVvdGVBbmNob3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290IC0gQSByb290IGVsZW1lbnQgZnJvbSB3aGljaCB0byBhbmNob3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGFjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICAgKiAgIEBwYXJhbSB7c3RyaW5nfSBbY29udGV4dC5wcmVmaXhdXG4gICAqICAgQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0LnN1ZmZpeF1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHJvb3QsIGV4YWN0LCBjb250ZXh0ID0ge30pIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuZXhhY3QgPSBleGFjdDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBUZXh0UXVvdGVBbmNob3JgIGZyb20gYSByYW5nZS5cbiAgICpcbiAgICogV2lsbCB0aHJvdyBpZiBgcmFuZ2VgIGRvZXMgbm90IGNvbnRhaW4gYW55IHRleHQgbm9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gcm9vdFxuICAgKiBAcGFyYW0ge1JhbmdlfSByYW5nZVxuICAgKi9cbiAgc3RhdGljIGZyb21SYW5nZShyb290LCByYW5nZSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJvb3QudGV4dENvbnRlbnQpO1xuICAgIGNvbnN0IHRleHRSYW5nZSA9IFRleHRSYW5nZS5mcm9tUmFuZ2UocmFuZ2UpLnJlbGF0aXZlVG8ocm9vdCk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gICAgY29uc3QgZW5kID0gdGV4dFJhbmdlLmVuZC5vZmZzZXQ7XG5cbiAgICAvLyBOdW1iZXIgb2YgY2hhcmFjdGVycyBhcm91bmQgdGhlIHF1b3RlIHRvIGNhcHR1cmUgYXMgY29udGV4dC4gV2UgY3VycmVudGx5XG4gICAgLy8gYWx3YXlzIHVzZSBhIGZpeGVkIGFtb3VudCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGlzIGNvZGUgd2FzIGF3YXJlXG4gICAgLy8gb2YgbG9naWNhbCBib3VuZGFyaWVzIGluIHRoZSBkb2N1bWVudCAocGFyYWdyYXBoLCBhcnRpY2xlIGV0Yy4pIHRvIGF2b2lkXG4gICAgLy8gY2FwdHVyaW5nIHRleHQgdW5yZWxhdGVkIHRvIHRoZSBxdW90ZS5cbiAgICAvL1xuICAgIC8vIEluIHJlZ3VsYXIgcHJvc2UgdGhlIGlkZWFsIGNvbnRlbnQgd291bGQgb2Z0ZW4gYmUgdGhlIHN1cnJvdW5kaW5nIHNlbnRlbmNlLlxuICAgIC8vIFRoaXMgaXMgYSBuYXR1cmFsIHVuaXQgb2YgbWVhbmluZyB3aGljaCBlbmFibGVzIGRpc3BsYXlpbmcgcXVvdGVzIGluXG4gICAgLy8gY29udGV4dCBldmVuIHdoZW4gdGhlIGRvY3VtZW50IGlzIG5vdCBhdmFpbGFibGUuIFdlIGNvdWxkIHVzZSBgSW50bC5TZWdtZW50ZXJgXG4gICAgLy8gZm9yIHRoaXMgd2hlbiBhdmFpbGFibGUuXG4gICAgY29uc3QgY29udGV4dExlbiA9IDMyO1xuXG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5zbGljZShzdGFydCwgZW5kKSwge1xuICAgICAgcHJlZml4OiB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gY29udGV4dExlbiksIHN0YXJ0KSxcbiAgICAgIHN1ZmZpeDogdGV4dC5zbGljZShlbmQsIE1hdGgubWluKHRleHQubGVuZ3RoLCBlbmQgKyBjb250ZXh0TGVuKSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290XG4gICAqIEBwYXJhbSB7VGV4dFF1b3RlU2VsZWN0b3J9IHNlbGVjdG9yXG4gICAqL1xuICBzdGF0aWMgZnJvbVNlbGVjdG9yKHJvb3QsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgeyBwcmVmaXgsIHN1ZmZpeCB9ID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgc2VsZWN0b3IuZXhhY3QsIHsgcHJlZml4LCBzdWZmaXggfSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiB7VGV4dFF1b3RlU2VsZWN0b3J9XG4gICAqL1xuICB0b1NlbGVjdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnVGV4dFF1b3RlU2VsZWN0b3InLFxuICAgICAgZXhhY3Q6IHRoaXMuZXhhY3QsXG4gICAgICBwcmVmaXg6IHRoaXMuY29udGV4dC5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuY29udGV4dC5zdWZmaXgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1F1b3RlTWF0Y2hPcHRpb25zfSBbb3B0aW9uc11cbiAgICovXG4gIHRvUmFuZ2Uob3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMudG9Qb3NpdGlvbkFuY2hvcihvcHRpb25zKS50b1JhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtRdW90ZU1hdGNoT3B0aW9uc30gW29wdGlvbnNdXG4gICAqL1xuICB0b1Bvc2l0aW9uQW5jaG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHRleHQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRoaXMucm9vdC50ZXh0Q29udGVudCk7XG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaFF1b3RlKHRleHQsIHRoaXMuZXhhY3QsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCxcbiAgICAgIGhpbnQ6IG9wdGlvbnMuaGludCxcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1F1b3RlIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRleHRQb3NpdGlvbkFuY2hvcih0aGlzLnJvb3QsIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICB9XG59XG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIxIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBUZXh0UXVvdGVBbmNob3IgfSBmcm9tIFwiLi92ZW5kb3IvaHlwb3RoZXNpcy9hbmNob3JpbmcvdHlwZXNcIjtcblxuLy8gQ2F0Y2ggSlMgZXJyb3JzIHRvIGxvZyB0aGVtIGluIHRoZSBhcHAuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJlcnJvclwiLFxuICBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBBbmRyb2lkLmxvZ0Vycm9yKGV2ZW50Lm1lc3NhZ2UsIGV2ZW50LmZpbGVuYW1lLCBldmVudC5saW5lbm8pO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLy8gTm90aWZ5IG5hdGl2ZSBjb2RlIHRoYXQgdGhlIHBhZ2UgaGFzIGxvYWRlZC5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICBcImxvYWRcIixcbiAgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uY2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKTtcbiAgICAgIHNuYXBDdXJyZW50T2Zmc2V0KCk7XG4gICAgfSk7XG4gICAgb25WaWV3cG9ydFdpZHRoQ2hhbmdlZCgpO1xuICB9LFxuICBmYWxzZVxuKTtcblxuLyoqXG4gKiBIYXZpbmcgYW4gb2RkIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gZGlzcGxheWluZyB0d28gY29sdW1ucyBwZXIgc2NyZWVuIGNhdXNlcyBzbmFwcGluZyBhbmQgcGFnZVxuICogdHVybmluZyBpc3N1ZXMuIFRvIGZpeCB0aGlzLCB3ZSBpbnNlcnQgYSBibGFuayB2aXJ0dWFsIGNvbHVtbiBhdCB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kVmlydHVhbENvbHVtbklmTmVlZGVkKCkge1xuICBjb25zdCBpZCA9IFwicmVhZGl1bS12aXJ0dWFsLXBhZ2VcIjtcbiAgdmFyIHZpcnR1YWxDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkgfHwgZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSAhPSAyKSB7XG4gICAgaWYgKHZpcnR1YWxDb2wpIHtcbiAgICAgIHZpcnR1YWxDb2wucmVtb3ZlKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICB2YXIgY29sQ291bnQgPSBkb2N1bWVudFdpZHRoIC8gcGFnZVdpZHRoO1xuICAgIHZhciBoYXNPZGRDb2xDb3VudCA9IChNYXRoLnJvdW5kKGNvbENvdW50ICogMikgLyAyKSAlIDEgPiAwLjE7XG4gICAgaWYgKGhhc09kZENvbENvdW50KSB7XG4gICAgICBpZiAodmlydHVhbENvbCkge1xuICAgICAgICB2aXJ0dWFsQ29sLnJlbW92ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlydHVhbENvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZpcnR1YWxDb2wuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgICAgICB2aXJ0dWFsQ29sLnN0eWxlLmJyZWFrQmVmb3JlID0gXCJjb2x1bW5cIjtcbiAgICAgICAgdmlydHVhbENvbC5pbm5lckhUTUwgPSBcIiYjODIwMztcIjsgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpcnR1YWxDb2wpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdmFyIHBhZ2VXaWR0aCA9IDE7XG5cbmZ1bmN0aW9uIG9uVmlld3BvcnRXaWR0aENoYW5nZWQoKSB7XG4gIC8vIFdlIGNhbid0IHJlbHkgb24gd2luZG93LmlubmVyV2lkdGggZm9yIHRoZSBwYWdlV2lkdGggb24gQW5kcm9pZCwgYmVjYXVzZSBpZiB0aGVcbiAgLy8gZGV2aWNlIHBpeGVsIHJhdGlvIGlzIG5vdCBhbiBpbnRlZ2VyLCB3ZSBnZXQgcm91bmRpbmcgaXNzdWVzIG9mZnNldHRpbmcgdGhlIHBhZ2VzLlxuICAvL1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlYWRpdW0vcmVhZGl1bS1jc3MvaXNzdWVzLzk3XG4gIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcmVhZGl1bS9yMi1uYXZpZ2F0b3Ita290bGluL2lzc3Vlcy8xNDZcbiAgdmFyIHdpZHRoID0gQW5kcm9pZC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gIHBhZ2VXaWR0aCA9IHdpZHRoIC8gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIHNldFByb3BlcnR5KFxuICAgIFwiLS1SU19fdmlld3BvcnRXaWR0aFwiLFxuICAgIFwiY2FsYyhcIiArIHdpZHRoICsgXCJweCAvIFwiICsgd2luZG93LmRldmljZVBpeGVsUmF0aW8gKyBcIilcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4oKSB7XG4gIHJldHVybiBwYXJzZUludChcbiAgICB3aW5kb3dcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uLWNvdW50XCIpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbE1vZGVFbmFibGVkKCkge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoXCItLVVTRVJfX3Njcm9sbFwiKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCkgPT0gXCJyZWFkaXVtLXNjcm9sbC1vblwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JUTCgpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuZGlyLnRvTG93ZXJDYXNlKCkgPT0gXCJydGxcIjtcbn1cblxuLy8gU2Nyb2xsIHRvIHRoZSBnaXZlbiBUYWdJZCBpbiBkb2N1bWVudCBhbmQgc25hcC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0lkKGlkKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc2Nyb2xsVG9SZWN0KGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG4vLyBQb3NpdGlvbiBtdXN0IGJlIGluIHRoZSByYW5nZSBbMCAtIDFdLCAwLTEwMCUuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9Qb3NpdGlvbihwb3NpdGlvbikge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb1Bvc2l0aW9uIFwiICsgcG9zaXRpb24pO1xuICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID4gMSkge1xuICAgIHRocm93IFwic2Nyb2xsVG9Qb3NpdGlvbigpIG11c3QgYmUgZ2l2ZW4gYSBwb3NpdGlvbiBmcm9tIDAuMCB0byAgMS4wXCI7XG4gIH1cblxuICBsZXQgb2Zmc2V0O1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxIZWlnaHQgKiBwb3NpdGlvbjtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA9IG9mZnNldDtcbiAgICAvLyB3aW5kb3cuc2Nyb2xsVG8oMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gICAgb2Zmc2V0ID0gZG9jdW1lbnRXaWR0aCAqIHBvc2l0aW9uICogZmFjdG9yO1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgfVxufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiB0ZXh0IHNuaXBwZXQuXG4vL1xuLy8gVGhlIGV4cGVjdGVkIHRleHQgYXJndW1lbnQgaXMgYSBMb2NhdG9yIFRleHQgb2JqZWN0LCBhcyBkZWZpbmVkIGhlcmU6XG4vLyBodHRwczovL3JlYWRpdW0ub3JnL2FyY2hpdGVjdHVyZS9tb2RlbHMvbG9jYXRvcnMvXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9UZXh0KHRleHQpIHtcbiAgbGV0IHJhbmdlID0gcmFuZ2VGcm9tTG9jYXRvcih7IHRleHQgfSk7XG4gIGlmICghcmFuZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2Nyb2xsVG9SYW5nZShyYW5nZSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JhbmdlKHJhbmdlKSB7XG4gIHJldHVybiBzY3JvbGxUb1JlY3QocmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb1JlY3QocmVjdCkge1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChcbiAgICAgIHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9TdGFydCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9TdGFydFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRW5kKCkge1xuICAvLyAgICAgICAgQW5kcm9pZC5sb2coXCJzY3JvbGxUb0VuZFwiKTtcbiAgaWYgKCFpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICB2YXIgZmFjdG9yID0gaXNSVEwoKSA/IC0xIDogMTtcbiAgICBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQgPSBzbmFwT2Zmc2V0KFxuICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxXaWR0aCAqIGZhY3RvclxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPSBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDtcbiAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpO1xuICB9XG59XG5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2UgaXMgYWxyZWFkeSBhdCB0aGUgbGVmdC1tb3N0IHNjcm9sbCBvZmZzZXQuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggLSBwYWdlV2lkdGg7XG4gIHZhciBtaW5PZmZzZXQgPSBpc1JUTCgpID8gLShkb2N1bWVudFdpZHRoIC0gcGFnZVdpZHRoKSA6IDA7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1heChvZmZzZXQsIG1pbk9mZnNldCkpO1xufVxuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYWdlIGlzIGFscmVhZHkgYXQgdGhlIHJpZ2h0LW1vc3Qgc2Nyb2xsIG9mZnNldC5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxSaWdodCgpIHtcbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFdpZHRoO1xuICB2YXIgb2Zmc2V0ID0gd2luZG93LnNjcm9sbFggKyBwYWdlV2lkdGg7XG4gIHZhciBtYXhPZmZzZXQgPSBpc1JUTCgpID8gMCA6IGRvY3VtZW50V2lkdGggLSBwYWdlV2lkdGg7XG4gIHJldHVybiBzY3JvbGxUb09mZnNldChNYXRoLm1pbihvZmZzZXQsIG1heE9mZnNldCkpO1xufVxuXG4vLyBTY3JvbGxzIHRvIHRoZSBnaXZlbiBsZWZ0IG9mZnNldC5cbi8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHBhZ2Ugc2Nyb2xsIHBvc2l0aW9uIGlzIGFscmVhZHkgY2xvc2UgZW5vdWdoIHRvIHRoZSBnaXZlbiBvZmZzZXQuXG5mdW5jdGlvbiBzY3JvbGxUb09mZnNldChvZmZzZXQpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic2Nyb2xsVG9PZmZzZXQgXCIgKyBvZmZzZXQpO1xuICBpZiAoaXNTY3JvbGxNb2RlRW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgXCJDYWxsZWQgc2Nyb2xsVG9PZmZzZXQoKSB3aXRoIHNjcm9sbCBtb2RlIGVuYWJsZWQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBwYWdpbmF0ZWQgbW9kZS5cIjtcbiAgfVxuXG4gIHZhciBjdXJyZW50T2Zmc2V0ID0gd2luZG93LnNjcm9sbFg7XG4gIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA9IHNuYXBPZmZzZXQob2Zmc2V0KTtcbiAgLy8gSW4gc29tZSBjYXNlIHRoZSBzY3JvbGxYIGNhbm5vdCByZWFjaCB0aGUgcG9zaXRpb24gcmVzcGVjdGluZyB0byBpbm5lcldpZHRoXG4gIHZhciBkaWZmID0gTWF0aC5hYnMoY3VycmVudE9mZnNldCAtIG9mZnNldCkgLyBwYWdlV2lkdGg7XG4gIHJldHVybiBkaWZmID4gMC4wMTtcbn1cblxuLy8gU25hcCB0aGUgb2Zmc2V0IHRvIHRoZSBzY3JlZW4gd2lkdGggKHBhZ2Ugd2lkdGgpLlxuZnVuY3Rpb24gc25hcE9mZnNldChvZmZzZXQpIHtcbiAgdmFyIHZhbHVlID0gb2Zmc2V0ICsgKGlzUlRMKCkgPyAtMSA6IDEpO1xuICByZXR1cm4gdmFsdWUgLSAodmFsdWUgJSBwYWdlV2lkdGgpO1xufVxuXG4vLyBTbmFwcyB0aGUgY3VycmVudCBvZmZzZXQgdG8gdGhlIHBhZ2Ugd2lkdGguXG5mdW5jdGlvbiBzbmFwQ3VycmVudE9mZnNldCgpIHtcbiAgLy8gICAgICAgIEFuZHJvaWQubG9nKFwic25hcEN1cnJlbnRPZmZzZXRcIik7XG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1cnJlbnRPZmZzZXQgPSB3aW5kb3cuc2Nyb2xsWDtcbiAgLy8gQWRkcyBoYWxmIGEgcGFnZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgc25hcCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgdmFyIGZhY3RvciA9IGlzUlRMKCkgPyAtMSA6IDE7XG4gIHZhciBkZWx0YSA9IGZhY3RvciAqIChwYWdlV2lkdGggLyAyKTtcbiAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0ID0gc25hcE9mZnNldChjdXJyZW50T2Zmc2V0ICsgZGVsdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VGcm9tTG9jYXRvcihsb2NhdG9yKSB7XG4gIGxldCB0ZXh0ID0gbG9jYXRvci50ZXh0O1xuICBpZiAoIXRleHQgfHwgIXRleHQuaGlnaGxpZ2h0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgcm9vdDtcbiAgICBsZXQgbG9jYXRpb25zID0gbG9jYXRvci5sb2NhdGlvbnM7XG4gICAgaWYgKGxvY2F0aW9ucyAmJiBsb2NhdGlvbnMuY3NzU2VsZWN0b3IpIHtcbiAgICAgIHJvb3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxvY2F0aW9ucy5jc3NTZWxlY3Rvcik7XG4gICAgfVxuICAgIGlmICghcm9vdCkge1xuICAgICAgcm9vdCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgbGV0IGFuY2hvciA9IG5ldyBUZXh0UXVvdGVBbmNob3Iocm9vdCwgdGV4dC5oaWdobGlnaHQsIHtcbiAgICAgIHByZWZpeDogdGV4dC5iZWZvcmUsXG4gICAgICBzdWZmaXg6IHRleHQuYWZ0ZXIsXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuY2hvci50b1JhbmdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vLy8gVXNlciBTZXR0aW5ncy5cblxuLy8gRm9yIHNldHRpbmcgdXNlciBzZXR0aW5nLlxuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGtleSwgdmFsdWUpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbn1cblxuLy8gRm9yIHJlbW92aW5nIHVzZXIgc2V0dGluZy5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0eShrZXkpIHtcbiAgdmFyIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgcm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShrZXkpO1xufVxuXG4vLy8gVG9vbGtpdFxuXG5leHBvcnQgZnVuY3Rpb24gbG9nKCkge1xuICB2YXIgbWVzc2FnZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIiBcIik7XG4gIEFuZHJvaWQubG9nKG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nRXJyb3IobWVzc2FnZSkge1xuICBBbmRyb2lkLmxvZ0Vycm9yKG1lc3NhZ2UsIFwiXCIsIDApO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IGRlYnVnID0gZmFsc2U7XG5cbi8qKlxuICogQ29udmVydHMgYSBET01SZWN0IGludG8gYSBKU09OIG9iamVjdCB1bmRlcnN0YW5kYWJsZSBieSB0aGUgbmF0aXZlIHNpZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hdGl2ZVJlY3QocmVjdCkge1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IGhlaWdodCA9IHJlY3QuaGVpZ2h0ICogcGl4ZWxSYXRpbztcbiAgY29uc3QgbGVmdCA9IHJlY3QubGVmdCAqIHBpeGVsUmF0aW87XG4gIGNvbnN0IHRvcCA9IHJlY3QudG9wICogcGl4ZWxSYXRpbztcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGhlaWdodDtcbiAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChcbiAgcmFuZ2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBsZXQgY2xpZW50UmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICBuZXdSZWN0cy5zcGxpY2UoaiwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsLCBidXQga2VlcCBvdGhlcndpc2UgZW1wdHkhXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9nKGBDTElFTlQgUkVDVDogcmVkdWNlZCAke29yaWdpbmFsUmVjdHMubGVuZ3RofSAtLT4gJHtuZXdSZWN0cy5sZW5ndGh9YCk7XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gbWVyZ2VUb3VjaGluZ1JlY3RzKFxuICByZWN0cyxcbiAgdG9sZXJhbmNlLFxuICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwibWVyZ2VUb3VjaGluZ1JlY3RzIHJlY3QxID09PSByZWN0MiA/PyFcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjdHNMaW5lVXBWZXJ0aWNhbGx5ID1cbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEudG9wLCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSk7XG4gICAgICBjb25zdCByZWN0c0xpbmVVcEhvcml6b250YWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQsIHRvbGVyYW5jZSkgJiZcbiAgICAgICAgYWxtb3N0RXF1YWwocmVjdDEucmlnaHQsIHJlY3QyLnJpZ2h0LCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgaG9yaXpvbnRhbEFsbG93ZWQgPSAhZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cztcbiAgICAgIGNvbnN0IGFsaWduZWQgPVxuICAgICAgICAocmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgJiYgaG9yaXpvbnRhbEFsbG93ZWQpIHx8XG4gICAgICAgIChyZWN0c0xpbmVVcFZlcnRpY2FsbHkgJiYgIXJlY3RzTGluZVVwSG9yaXpvbnRhbGx5KTtcbiAgICAgIGNvbnN0IGNhbk1lcmdlID0gYWxpZ25lZCAmJiByZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKTtcbiAgICAgIGlmIChjYW5NZXJnZSkge1xuICAgICAgICBsb2coXG4gICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5ld1JlY3RzID0gcmVjdHMuZmlsdGVyKChyZWN0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY3QgIT09IHJlY3QxICYmIHJlY3QgIT09IHJlY3QyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnRDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdSZWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIG5ld1JlY3RzLnB1c2gocmVwbGFjZW1lbnRDbGllbnRSZWN0KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICAgICAgICBuZXdSZWN0cyxcbiAgICAgICAgICB0b2xlcmFuY2UsXG4gICAgICAgICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb250YWluZWRSZWN0cyhyZWN0cywgdG9sZXJhbmNlKSB7XG4gIGNvbnN0IHJlY3RzVG9LZWVwID0gbmV3IFNldChyZWN0cyk7XG4gIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgIGNvbnN0IGJpZ0Vub3VnaCA9IHJlY3Qud2lkdGggPiAxICYmIHJlY3QuaGVpZ2h0ID4gMTtcbiAgICBpZiAoIWJpZ0Vub3VnaCkge1xuICAgICAgbG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBsb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIEFycmF5LmZyb20ocmVjdHNUb0tlZXApO1xufVxuXG5mdW5jdGlvbiByZWN0Q29udGFpbnMocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi50b3AsIHRvbGVyYW5jZSkgJiZcbiAgICByZWN0Q29udGFpbnNQb2ludChyZWN0MSwgcmVjdDIubGVmdCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLnJpZ2h0LCByZWN0Mi5ib3R0b20sIHRvbGVyYW5jZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY3RDb250YWluc1BvaW50KHJlY3QsIHgsIHksIHRvbGVyYW5jZSkge1xuICByZXR1cm4gKFxuICAgIChyZWN0LmxlZnQgPCB4IHx8IGFsbW9zdEVxdWFsKHJlY3QubGVmdCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC5yaWdodCA+IHggfHwgYWxtb3N0RXF1YWwocmVjdC5yaWdodCwgeCwgdG9sZXJhbmNlKSkgJiZcbiAgICAocmVjdC50b3AgPCB5IHx8IGFsbW9zdEVxdWFsKHJlY3QudG9wLCB5LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LmJvdHRvbSA+IHkgfHwgYWxtb3N0RXF1YWwocmVjdC5ib3R0b20sIHksIHRvbGVyYW5jZSkpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VPdmVybGFwaW5nUmVjdHMocmVjdHMpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCByZWN0MSA9IHJlY3RzW2ldO1xuICAgICAgY29uc3QgcmVjdDIgPSByZWN0c1tqXTtcbiAgICAgIGlmIChyZWN0MSA9PT0gcmVjdDIpIHtcbiAgICAgICAgbG9nKFwicmVwbGFjZU92ZXJsYXBpbmdSZWN0cyByZWN0MSA9PT0gcmVjdDIgPz8hXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGNvbnN0IHN1YnRyYWN0UmVjdHMxID0gcmVjdFN1YnRyYWN0KHJlY3QxLCByZWN0Mik7XG4gICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3VidHJhY3RSZWN0czIgPSByZWN0U3VidHJhY3QocmVjdDIsIHJlY3QxKTtcbiAgICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoIDwgc3VidHJhY3RSZWN0czIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMxO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMjtcbiAgICAgICAgICAgIHRvUmVtb3ZlID0gcmVjdDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAsIGN1dCBvbmUgcmVjdCBpbnRvICR7dG9BZGQubGVuZ3RofWApO1xuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiByZWN0U3VidHJhY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IHJlY3RJbnRlcnNlY3RlZCA9IHJlY3RJbnRlcnNlY3QocmVjdDIsIHJlY3QxKTtcbiAgaWYgKHJlY3RJbnRlcnNlY3RlZC5oZWlnaHQgPT09IDAgfHwgcmVjdEludGVyc2VjdGVkLndpZHRoID09PSAwKSB7XG4gICAgcmV0dXJuIFtyZWN0MV07XG4gIH1cbiAgY29uc3QgcmVjdHMgPSBbXTtcbiAge1xuICAgIGNvbnN0IHJlY3RBID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0MS5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RBLndpZHRoID0gcmVjdEEucmlnaHQgLSByZWN0QS5sZWZ0O1xuICAgIHJlY3RBLmhlaWdodCA9IHJlY3RBLmJvdHRvbSAtIHJlY3RBLnRvcDtcbiAgICBpZiAocmVjdEEuaGVpZ2h0ICE9PSAwICYmIHJlY3RBLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RBKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RCID0ge1xuICAgICAgYm90dG9tOiByZWN0SW50ZXJzZWN0ZWQudG9wLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgbGVmdDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLnJpZ2h0LFxuICAgICAgdG9wOiByZWN0MS50b3AsXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RCLndpZHRoID0gcmVjdEIucmlnaHQgLSByZWN0Qi5sZWZ0O1xuICAgIHJlY3RCLmhlaWdodCA9IHJlY3RCLmJvdHRvbSAtIHJlY3RCLnRvcDtcbiAgICBpZiAocmVjdEIuaGVpZ2h0ICE9PSAwICYmIHJlY3RCLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RCKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3RDID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3RJbnRlcnNlY3RlZC5ib3R0b20sXG4gICAgICB3aWR0aDogMCxcbiAgICB9O1xuICAgIHJlY3RDLndpZHRoID0gcmVjdEMucmlnaHQgLSByZWN0Qy5sZWZ0O1xuICAgIHJlY3RDLmhlaWdodCA9IHJlY3RDLmJvdHRvbSAtIHJlY3RDLnRvcDtcbiAgICBpZiAocmVjdEMuaGVpZ2h0ICE9PSAwICYmIHJlY3RDLndpZHRoICE9PSAwKSB7XG4gICAgICByZWN0cy5wdXNoKHJlY3RDKTtcbiAgICB9XG4gIH1cbiAge1xuICAgIGNvbnN0IHJlY3REID0ge1xuICAgICAgYm90dG9tOiByZWN0MS5ib3R0b20sXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICByaWdodDogcmVjdDEucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEQud2lkdGggPSByZWN0RC5yaWdodCAtIHJlY3RELmxlZnQ7XG4gICAgcmVjdEQuaGVpZ2h0ID0gcmVjdEQuYm90dG9tIC0gcmVjdEQudG9wO1xuICAgIGlmIChyZWN0RC5oZWlnaHQgIT09IDAgJiYgcmVjdEQud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJlY3RJbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gIGNvbnN0IG1heExlZnQgPSBNYXRoLm1heChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0KTtcbiAgY29uc3QgbWluUmlnaHQgPSBNYXRoLm1pbihyZWN0MS5yaWdodCwgcmVjdDIucmlnaHQpO1xuICBjb25zdCBtYXhUb3AgPSBNYXRoLm1heChyZWN0MS50b3AsIHJlY3QyLnRvcCk7XG4gIGNvbnN0IG1pbkJvdHRvbSA9IE1hdGgubWluKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IG1pbkJvdHRvbSxcbiAgICBoZWlnaHQ6IE1hdGgubWF4KDAsIG1pbkJvdHRvbSAtIG1heFRvcCksXG4gICAgbGVmdDogbWF4TGVmdCxcbiAgICByaWdodDogbWluUmlnaHQsXG4gICAgdG9wOiBtYXhUb3AsXG4gICAgd2lkdGg6IE1hdGgubWF4KDAsIG1pblJpZ2h0IC0gbWF4TGVmdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiBhbG1vc3RFcXVhbChhLCBiLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8PSB0b2xlcmFuY2U7XG59XG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgaWYgKGRlYnVnKSB7XG4gICAgbG9nTmF0aXZlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIH1cbn1cbiIsIi8vXG4vLyAgQ29weXJpZ2h0IDIwMjEgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0Qtc3R5bGUgbGljZW5zZVxuLy8gIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbi8vXG5cbmltcG9ydCB7XG4gIGdldENsaWVudFJlY3RzTm9PdmVybGFwLFxuICByZWN0Q29udGFpbnNQb2ludCxcbiAgdG9OYXRpdmVSZWN0LFxufSBmcm9tIFwiLi9yZWN0XCI7XG5pbXBvcnQgeyBsb2csIGxvZ0Vycm9yLCByYW5nZUZyb21Mb2NhdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxubGV0IHN0eWxlcyA9IG5ldyBNYXAoKTtcbmxldCBncm91cHMgPSBuZXcgTWFwKCk7XG52YXIgbGFzdEdyb3VwSWQgPSAwO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGxpc3Qgb2YgYWRkaXRpb25hbCBzdXBwb3J0ZWQgRGVjb3JhdGlvbiBUZW1wbGF0ZXMuXG4gKlxuICogRWFjaCB0ZW1wbGF0ZSBvYmplY3QgaXMgaW5kZXhlZCBieSB0aGUgc3R5bGUgSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRlbXBsYXRlcyhuZXdTdHlsZXMpIHtcbiAgdmFyIHN0eWxlc2hlZXQgPSBcIlwiO1xuXG4gIGZvciAoY29uc3QgW2lkLCBzdHlsZV0gb2YgT2JqZWN0LmVudHJpZXMobmV3U3R5bGVzKSkge1xuICAgIHN0eWxlcy5zZXQoaWQsIHN0eWxlKTtcbiAgICBpZiAoc3R5bGUuc3R5bGVzaGVldCkge1xuICAgICAgc3R5bGVzaGVldCArPSBzdHlsZS5zdHlsZXNoZWV0ICsgXCJcXG5cIjtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVzaGVldCkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgc3R5bGVFbGVtZW50LmlubmVySFRNTCA9IHN0eWxlc2hlZXQ7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIERlY29yYXRpb25Hcm91cCBmb3IgdGhlIGdpdmVuIGdyb3VwIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0aW9ucyhncm91cE5hbWUpIHtcbiAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChncm91cE5hbWUpO1xuICBpZiAoIWdyb3VwKSB7XG4gICAgbGV0IGlkID0gXCJyMi1kZWNvcmF0aW9uLVwiICsgbGFzdEdyb3VwSWQrKztcbiAgICBncm91cCA9IERlY29yYXRpb25Hcm91cChpZCwgZ3JvdXBOYW1lKTtcbiAgICBncm91cHMuc2V0KGdyb3VwTmFtZSwgZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiBhIERlY29yYXRpb24uXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBkZWNvcmF0aW9uIG1hdGNoZWQgdGhpcyBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSB7XG4gIGlmIChncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRUYXJnZXQoKSB7XG4gICAgZm9yIChjb25zdCBbZ3JvdXAsIGdyb3VwQ29udGVudF0gb2YgZ3JvdXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBDb250ZW50Lml0ZW1zLnJldmVyc2UoKSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2xpY2thYmxlRWxlbWVudHMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgaXRlbS5jbGlja2FibGVFbGVtZW50cykge1xuICAgICAgICAgIGxldCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b0pTT04oKTtcbiAgICAgICAgICBpZiAocmVjdENvbnRhaW5zUG9pbnQocmVjdCwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGdyb3VwLCBpdGVtLCBlbGVtZW50LCByZWN0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHRhcmdldCA9IGZpbmRUYXJnZXQoKTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gQW5kcm9pZC5vbkRlY29yYXRpb25BY3RpdmF0ZWQoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgaWQ6IHRhcmdldC5pdGVtLmRlY29yYXRpb24uaWQsXG4gICAgICBncm91cDogdGFyZ2V0Lmdyb3VwLFxuICAgICAgcmVjdDogdG9OYXRpdmVSZWN0KHRhcmdldC5pdGVtLnJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxcbiAgICAgIGNsaWNrOiBjbGlja0V2ZW50LFxuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIERlY29yYXRpb25Hcm91cCBvYmplY3QgZnJvbSBhIHVuaXF1ZSBIVE1MIElEIGFuZCBpdHMgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIERlY29yYXRpb25Hcm91cChncm91cElkLCBncm91cE5hbWUpIHtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsYXN0SXRlbUlkID0gMDtcbiAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZGVjb3JhdGlvbiB0byB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiBhZGQoZGVjb3JhdGlvbikge1xuICAgIGxldCBpZCA9IGdyb3VwSWQgKyBcIi1cIiArIGxhc3RJdGVtSWQrKztcblxuICAgIGxldCByYW5nZSA9IHJhbmdlRnJvbUxvY2F0b3IoZGVjb3JhdGlvbi5sb2NhdG9yKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICBsb2coXCJDYW4ndCBsb2NhdGUgRE9NIHJhbmdlIGZvciBkZWNvcmF0aW9uXCIsIGRlY29yYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0geyBpZCwgZGVjb3JhdGlvbiwgcmFuZ2UgfTtcbiAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIGxheW91dChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBkZWNvcmF0aW9uIHdpdGggZ2l2ZW4gSUQgZnJvbSB0aGUgZ3JvdXAuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoZGVjb3JhdGlvbklkKSB7XG4gICAgbGV0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmRlY29yYXRpb24uaWQgPT09IGRlY29yYXRpb25JZCk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgIGl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IG51bGw7XG4gICAgaWYgKGl0ZW0uY29udGFpbmVyKSB7XG4gICAgICBpdGVtLmNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGl0ZW0uY29udGFpbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgdGhhdCB0aGUgZ2l2ZW4gZGVjb3JhdGlvbiB3YXMgbW9kaWZpZWQgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBmdW5jdGlvbiB1cGRhdGUoZGVjb3JhdGlvbikge1xuICAgIHJlbW92ZShkZWNvcmF0aW9uLmlkKTtcbiAgICBhZGQoZGVjb3JhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZGVjb3JhdGlvbnMgZnJvbSB0aGlzIGdyb3VwLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgY2xlYXJDb250YWluZXIoKTtcbiAgICBpdGVtcy5sZW5ndGggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgZGVjb3JhdGlvbiBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gYmUgY2FsbGVkIGFmdGVyIHJlZmxvd2luZyB0aGUgcmVzb3VyY2UsIGZvciBleGFtcGxlLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVxdWVzdExheW91dCgpIHtcbiAgICBjbGVhckNvbnRhaW5lcigpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGxheW91dChpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5b3V0cyBhIHNpbmdsZSBEZWNvcmF0aW9uIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBsYXlvdXQoaXRlbSkge1xuICAgIGxldCBncm91cENvbnRhaW5lciA9IHJlcXVpcmVDb250YWluZXIoKTtcblxuICAgIGxldCBzdHlsZSA9IHN0eWxlcy5nZXQoaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICBsb2dFcnJvcihgVW5rbm93biBkZWNvcmF0aW9uIHN0eWxlOiAke2l0ZW0uZGVjb3JhdGlvbi5zdHlsZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXRlbUNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgaXRlbUNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpdGVtLmlkKTtcbiAgICBpdGVtQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtc3R5bGVcIiwgaXRlbS5kZWNvcmF0aW9uLnN0eWxlKTtcbiAgICBpdGVtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuXG4gICAgbGV0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBsZXQgY29sdW1uQ291bnQgPSBwYXJzZUludChcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICBcImNvbHVtbi1jb3VudFwiXG4gICAgICApXG4gICAgKTtcbiAgICBsZXQgcGFnZVdpZHRoID0gdmlld3BvcnRXaWR0aCAvIChjb2x1bW5Db3VudCB8fCAxKTtcbiAgICBsZXQgc2Nyb2xsaW5nRWxlbWVudCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gICAgbGV0IHhPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgbGV0IHlPZmZzZXQgPSBzY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIGZ1bmN0aW9uIHBvc2l0aW9uRWxlbWVudChlbGVtZW50LCByZWN0LCBib3VuZGluZ1JlY3QpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cbiAgICAgIGlmIChzdHlsZS53aWR0aCA9PT0gXCJ3cmFwXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3JlY3Qud2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7cmVjdC5sZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnRXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBsZXQgbGVmdCA9IE1hdGguZmxvb3IocmVjdC5sZWZ0IC8gdmlld3BvcnRXaWR0aCkgKiB2aWV3cG9ydFdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH0gZWxzZSBpZiAoc3R5bGUud2lkdGggPT09IFwiYm91bmRzXCIpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke2JvdW5kaW5nUmVjdC53aWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7cmVjdC5oZWlnaHR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtib3VuZGluZ1JlY3QubGVmdCArIHhPZmZzZXR9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGAke3JlY3QudG9wICsgeU9mZnNldH1weGA7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlLndpZHRoID09PSBcInBhZ2VcIikge1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgIGxldCBsZWZ0ID0gTWF0aC5mbG9vcihyZWN0LmxlZnQgLyBwYWdlV2lkdGgpICogcGFnZVdpZHRoO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0ICsgeE9mZnNldH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgKyB5T2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgYm91bmRpbmdSZWN0ID0gaXRlbS5yYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGxldCBlbGVtZW50VGVtcGxhdGU7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGl0ZW0uZGVjb3JhdGlvbi5lbGVtZW50LnRyaW0oKTtcbiAgICAgIGVsZW1lbnRUZW1wbGF0ZSA9IHRlbXBsYXRlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKFxuICAgICAgICBgSW52YWxpZCBkZWNvcmF0aW9uIGVsZW1lbnQgXCIke2l0ZW0uZGVjb3JhdGlvbi5lbGVtZW50fVwiOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJveGVzXCIpIHtcbiAgICAgIGxldCBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzID0gdHJ1ZTtcbiAgICAgIGxldCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgICAgICBpdGVtLnJhbmdlLFxuICAgICAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICAgICApO1xuXG4gICAgICBjbGllbnRSZWN0cyA9IGNsaWVudFJlY3RzLnNvcnQoKHIxLCByMikgPT4ge1xuICAgICAgICBpZiAocjEudG9wIDwgcjIudG9wKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKHIxLnRvcCA+IHIyLnRvcCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZm9yIChsZXQgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgICAgICBjb25zdCBsaW5lID0gZWxlbWVudFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgbGluZS5zdHlsZS5zZXRQcm9wZXJ0eShcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcbiAgICAgICAgcG9zaXRpb25FbGVtZW50KGxpbmUsIGNsaWVudFJlY3QsIGJvdW5kaW5nUmVjdCk7XG4gICAgICAgIGl0ZW1Db250YWluZXIuYXBwZW5kKGxpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3R5bGUubGF5b3V0ID09PSBcImJvdW5kc1wiKSB7XG4gICAgICBjb25zdCBib3VuZHMgPSBlbGVtZW50VGVtcGxhdGUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgYm91bmRzLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgcG9zaXRpb25FbGVtZW50KGJvdW5kcywgYm91bmRpbmdSZWN0LCBib3VuZGluZ1JlY3QpO1xuXG4gICAgICBpdGVtQ29udGFpbmVyLmFwcGVuZChib3VuZHMpO1xuICAgIH1cblxuICAgIGdyb3VwQ29udGFpbmVyLmFwcGVuZChpdGVtQ29udGFpbmVyKTtcbiAgICBpdGVtLmNvbnRhaW5lciA9IGl0ZW1Db250YWluZXI7XG4gICAgaXRlbS5jbGlja2FibGVFbGVtZW50cyA9IEFycmF5LmZyb20oXG4gICAgICBpdGVtQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hY3RpdmFibGU9JzEnXVwiKVxuICAgICk7XG4gICAgaWYgKGl0ZW0uY2xpY2thYmxlRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpdGVtLmNsaWNrYWJsZUVsZW1lbnRzID0gQXJyYXkuZnJvbShpdGVtQ29udGFpbmVyLmNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgY29udGFpbmVyIGVsZW1lbnQsIGFmdGVyIG1ha2luZyBzdXJlIGl0IGV4aXN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVpcmVDb250YWluZXIoKSB7XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgZ3JvdXBJZCk7XG4gICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1ncm91cFwiLCBncm91cE5hbWUpO1xuICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBncm91cCBjb250YWluZXIuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lcigpIHtcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgICBjb250YWluZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFkZCwgcmVtb3ZlLCB1cGRhdGUsIGNsZWFyLCBpdGVtcywgcmVxdWVzdExheW91dCB9O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgXCJsb2FkXCIsXG4gIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXaWxsIHJlbGF5b3V0IGFsbCB0aGUgZGVjb3JhdGlvbnMgd2hlbiB0aGUgZG9jdW1lbnQgYm9keSBpcyByZXNpemVkLlxuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICAgIHZhciBsYXN0U2l6ZSA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbGFzdFNpemUud2lkdGggPT09IGJvZHkuY2xpZW50V2lkdGggJiZcbiAgICAgICAgbGFzdFNpemUuaGVpZ2h0ID09PSBib2R5LmNsaWVudEhlaWdodFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3RTaXplID0ge1xuICAgICAgICB3aWR0aDogYm9keS5jbGllbnRXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib2R5LmNsaWVudEhlaWdodCxcbiAgICAgIH07XG5cbiAgICAgIGdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChncm91cCkge1xuICAgICAgICBncm91cC5yZXF1ZXN0TGF5b3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGJvZHkpO1xuICB9LFxuICBmYWxzZVxuKTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2VcbiAqIGF2YWlsYWJsZSBpbiB0aGUgdG9wLWxldmVsIExJQ0VOU0UgZmlsZSBvZiB0aGUgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBoYW5kbGVEZWNvcmF0aW9uQ2xpY2tFdmVudCB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24gKCkge1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljaywgZmFsc2UpO1xuICBiaW5kRHJhZ0dlc3R1cmUoZG9jdW1lbnQpO1xufSk7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgaWYgKCF3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpIHtcbiAgICAvLyBUaGVyZSdzIGFuIG9uLWdvaW5nIHNlbGVjdGlvbiwgdGhlIHRhcCB3aWxsIGRpc21pc3MgaXQgc28gd2UgZG9uJ3QgZm9yd2FyZCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGl4ZWxSYXRpbyA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICBsZXQgY2xpY2tFdmVudCA9IHtcbiAgICBkZWZhdWx0UHJldmVudGVkOiBldmVudC5kZWZhdWx0UHJldmVudGVkLFxuICAgIHg6IGV2ZW50LmNsaWVudFggKiBwaXhlbFJhdGlvLFxuICAgIHk6IGV2ZW50LmNsaWVudFkgKiBwaXhlbFJhdGlvLFxuICAgIHRhcmdldEVsZW1lbnQ6IGV2ZW50LnRhcmdldC5vdXRlckhUTUwsXG4gICAgaW50ZXJhY3RpdmVFbGVtZW50OiBuZWFyZXN0SW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50LnRhcmdldCksXG4gIH07XG5cbiAgaWYgKGhhbmRsZURlY29yYXRpb25DbGlja0V2ZW50KGV2ZW50LCBjbGlja0V2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFNlbmQgdGhlIHRhcCBkYXRhIG92ZXIgdGhlIEpTIGJyaWRnZSBldmVuIGlmIGl0J3MgYmVlbiBoYW5kbGVkIHdpdGhpbiB0aGUgd2ViIHZpZXcsIHNvIHRoYXRcbiAgLy8gaXQgY2FuIGJlIHByZXNlcnZlZCBhbmQgdXNlZCBieSB0aGUgdG9vbGtpdCBpZiBuZWVkZWQuXG4gIHZhciBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25UYXAoSlNPTi5zdHJpbmdpZnkoY2xpY2tFdmVudCkpO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50RGVmYXVsdCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZERyYWdHZXN0dXJlKGVsZW1lbnQpIHtcbiAgLy8gcGFzc2l2ZTogZmFsc2UgaXMgbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gcHJldmVudCB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCBvblN0YXJ0LCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBvbkVuZCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIG9uTW92ZSwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcblxuICB2YXIgc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHZhciBpc1N0YXJ0aW5nRHJhZyA9IGZhbHNlO1xuICBjb25zdCBwaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW87XG5cbiAgZnVuY3Rpb24gb25TdGFydChldmVudCkge1xuICAgIGlzU3RhcnRpbmdEcmFnID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAqIHBpeGVsUmF0aW87XG4gICAgY29uc3Qgc3RhcnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZICogcGl4ZWxSYXRpbztcbiAgICBzdGF0ZSA9IHtcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQsXG4gICAgICBzdGFydFg6IHN0YXJ0WCxcbiAgICAgIHN0YXJ0WTogc3RhcnRZLFxuICAgICAgY3VycmVudFg6IHN0YXJ0WCxcbiAgICAgIGN1cnJlbnRZOiBzdGFydFksXG4gICAgICBvZmZzZXRYOiAwLFxuICAgICAgb2Zmc2V0WTogMCxcbiAgICAgIGludGVyYWN0aXZlRWxlbWVudDogbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChldmVudC50YXJnZXQpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBvbk1vdmUoZXZlbnQpIHtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG5cbiAgICBzdGF0ZS5jdXJyZW50WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAqIHBpeGVsUmF0aW87XG4gICAgc3RhdGUuY3VycmVudFkgPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFkgKiBwaXhlbFJhdGlvO1xuICAgIHN0YXRlLm9mZnNldFggPSBzdGF0ZS5jdXJyZW50WCAtIHN0YXRlLnN0YXJ0WDtcbiAgICBzdGF0ZS5vZmZzZXRZID0gc3RhdGUuY3VycmVudFkgLSBzdGF0ZS5zdGFydFk7XG5cbiAgICB2YXIgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAvLyBXYWl0IGZvciBhIG1vdmVtZW50IG9mIGF0IGxlYXN0IDYgcGl4ZWxzIGJlZm9yZSByZXBvcnRpbmcgYSBkcmFnLlxuICAgIGlmIChpc1N0YXJ0aW5nRHJhZykge1xuICAgICAgaWYgKE1hdGguYWJzKHN0YXRlLm9mZnNldFgpID49IDYgfHwgTWF0aC5hYnMoc3RhdGUub2Zmc2V0WSkgPj0gNikge1xuICAgICAgICBpc1N0YXJ0aW5nRHJhZyA9IGZhbHNlO1xuICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IEFuZHJvaWQub25EcmFnU3RhcnQoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBBbmRyb2lkLm9uRHJhZ01vdmUoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkVuZChldmVudCkge1xuICAgIGlmICghc3RhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IHNob3VsZFByZXZlbnREZWZhdWx0ID0gQW5kcm9pZC5vbkRyYWdFbmQoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgICBpZiAoc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgc3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLy8gU2VlLiBodHRwczovL2dpdGh1Yi5jb20vSmF5UGFub3ovYXJjaGl0ZWN0dXJlL3RyZWUvdG91Y2gtaGFuZGxpbmcvbWlzYy90b3VjaC1oYW5kbGluZ1xuZnVuY3Rpb24gbmVhcmVzdEludGVyYWN0aXZlRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBpbnRlcmFjdGl2ZVRhZ3MgPSBbXG4gICAgXCJhXCIsXG4gICAgXCJhdWRpb1wiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJjYW52YXNcIixcbiAgICBcImRldGFpbHNcIixcbiAgICBcImlucHV0XCIsXG4gICAgXCJsYWJlbFwiLFxuICAgIFwib3B0aW9uXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInN1Ym1pdFwiLFxuICAgIFwidGV4dGFyZWFcIixcbiAgICBcInZpZGVvXCIsXG4gIF07XG4gIGlmIChpbnRlcmFjdGl2ZVRhZ3MuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJIVE1MO1xuICB9XG5cbiAgLy8gQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZWRpdGFibGUgYnkgdGhlIHVzZXIuXG4gIGlmIChcbiAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSAmJlxuICAgIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpLnRvTG93ZXJDYXNlKCkgIT0gXCJmYWxzZVwiXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50Lm91dGVySFRNTDtcbiAgfVxuXG4gIC8vIENoZWNrcyBwYXJlbnRzIHJlY3Vyc2l2ZWx5IGJlY2F1c2UgdGhlIHRvdWNoIG1pZ2h0IGJlIGZvciBleGFtcGxlIG9uIGFuIDxlbT4gaW5zaWRlIGEgPGE+LlxuICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIG5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vXG4vLyAgaGlnaGxpZ2h0LmpzXG4vLyAgcjItbmF2aWdhdG9yLWtvdGxpblxuLy9cbi8vICBPcmdhbml6ZWQgYnkgVGFlaHl1biBLaW0gb24gNi8yNy8xOSBmcm9tIHIyLW5hdmlnYXRvci1qcy5cbi8vXG4vLyAgQ29weXJpZ2h0IDIwMTkgUmVhZGl1bSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ugd2hpY2ggaXMgZGV0YWlsZWRcbi8vICBpbiB0aGUgTElDRU5TRSBmaWxlIHByZXNlbnQgaW4gdGhlIHByb2plY3QgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIHNvdXJjZSBjb2RlIGlzIG1haW50YWluZWQuXG4vL1xuXG5jb25zdCBST09UX0NMQVNTX1JFRFVDRV9NT1RJT04gPSBcInIyLXJlZHVjZS1tb3Rpb25cIjtcbmNvbnN0IFJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTID0gXCJyMi1uby1wb3B1cC1mb29ub3Rlc1wiO1xuY29uc3QgUE9QVVBfRElBTE9HX0NMQVNTID0gXCJyMi1wb3B1cC1kaWFsb2dcIjtcbmNvbnN0IEZPT1ROT1RFU19DT05UQUlORVJfQ0xBU1MgPSBcInIyLWZvb3Rub3RlLWNvbnRhaW5lclwiO1xuY29uc3QgRk9PVE5PVEVTX0NMT1NFX0JVVFRPTl9DTEFTUyA9IFwicjItZm9vdG5vdGUtY2xvc2VcIjtcbmNvbnN0IEZPT1ROT1RFX0ZPUkNFX1NIT1cgPSBcInIyLWZvb3Rub3RlLWZvcmNlLXNob3dcIjtcbmNvbnN0IFRUU19JRF9QUkVWSU9VUyA9IFwicjItdHRzLXByZXZpb3VzXCI7XG5jb25zdCBUVFNfSURfTkVYVCA9IFwicjItdHRzLW5leHRcIjtcbmNvbnN0IFRUU19JRF9TTElERVIgPSBcInIyLXR0cy1zbGlkZXJcIjtcbmNvbnN0IFRUU19JRF9BQ1RJVkVfV09SRCA9IFwicjItdHRzLWFjdGl2ZS13b3JkXCI7XG5jb25zdCBUVFNfSURfQ09OVEFJTkVSID0gXCJyMi10dHMtdHh0XCI7XG5jb25zdCBUVFNfSURfSU5GTyA9IFwicjItdHRzLWluZm9cIjtcbmNvbnN0IFRUU19OQVZfQlVUVE9OX0NMQVNTID0gXCJyMi10dHMtYnV0dG9uXCI7XG5jb25zdCBUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQgPSBcInIyLXR0cy1zcGVha2luZy1lbFwiO1xuY29uc3QgVFRTX0NMQVNTX0lOSkVDVEVEX1NQQU4gPSBcInIyLXR0cy1zcGVha2luZy10eHRcIjtcbmNvbnN0IFRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOID0gXCJyMi10dHMtc3BlYWtpbmctd29yZFwiO1xuY29uc3QgVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCA9IFwicjItdHRzLXNwZWFraW5nLXR4dC1wYXJlbnRcIjtcbmNvbnN0IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSID0gXCJSMl9JRF9ISUdITElHSFRTX0NPTlRBSU5FUlwiO1xuY29uc3QgSURfQU5OT1RBVElPTl9DT05UQUlORVIgPSBcIlIyX0lEX0FOTk9UQVRJT05fQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSID0gXCJSMl9DTEFTU19ISUdITElHSFRfQ09OVEFJTkVSXCI7XG5jb25zdCBDTEFTU19BTk5PVEFUSU9OX0NPTlRBSU5FUiA9IFwiUjJfQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVJcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0FSRUFcIjtcbmNvbnN0IENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQVwiO1xuY29uc3QgQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBID0gXCJSMl9DTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUFcIjtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJID0gW1xuICBQT1BVUF9ESUFMT0dfQ0xBU1MsXG4gIFRUU19DTEFTU19JTkpFQ1RFRF9TUEFOLFxuICBUVFNfQ0xBU1NfSU5KRUNURURfU1VCU1BBTixcbiAgSURfSElHSExJR0hUU19DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9DT05UQUlORVIsXG4gIENMQVNTX0hJR0hMSUdIVF9BUkVBLFxuICBDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQSxcbiAgXCJyZXNpemUtc2Vuc29yXCIsXG5dO1xuY29uc3QgQ0xBU1NfUEFHSU5BVEVEID0gXCJyMi1jc3MtcGFnaW5hdGVkXCI7XG5cbi8vY29uc3QgSVNfREVWID0gKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2XCIpO1xuY29uc3QgSVNfREVWID0gZmFsc2U7XG5jb25zdCBfaGlnaGxpZ2h0cyA9IFtdO1xuXG5sZXQgX2hpZ2hsaWdodHNDb250YWluZXI7XG5sZXQgX2Fubm90YXRpb25Db250YWluZXI7XG5sZXQgbGFzdE1vdXNlRG93blggPSAtMTtcbmxldCBsYXN0TW91c2VEb3duWSA9IC0xO1xubGV0IGJvZHlFdmVudExpc3RlbmVyc1NldCA9IGZhbHNlO1xuXG5jb25zdCBVU0VfU1ZHID0gZmFsc2U7XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSA9IDAuMztcbmNvbnN0IEFMVF9CQUNLR1JPVU5EX0NPTE9SX09QQUNJVFkgPSAwLjQ1O1xuXG4vL2NvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFQlVHX1ZJU1VBTFMgPSBmYWxzZTtcbmNvbnN0IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9IHtcbiAgYmx1ZTogMTAwLFxuICBncmVlbjogNTAsXG4gIHJlZDogMjMwLFxufTtcblxuY29uc3QgQU5OT1RBVElPTl9XSURUSCA9IDE1O1xuXG5mdW5jdGlvbiByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUoX3dpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgaWYgKFxuICAgIGhpZ2hsaWdodEJvdW5kaW5nLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpID09IENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc3R5bGUub3V0bGluZSA9IFwibm9uZVwiO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICBcImJhY2tncm91bmQtY29sb3JcIixcbiAgICBcInRyYW5zcGFyZW50XCIsXG4gICAgXCJpbXBvcnRhbnRcIlxuICApO1xufVxuXG5mdW5jdGlvbiBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhcywgaGlnaGxpZ2h0KSB7XG4gIGNvbnN0IHVzZVNWRyA9ICFERUJVR19WSVNVQUxTICYmIFVTRV9TVkc7XG4gIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBoaWdobGlnaHRBcmVhcykge1xuICAgIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgICBjb25zdCBvcGFjaXR5ID0gQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgICBpZiAoaXNTVkcpIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbFwiLFxuICAgICAgICBgcmdiKCR7aGlnaGxpZ2h0LmNvbG9yLnJlZH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtoaWdobGlnaHQuY29sb3IuYmx1ZX0pYCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgIGAke29wYWNpdHl9YCxcbiAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwic3Ryb2tlXCIsXG4gICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICBcImltcG9ydGFudFwiXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiLFxuICAgICAgICBgJHtvcGFjaXR5fWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiLFxuICAgICAgICBgcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KWAsXG4gICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSkge1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGlzU1ZHID0gdXNlU1ZHICYmIGhpZ2hsaWdodEFyZWEubmFtZXNwYWNlVVJJID09PSBTVkdfWE1MX05BTUVTUEFDRTtcbiAgY29uc3QgaWQgPSBpc1NWR1xuICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZSAmJlxuICAgICAgaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICAgID8gaGlnaGxpZ2h0QXJlYS5wYXJlbnROb2RlLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgOiBoaWdobGlnaHRBcmVhLnBhcmVudE5vZGUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGVcbiAgICA/IGhpZ2hsaWdodEFyZWEucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaWQpIHtcbiAgICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoKSA9PiB7XG4gICAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gICAgfSk7XG4gICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZO1xuICAgICAgaWYgKGlzU1ZHKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJmaWxsXCIsXG4gICAgICAgICAgYHJnYigke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9KWAsXG4gICAgICAgICAgXCJpbXBvcnRhbnRcIlxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgIFwiZmlsbC1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgIGByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICBcInN0cm9rZS1vcGFjaXR5XCIsXG4gICAgICAgICAgYCR7b3BhY2l0eX1gLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgICAgICAgYHJnYmEoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSwgJHtvcGFjaXR5fSlgLFxuICAgICAgICAgIFwiaW1wb3J0YW50XCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NUb3VjaEV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBhZ2luYXRlZCA9IGlzUGFnaW5hdGVkKGRvY3VtZW50KTtcbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHhPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB5T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IGJvZHlSZWN0LnRvcDtcbiAgfVxuICBsZXQgZm91bmRIaWdobGlnaHQ7XG4gIGxldCBmb3VuZEVsZW1lbnQ7XG4gIGxldCBmb3VuZFJlY3Q7XG4gIC8vICAgIF9oaWdobGlnaHRzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAvLyAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYS5zZWxlY3Rpb25JbmZvKSlcbiAgLy8gICAgICAgIHJldHVybiBhLnNlbGVjdGlvbkluZm8uY2xlYW5UZXh0Lmxlbmd0aCA8IGIuc2VsZWN0aW9uSW5mby5jbGVhblRleHQubGVuZ3RoXG4gIC8vICAgIH0pXG4gIGZvciAobGV0IGkgPSBfaGlnaGxpZ2h0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzW2ldO1xuICAgIGxldCBoaWdobGlnaHRQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtoaWdobGlnaHQuaWR9YCk7XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGhpZ2hsaWdodFBhcmVudCA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2hpZ2hsaWdodC5pZH1gKTtcbiAgICB9XG4gICAgaWYgKCFoaWdobGlnaHRQYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGl0ID0gZmFsc2U7XG4gICAgY29uc3QgaGlnaGxpZ2h0RnJhZ21lbnRzID0gaGlnaGxpZ2h0UGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRGcmFnbWVudCBvZiBoaWdobGlnaHRGcmFnbWVudHMpIHtcbiAgICAgIGNvbnN0IHdpdGhSZWN0ID0gaGlnaGxpZ2h0RnJhZ21lbnQ7XG4gICAgICBjb25zdCBsZWZ0ID0gd2l0aFJlY3QucmVjdC5sZWZ0ICsgeE9mZnNldDtcbiAgICAgIGNvbnN0IHRvcCA9IHdpdGhSZWN0LnJlY3QudG9wICsgeU9mZnNldDtcbiAgICAgIGZvdW5kUmVjdCA9IHdpdGhSZWN0LnJlY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIHggPj0gbGVmdCAmJlxuICAgICAgICB4IDwgbGVmdCArIHdpdGhSZWN0LnJlY3Qud2lkdGggJiZcbiAgICAgICAgeSA+PSB0b3AgJiZcbiAgICAgICAgeSA8IHRvcCArIHdpdGhSZWN0LnJlY3QuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgaGl0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGZvdW5kSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgZm91bmRFbGVtZW50ID0gaGlnaGxpZ2h0UGFyZW50O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghZm91bmRIaWdobGlnaHQgfHwgIWZvdW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5ncyA9IF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICk7XG4gICAgZm9yIChjb25zdCBoaWdobGlnaHRCb3VuZGluZyBvZiBoaWdobGlnaHRCb3VuZGluZ3MpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICB9XG4gICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBBcnJheS5mcm9tKFxuICAgICAgX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YClcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNsaWNrXCIpKSB7XG4gICAgaWYgKGV2LnR5cGUgPT09IFwibW91c2Vtb3ZlXCIpIHtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0QXJlYXMgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0QXJlYSBvZiBhbGxIaWdobGlnaHRBcmVhcykge1xuICAgICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMuaW5kZXhPZihoaWdobGlnaHRBcmVhKSA8IDApIHtcbiAgICAgICAgICByZXNldEhpZ2hsaWdodEFyZWFTdHlsZSh3aW4sIGhpZ2hsaWdodEFyZWEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcywgZm91bmRIaWdobGlnaHQpO1xuICAgICAgY29uc3QgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgPSBmb3VuZEVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxIaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgLiR7Q0xBU1NfSElHSExJR0hUX0JPVU5ESU5HX0FSRUF9YFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcgfHxcbiAgICAgICAgICBoaWdobGlnaHRCb3VuZGluZyAhPT0gZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKHdpbiwgaGlnaGxpZ2h0Qm91bmRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcpIHtcbiAgICAgICAgaWYgKERFQlVHX1ZJU1VBTFMpIHtcbiAgICAgICAgICBzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlKFxuICAgICAgICAgICAgd2luLFxuICAgICAgICAgICAgZm91bmRFbGVtZW50SGlnaGxpZ2h0Qm91bmRpbmcsXG4gICAgICAgICAgICBmb3VuZEhpZ2hsaWdodFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2LnR5cGUgPT09IFwidG91Y2hzdGFydFwiIHx8IGV2LnR5cGUgPT09IFwidG91Y2hlbmRcIikge1xuICAgICAgY29uc3Qgc2l6ZSA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5vdXRlckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGhpZ2hsaWdodDogZm91bmRIaWdobGlnaHQuaWQsXG4gICAgICAgIHNpemU6IHNpemUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIHdpbmRvdy5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09IFwicmVuZGVyZXJcIlxuICAgICAgKSB7XG4gICAgICAgIGVsZWN0cm9uXzEuaXBjUmVuZGVyZXIuc2VuZFRvSG9zdChSMl9FVkVOVF9ISUdITElHSFRfQ0xJQ0ssIHBheWxvYWQpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cud2Via2l0VVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvdW5kSGlnaGxpZ2h0LmlkLmluY2x1ZGVzKFwiUjJfQU5OT1RBVElPTl9cIikpO1xuICAgICAgICBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfQU5OT1RBVElPTl9cIikgPj0gMCkge1xuICAgICAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgICAgICAgICBBbmRyb2lkLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QW5ub3RhdGlvbk1hcmtBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3VuZEhpZ2hsaWdodC5pZC5zZWFyY2goXCJSMl9ISUdITElHSFRfXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBY3RpdmF0ZWQoZm91bmRIaWdobGlnaHQuaWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgICAgICAgICAgd2Via2l0Lm1lc3NhZ2VIYW5kbGVycy5oaWdobGlnaHRBY3RpdmF0ZWQucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgIGZvdW5kSGlnaGxpZ2h0LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSB3aW4uZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgeCA9IGV2LmNsaWVudFg7XG4gIGNvbnN0IHkgPSBldi5jbGllbnRZO1xuICBpZiAoIV9oaWdobGlnaHRzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB4T2Zmc2V0O1xuICBsZXQgeU9mZnNldDtcbiAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gLXNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGJvZHlSZWN0LmxlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbFRvcCA6IGJvZHlSZWN0LnRvcDtcbiAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiAtc2Nyb2xsRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIGxldCBmb3VuZEhpZ2hsaWdodDtcbiAgbGV0IGZvdW5kRWxlbWVudDtcbiAgbGV0IGZvdW5kUmVjdDtcbiAgZm9yIChsZXQgaSA9IF9oaWdobGlnaHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHNbaV07XG4gICAgbGV0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke2hpZ2hsaWdodC5pZH1gKTtcbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgaGlnaGxpZ2h0UGFyZW50ID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvcihgIyR7aGlnaGxpZ2h0LmlkfWApO1xuICAgIH1cbiAgICBpZiAoIWhpZ2hsaWdodFBhcmVudCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoaXQgPSBmYWxzZTtcbiAgICBjb25zdCBoaWdobGlnaHRGcmFnbWVudHMgPSBoaWdobGlnaHRQYXJlbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEZyYWdtZW50IG9mIGhpZ2hsaWdodEZyYWdtZW50cykge1xuICAgICAgY29uc3Qgd2l0aFJlY3QgPSBoaWdobGlnaHRGcmFnbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aXRoUmVjdC5yZWN0LmxlZnQgKyB4T2Zmc2V0O1xuICAgICAgY29uc3QgdG9wID0gd2l0aFJlY3QucmVjdC50b3AgKyB5T2Zmc2V0O1xuICAgICAgZm91bmRSZWN0ID0gd2l0aFJlY3QucmVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgeCA+PSBsZWZ0ICYmXG4gICAgICAgIHggPCBsZWZ0ICsgd2l0aFJlY3QucmVjdC53aWR0aCAmJlxuICAgICAgICB5ID49IHRvcCAmJlxuICAgICAgICB5IDwgdG9wICsgd2l0aFJlY3QucmVjdC5oZWlnaHRcbiAgICAgICkge1xuICAgICAgICBoaXQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhpdCkge1xuICAgICAgZm91bmRIaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gICAgICBmb3VuZEVsZW1lbnQgPSBoaWdobGlnaHRQYXJlbnQ7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoIWZvdW5kSGlnaGxpZ2h0IHx8ICFmb3VuZEVsZW1lbnQpIHtcbiAgICBjb25zdCBoaWdobGlnaHRCb3VuZGluZ3MgPSBfaGlnaGxpZ2h0c0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICApO1xuICAgIGZvciAoY29uc3QgaGlnaGxpZ2h0Qm91bmRpbmcgb2YgaGlnaGxpZ2h0Qm91bmRpbmdzKSB7XG4gICAgICByZXNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUod2luLCBoaWdobGlnaHRCb3VuZGluZyk7XG4gICAgfVxuICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gQXJyYXkuZnJvbShcbiAgICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWApXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgIHJlc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgaGlnaGxpZ2h0QXJlYSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChmb3VuZEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jbGlja1wiKSkge1xuICAgIGlmIChldi50eXBlID09PSBcIm1vdXNlbW92ZVwiKSB7XG4gICAgICBjb25zdCBmb3VuZEVsZW1lbnRIaWdobGlnaHRBcmVhcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGZvdW5kRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtDTEFTU19ISUdITElHSFRfQVJFQX1gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbEhpZ2hsaWdodEFyZWFzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEFyZWEgb2YgYWxsSGlnaGxpZ2h0QXJlYXMpIHtcbiAgICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEFyZWFzLmluZGV4T2YoaGlnaGxpZ2h0QXJlYSkgPCAwKSB7XG4gICAgICAgICAgcmVzZXRIaWdobGlnaHRBcmVhU3R5bGUod2luLCBoaWdobGlnaHRBcmVhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0SGlnaGxpZ2h0QXJlYVN0eWxlKHdpbiwgZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMsIGZvdW5kSGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nID0gZm91bmRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAuJHtDTEFTU19ISUdITElHSFRfQk9VTkRJTkdfQVJFQX1gXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSGlnaGxpZ2h0Qm91bmRpbmdzID0gX2hpZ2hsaWdodHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYC4ke0NMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBfWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nIG9mIGFsbEhpZ2hsaWdodEJvdW5kaW5ncykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nIHx8XG4gICAgICAgICAgaGlnaGxpZ2h0Qm91bmRpbmcgIT09IGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nXG4gICAgICAgICkge1xuICAgICAgICAgIHJlc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZSh3aW4sIGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nKSB7XG4gICAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgICAgc2V0SGlnaGxpZ2h0Qm91bmRpbmdTdHlsZShcbiAgICAgICAgICAgIHdpbixcbiAgICAgICAgICAgIGZvdW5kRWxlbWVudEhpZ2hsaWdodEJvdW5kaW5nLFxuICAgICAgICAgICAgZm91bmRIaWdobGlnaHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldi50eXBlID09PSBcIm1vdXNldXBcIiB8fCBldi50eXBlID09PSBcInRvdWNoZW5kXCIpIHtcbiAgICAgIGNvbnN0IHRvdWNoZWRQb3NpdGlvbiA9IHtcbiAgICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgICAgbGVmdDogZm91bmRSZWN0LmxlZnQsXG4gICAgICAgIHdpZHRoOiBmb3VuZFJlY3Qud2lkdGgsXG4gICAgICAgIHRvcDogZm91bmRSZWN0LnRvcCxcbiAgICAgICAgaGVpZ2h0OiBmb3VuZFJlY3QuaGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaGlnaGxpZ2h0OiBmb3VuZEhpZ2hsaWdodCxcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZWRQb3NpdGlvbixcbiAgICAgIH07XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93LnByb2Nlc3MudHlwZSA9PT0gXCJyZW5kZXJlclwiXG4gICAgICApIHtcbiAgICAgICAgZWxlY3Ryb25fMS5pcGNSZW5kZXJlci5zZW5kVG9Ib3N0KFIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSywgcGF5bG9hZCk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy53ZWJraXRVUkwpIHtcbiAgICAgICAgaWYgKGZvdW5kSGlnaGxpZ2h0LmlkLnNlYXJjaChcIlIyX0FOTk9UQVRJT05fXCIpID49IDApIHtcbiAgICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgICAgICAgICAgQW5kcm9pZC5oaWdobGlnaHRBbm5vdGF0aW9uTWFya0FjdGl2YXRlZChmb3VuZEhpZ2hsaWdodC5pZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpKSB7XG4gICAgICAgICAgICB3ZWJraXQubWVzc2FnZUhhbmRsZXJzLmhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZm91bmRIaWdobGlnaHQuaWQuc2VhcmNoKFwiUjJfSElHSExJR0hUX1wiKSA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkpIHtcbiAgICAgICAgICAgIEFuZHJvaWQuaGlnaGxpZ2h0QWN0aXZhdGVkKGZvdW5kSGlnaGxpZ2h0LmlkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICAgICAgICAgIHdlYmtpdC5tZXNzYWdlSGFuZGxlcnMuaGlnaGxpZ2h0QWN0aXZhdGVkLnBvc3RNZXNzYWdlKFxuICAgICAgICAgICAgICBmb3VuZEhpZ2hsaWdodC5pZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3RzVG91Y2hPck92ZXJsYXAocmVjdDEsIHJlY3QyLCB0b2xlcmFuY2UpIHtcbiAgcmV0dXJuIChcbiAgICAocmVjdDEubGVmdCA8IHJlY3QyLnJpZ2h0IHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDEubGVmdCwgcmVjdDIucmlnaHQsIHRvbGVyYW5jZSkpKSAmJlxuICAgIChyZWN0Mi5sZWZ0IDwgcmVjdDEucmlnaHQgfHxcbiAgICAgICh0b2xlcmFuY2UgPj0gMCAmJiBhbG1vc3RFcXVhbChyZWN0Mi5sZWZ0LCByZWN0MS5yaWdodCwgdG9sZXJhbmNlKSkpICYmXG4gICAgKHJlY3QxLnRvcCA8IHJlY3QyLmJvdHRvbSB8fFxuICAgICAgKHRvbGVyYW5jZSA+PSAwICYmIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpKSkgJiZcbiAgICAocmVjdDIudG9wIDwgcmVjdDEuYm90dG9tIHx8XG4gICAgICAodG9sZXJhbmNlID49IDAgJiYgYWxtb3N0RXF1YWwocmVjdDIudG9wLCByZWN0MS5ib3R0b20sIHRvbGVyYW5jZSkpKVxuICApO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKHJlY3RzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgcmVjdDEgPSByZWN0c1tpXTtcbiAgICAgIGNvbnN0IHJlY3QyID0gcmVjdHNbal07XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlcGxhY2VPdmVybGFwaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0c1RvdWNoT3JPdmVybGFwKHJlY3QxLCByZWN0MiwgLTEpKSB7XG4gICAgICAgIGxldCB0b0FkZCA9IFtdO1xuICAgICAgICBsZXQgdG9SZW1vdmU7XG4gICAgICAgIGxldCB0b1ByZXNlcnZlO1xuICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMSA9IHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBpZiAoc3VidHJhY3RSZWN0czEubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdG9BZGQgPSBzdWJ0cmFjdFJlY3RzMTtcbiAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdWJ0cmFjdFJlY3RzMiA9IHJlY3RTdWJ0cmFjdChyZWN0MiwgcmVjdDEpO1xuICAgICAgICAgIGlmIChzdWJ0cmFjdFJlY3RzMS5sZW5ndGggPCBzdWJ0cmFjdFJlY3RzMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRvQWRkID0gc3VidHJhY3RSZWN0czE7XG4gICAgICAgICAgICB0b1JlbW92ZSA9IHJlY3QxO1xuICAgICAgICAgICAgdG9QcmVzZXJ2ZSA9IHJlY3QyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9IHN1YnRyYWN0UmVjdHMyO1xuICAgICAgICAgICAgdG9SZW1vdmUgPSByZWN0MjtcbiAgICAgICAgICAgIHRvUHJlc2VydmUgPSByZWN0MTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXTtcbiAgICAgICAgICB0b0NoZWNrLnB1c2godG9QcmVzZXJ2ZSk7XG4gICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodG9DaGVjaywgdG9BZGQpO1xuICAgICAgICAgIGNoZWNrT3ZlcmxhcHModG9DaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBvdmVybGFwLCBjdXQgb25lIHJlY3QgaW50byAke3RvQWRkLmxlbmd0aH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSB0b1JlbW92ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KG5ld1JlY3RzLCB0b0FkZCk7XG4gICAgICAgIHJldHVybiByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5ld1JlY3RzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJsYXBzKHJlY3RzKSB7XG4gIGNvbnN0IHN0aWxsT3ZlcmxhcGluZ1JlY3RzID0gW107XG4gIGZvciAoY29uc3QgcmVjdDEgb2YgcmVjdHMpIHtcbiAgICBmb3IgKGNvbnN0IHJlY3QyIG9mIHJlY3RzKSB7XG4gICAgICBpZiAocmVjdDEgPT09IHJlY3QyKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzMSA9IHN0aWxsT3ZlcmxhcGluZ1JlY3RzLmluZGV4T2YocmVjdDEpID49IDA7XG4gICAgICBjb25zdCBoYXMyID0gc3RpbGxPdmVybGFwaW5nUmVjdHMuaW5kZXhPZihyZWN0MikgPj0gMDtcbiAgICAgIGlmICghaGFzMSB8fCAhaGFzMikge1xuICAgICAgICBpZiAocmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIC0xKSkge1xuICAgICAgICAgIGlmICghaGFzMSkge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0MSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaGFzMikge1xuICAgICAgICAgICAgc3RpbGxPdmVybGFwaW5nUmVjdHMucHVzaChyZWN0Mik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IG92ZXJsYXAgLS0tXCIpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMxIFRPUDoke3JlY3QxLnRvcH0gQk9UVE9NOiR7cmVjdDEuYm90dG9tfSBMRUZUOiR7cmVjdDEubGVmdH0gUklHSFQ6JHtyZWN0MS5yaWdodH0gV0lEVEg6JHtyZWN0MS53aWR0aH0gSEVJR0hUOiR7cmVjdDEuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYCMyIFRPUDoke3JlY3QyLnRvcH0gQk9UVE9NOiR7cmVjdDIuYm90dG9tfSBMRUZUOiR7cmVjdDIubGVmdH0gUklHSFQ6JHtyZWN0Mi5yaWdodH0gV0lEVEg6JHtyZWN0Mi53aWR0aH0gSEVJR0hUOiR7cmVjdDIuaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHhPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBYKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHhPdmVybGFwOiAke3hPdmVybGFwfWApO1xuICAgICAgICAgIGNvbnN0IHlPdmVybGFwID0gZ2V0UmVjdE92ZXJsYXBZKHJlY3QxLCByZWN0Mik7XG4gICAgICAgICAgY29uc29sZS5sb2coYHlPdmVybGFwOiAke3lPdmVybGFwfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzdGlsbE92ZXJsYXBpbmdSZWN0cy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmxvZyhgQ0xJRU5UIFJFQ1Q6IG92ZXJsYXBzICR7c3RpbGxPdmVybGFwaW5nUmVjdHMubGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbnRhaW5lZFJlY3RzKHJlY3RzLCB0b2xlcmFuY2UpIHtcbiAgY29uc3QgcmVjdHNUb0tlZXAgPSBuZXcgU2V0KHJlY3RzKTtcbiAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7XG4gICAgY29uc3QgYmlnRW5vdWdoID0gcmVjdC53aWR0aCA+IDEgJiYgcmVjdC5oZWlnaHQgPiAxO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ0xJRU5UIFJFQ1Q6IHJlbW92ZSB0aW55XCIpO1xuICAgICAgfVxuICAgICAgcmVjdHNUb0tlZXAuZGVsZXRlKHJlY3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcG9zc2libHlDb250YWluaW5nUmVjdCBvZiByZWN0cykge1xuICAgICAgaWYgKHJlY3QgPT09IHBvc3NpYmx5Q29udGFpbmluZ1JlY3QpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzVG9LZWVwLmhhcyhwb3NzaWJseUNvbnRhaW5pbmdSZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0Q29udGFpbnMocG9zc2libHlDb250YWluaW5nUmVjdCwgcmVjdCwgdG9sZXJhbmNlKSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIGNvbnRhaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZWN0c1RvS2VlcC5kZWxldGUocmVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZWN0c1RvS2VlcCk7XG59XG5cbmZ1bmN0aW9uIGFsbW9zdEVxdWFsKGEsIGIsIHRvbGVyYW5jZSkge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHRvbGVyYW5jZTtcbn1cblxuZnVuY3Rpb24gcmVjdEludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbWF4TGVmdCA9IE1hdGgubWF4KHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCBtaW5SaWdodCA9IE1hdGgubWluKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IG1heFRvcCA9IE1hdGgubWF4KHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgbWluQm90dG9tID0gTWF0aC5taW4ocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICBjb25zdCByZWN0ID0ge1xuICAgIGJvdHRvbTogbWluQm90dG9tLFxuICAgIGhlaWdodDogTWF0aC5tYXgoMCwgbWluQm90dG9tIC0gbWF4VG9wKSxcbiAgICBsZWZ0OiBtYXhMZWZ0LFxuICAgIHJpZ2h0OiBtaW5SaWdodCxcbiAgICB0b3A6IG1heFRvcCxcbiAgICB3aWR0aDogTWF0aC5tYXgoMCwgbWluUmlnaHQgLSBtYXhMZWZ0KSxcbiAgfTtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIHJlY3RTdWJ0cmFjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgcmVjdEludGVyc2VjdGVkID0gcmVjdEludGVyc2VjdChyZWN0MiwgcmVjdDEpO1xuICBpZiAocmVjdEludGVyc2VjdGVkLmhlaWdodCA9PT0gMCB8fCByZWN0SW50ZXJzZWN0ZWQud2lkdGggPT09IDApIHtcbiAgICByZXR1cm4gW3JlY3QxXTtcbiAgfVxuICBjb25zdCByZWN0cyA9IFtdO1xuICB7XG4gICAgY29uc3QgcmVjdEEgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3QxLmxlZnQsXG4gICAgICByaWdodDogcmVjdEludGVyc2VjdGVkLmxlZnQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEEud2lkdGggPSByZWN0QS5yaWdodCAtIHJlY3RBLmxlZnQ7XG4gICAgcmVjdEEuaGVpZ2h0ID0gcmVjdEEuYm90dG9tIC0gcmVjdEEudG9wO1xuICAgIGlmIChyZWN0QS5oZWlnaHQgIT09IDAgJiYgcmVjdEEud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEEpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEIgPSB7XG4gICAgICBib3R0b206IHJlY3RJbnRlcnNlY3RlZC50b3AsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiByZWN0SW50ZXJzZWN0ZWQubGVmdCxcbiAgICAgIHJpZ2h0OiByZWN0SW50ZXJzZWN0ZWQucmlnaHQsXG4gICAgICB0b3A6IHJlY3QxLnRvcCxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEIud2lkdGggPSByZWN0Qi5yaWdodCAtIHJlY3RCLmxlZnQ7XG4gICAgcmVjdEIuaGVpZ2h0ID0gcmVjdEIuYm90dG9tIC0gcmVjdEIudG9wO1xuICAgIGlmIChyZWN0Qi5oZWlnaHQgIT09IDAgJiYgcmVjdEIud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEIpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEMgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5sZWZ0LFxuICAgICAgcmlnaHQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHRvcDogcmVjdEludGVyc2VjdGVkLmJvdHRvbSxcbiAgICAgIHdpZHRoOiAwLFxuICAgIH07XG4gICAgcmVjdEMud2lkdGggPSByZWN0Qy5yaWdodCAtIHJlY3RDLmxlZnQ7XG4gICAgcmVjdEMuaGVpZ2h0ID0gcmVjdEMuYm90dG9tIC0gcmVjdEMudG9wO1xuICAgIGlmIChyZWN0Qy5oZWlnaHQgIT09IDAgJiYgcmVjdEMud2lkdGggIT09IDApIHtcbiAgICAgIHJlY3RzLnB1c2gocmVjdEMpO1xuICAgIH1cbiAgfVxuICB7XG4gICAgY29uc3QgcmVjdEQgPSB7XG4gICAgICBib3R0b206IHJlY3QxLmJvdHRvbSxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IHJlY3RJbnRlcnNlY3RlZC5yaWdodCxcbiAgICAgIHJpZ2h0OiByZWN0MS5yaWdodCxcbiAgICAgIHRvcDogcmVjdDEudG9wLFxuICAgICAgd2lkdGg6IDAsXG4gICAgfTtcbiAgICByZWN0RC53aWR0aCA9IHJlY3RELnJpZ2h0IC0gcmVjdEQubGVmdDtcbiAgICByZWN0RC5oZWlnaHQgPSByZWN0RC5ib3R0b20gLSByZWN0RC50b3A7XG4gICAgaWYgKHJlY3RELmhlaWdodCAhPT0gMCAmJiByZWN0RC53aWR0aCAhPT0gMCkge1xuICAgICAgcmVjdHMucHVzaChyZWN0RCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZWN0cztcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zUG9pbnQocmVjdCwgeCwgeSwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgKHJlY3QubGVmdCA8IHggfHwgYWxtb3N0RXF1YWwocmVjdC5sZWZ0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnJpZ2h0ID4geCB8fCBhbG1vc3RFcXVhbChyZWN0LnJpZ2h0LCB4LCB0b2xlcmFuY2UpKSAmJlxuICAgIChyZWN0LnRvcCA8IHkgfHwgYWxtb3N0RXF1YWwocmVjdC50b3AsIHksIHRvbGVyYW5jZSkpICYmXG4gICAgKHJlY3QuYm90dG9tID4geSB8fCBhbG1vc3RFcXVhbChyZWN0LmJvdHRvbSwgeSwgdG9sZXJhbmNlKSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjdENvbnRhaW5zKHJlY3QxLCByZWN0MiwgdG9sZXJhbmNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLnRvcCwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgcmVjdENvbnRhaW5zUG9pbnQocmVjdDEsIHJlY3QyLmxlZnQsIHJlY3QyLmJvdHRvbSwgdG9sZXJhbmNlKSAmJlxuICAgIHJlY3RDb250YWluc1BvaW50KHJlY3QxLCByZWN0Mi5yaWdodCwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpIHtcbiAgY29uc3QgbGVmdCA9IE1hdGgubWluKHJlY3QxLmxlZnQsIHJlY3QyLmxlZnQpO1xuICBjb25zdCByaWdodCA9IE1hdGgubWF4KHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCk7XG4gIGNvbnN0IHRvcCA9IE1hdGgubWluKHJlY3QxLnRvcCwgcmVjdDIudG9wKTtcbiAgY29uc3QgYm90dG9tID0gTWF0aC5tYXgocmVjdDEuYm90dG9tLCByZWN0Mi5ib3R0b20pO1xuICByZXR1cm4ge1xuICAgIGJvdHRvbSxcbiAgICBoZWlnaHQ6IGJvdHRvbSAtIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIHRvcCxcbiAgICB3aWR0aDogcmlnaHQgLSBsZWZ0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gIHJlY3RzLFxuICB0b2xlcmFuY2UsXG4gIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IHJlY3QxID0gcmVjdHNbaV07XG4gICAgICBjb25zdCByZWN0MiA9IHJlY3RzW2pdO1xuICAgICAgaWYgKHJlY3QxID09PSByZWN0Mikge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJtZXJnZVRvdWNoaW5nUmVjdHMgcmVjdDEgPT09IHJlY3QyID8/IVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY3RzTGluZVVwVmVydGljYWxseSA9XG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnRvcCwgcmVjdDIudG9wLCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLmJvdHRvbSwgcmVjdDIuYm90dG9tLCB0b2xlcmFuY2UpO1xuICAgICAgY29uc3QgcmVjdHNMaW5lVXBIb3Jpem9udGFsbHkgPVxuICAgICAgICBhbG1vc3RFcXVhbChyZWN0MS5sZWZ0LCByZWN0Mi5sZWZ0LCB0b2xlcmFuY2UpICYmXG4gICAgICAgIGFsbW9zdEVxdWFsKHJlY3QxLnJpZ2h0LCByZWN0Mi5yaWdodCwgdG9sZXJhbmNlKTtcbiAgICAgIGNvbnN0IGhvcml6b250YWxBbGxvd2VkID0gIWRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHM7XG4gICAgICBjb25zdCBhbGlnbmVkID1cbiAgICAgICAgKHJlY3RzTGluZVVwSG9yaXpvbnRhbGx5ICYmIGhvcml6b250YWxBbGxvd2VkKSB8fFxuICAgICAgICAocmVjdHNMaW5lVXBWZXJ0aWNhbGx5ICYmICFyZWN0c0xpbmVVcEhvcml6b250YWxseSk7XG4gICAgICBjb25zdCBjYW5NZXJnZSA9IGFsaWduZWQgJiYgcmVjdHNUb3VjaE9yT3ZlcmxhcChyZWN0MSwgcmVjdDIsIHRvbGVyYW5jZSk7XG4gICAgICBpZiAoY2FuTWVyZ2UpIHtcbiAgICAgICAgaWYgKElTX0RFVikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYENMSUVOVCBSRUNUOiBtZXJnaW5nIHR3byBpbnRvIG9uZSwgVkVSVElDQUw6ICR7cmVjdHNMaW5lVXBWZXJ0aWNhbGx5fSBIT1JJWk9OVEFMOiAke3JlY3RzTGluZVVwSG9yaXpvbnRhbGx5fSAoJHtkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzfSlgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSZWN0cyA9IHJlY3RzLmZpbHRlcigocmVjdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZWN0ICE9PSByZWN0MSAmJiByZWN0ICE9PSByZWN0MjtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50Q2xpZW50UmVjdCA9IGdldEJvdW5kaW5nUmVjdChyZWN0MSwgcmVjdDIpO1xuICAgICAgICBuZXdSZWN0cy5wdXNoKHJlcGxhY2VtZW50Q2xpZW50UmVjdCk7XG4gICAgICAgIHJldHVybiBtZXJnZVRvdWNoaW5nUmVjdHMoXG4gICAgICAgICAgbmV3UmVjdHMsXG4gICAgICAgICAgdG9sZXJhbmNlLFxuICAgICAgICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RzO1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0c05vT3ZlcmxhcChyYW5nZSwgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cykge1xuICBjb25zdCByYW5nZUNsaWVudFJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgcmV0dXJuIGdldENsaWVudFJlY3RzTm9PdmVybGFwXyhcbiAgICByYW5nZUNsaWVudFJlY3RzLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXBfKFxuICBjbGllbnRSZWN0cyxcbiAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuKSB7XG4gIGNvbnN0IHRvbGVyYW5jZSA9IDE7XG4gIGNvbnN0IG9yaWdpbmFsUmVjdHMgPSBbXTtcbiAgZm9yIChjb25zdCByYW5nZUNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBvcmlnaW5hbFJlY3RzLnB1c2goe1xuICAgICAgYm90dG9tOiByYW5nZUNsaWVudFJlY3QuYm90dG9tLFxuICAgICAgaGVpZ2h0OiByYW5nZUNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgbGVmdDogcmFuZ2VDbGllbnRSZWN0LmxlZnQsXG4gICAgICByaWdodDogcmFuZ2VDbGllbnRSZWN0LnJpZ2h0LFxuICAgICAgdG9wOiByYW5nZUNsaWVudFJlY3QudG9wLFxuICAgICAgd2lkdGg6IHJhbmdlQ2xpZW50UmVjdC53aWR0aCxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXJnZWRSZWN0cyA9IG1lcmdlVG91Y2hpbmdSZWN0cyhcbiAgICBvcmlnaW5hbFJlY3RzLFxuICAgIHRvbGVyYW5jZSxcbiAgICBkb05vdE1lcmdlSG9yaXpvbnRhbGx5QWxpZ25lZFJlY3RzXG4gICk7XG4gIGNvbnN0IG5vQ29udGFpbmVkUmVjdHMgPSByZW1vdmVDb250YWluZWRSZWN0cyhtZXJnZWRSZWN0cywgdG9sZXJhbmNlKTtcbiAgY29uc3QgbmV3UmVjdHMgPSByZXBsYWNlT3ZlcmxhcGluZ1JlY3RzKG5vQ29udGFpbmVkUmVjdHMpO1xuICBjb25zdCBtaW5BcmVhID0gMiAqIDI7XG4gIGZvciAobGV0IGogPSBuZXdSZWN0cy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgIGNvbnN0IHJlY3QgPSBuZXdSZWN0c1tqXTtcbiAgICBjb25zdCBiaWdFbm91Z2ggPSByZWN0LndpZHRoICogcmVjdC5oZWlnaHQgPiBtaW5BcmVhO1xuICAgIGlmICghYmlnRW5vdWdoKSB7XG4gICAgICBpZiAobmV3UmVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAoSVNfREVWKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDTElFTlQgUkVDVDogcmVtb3ZlIHNtYWxsXCIpO1xuICAgICAgICB9XG4gICAgICAgIG5ld1JlY3RzLnNwbGljZShqLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChJU19ERVYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNMSUVOVCBSRUNUOiByZW1vdmUgc21hbGwsIGJ1dCBrZWVwIG90aGVyd2lzZSBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChJU19ERVYpIHtcbiAgICBjaGVja092ZXJsYXBzKG5ld1JlY3RzKTtcbiAgfVxuICBpZiAoSVNfREVWKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQ0xJRU5UIFJFQ1Q6IHJlZHVjZWQgJHtvcmlnaW5hbFJlY3RzLmxlbmd0aH0gLS0+ICR7bmV3UmVjdHMubGVuZ3RofWBcbiAgICApO1xuICB9XG4gIHJldHVybiBuZXdSZWN0cztcbn1cblxuZnVuY3Rpb24gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfUEFHSU5BVEVEKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KSB7XG4gIGlmIChkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbnRhaW5lcih3aW4sIGFubm90YXRpb25GbGFnKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGlmICghX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBpZiAoIWJvZHlFdmVudExpc3RlbmVyc1NldCkge1xuICAgICAgYm9keUV2ZW50TGlzdGVuZXJzU2V0ID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJtb3VzZWRvd25cIixcbiAgICAgICAgKGV2KSA9PiB7XG4gICAgICAgICAgbGFzdE1vdXNlRG93blggPSBldi5jbGllbnRYO1xuICAgICAgICAgIGxhc3RNb3VzZURvd25ZID0gZXYuY2xpZW50WTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2V1cFwiLFxuICAgICAgICAoZXYpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBNYXRoLmFicyhsYXN0TW91c2VEb3duWCAtIGV2LmNsaWVudFgpIDwgMyAmJlxuICAgICAgICAgICAgTWF0aC5hYnMobGFzdE1vdXNlRG93blkgLSBldi5jbGllbnRZKSA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFsc2VcbiAgICAgICk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFwibW91c2Vtb3ZlXCIsXG4gICAgICAgIChldikgPT4ge1xuICAgICAgICAgIHByb2Nlc3NNb3VzZUV2ZW50KHdpbiwgZXYpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcInRvdWNoZW5kXCIsXG4gICAgICAgIGZ1bmN0aW9uIHRvdWNoRW5kKGUpIHtcbiAgICAgICAgICBwcm9jZXNzVG91Y2hFdmVudCh3aW4sIGUpO1xuICAgICAgICB9LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gICAgX2hpZ2hsaWdodHNDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKTtcblxuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKF9oaWdobGlnaHRzQ29udGFpbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfaGlnaGxpZ2h0c0NvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gaGlkZUFsbGhpZ2hsaWdodHMoKSB7XG4gIGlmIChfaGlnaGxpZ2h0c0NvbnRhaW5lcikge1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyLnJlbW92ZSgpO1xuICAgIF9oaWdobGlnaHRzQ29udGFpbmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXN0cm95QWxsaGlnaGxpZ2h0cygpIHtcbiAgaGlkZUFsbGhpZ2hsaWdodHMoKTtcbiAgX2hpZ2hsaWdodHMuc3BsaWNlKDAsIF9oaWdobGlnaHRzLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95SGlnaGxpZ2h0KGlkKSB7XG4gIGxldCBpID0gLTE7XG4gIGxldCBfZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IF9oaWdobGlnaHRzLmZpbmQoKGgsIGopID0+IHtcbiAgICBpID0gajtcbiAgICByZXR1cm4gaC5pZCA9PT0gaWQ7XG4gIH0pO1xuICBpZiAoaGlnaGxpZ2h0ICYmIGkgPj0gMCAmJiBpIDwgX2hpZ2hsaWdodHMubGVuZ3RoKSB7XG4gICAgX2hpZ2hsaWdodHMuc3BsaWNlKGksIDEpO1xuICB9XG4gIGNvbnN0IGhpZ2hsaWdodENvbnRhaW5lciA9IF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gIGlmIChoaWdobGlnaHRDb250YWluZXIpIHtcbiAgICBoaWdobGlnaHRDb250YWluZXIucmVtb3ZlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDZmlUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KGVsZW1lbnQsIGNoaWxkKSB7XG4gIGxldCBmb3VuZCA9IC0xO1xuICBsZXQgdGV4dE5vZGVJbmRleCA9IC0xO1xuICBsZXQgcHJldmlvdXNXYXNFbGVtZW50ID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hpbGROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzW2ldO1xuICAgIGNvbnN0IGlzVGV4dCA9IGlzQ2ZpVGV4dE5vZGUoY2hpbGROb2RlKTtcbiAgICBpZiAoaXNUZXh0IHx8IHByZXZpb3VzV2FzRWxlbWVudCkge1xuICAgICAgdGV4dE5vZGVJbmRleCArPSAyO1xuICAgIH1cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAoY2hpbGROb2RlID09PSBjaGlsZCkge1xuICAgICAgICBmb3VuZCA9IHRleHROb2RlSW5kZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBwcmV2aW91c1dhc0VsZW1lbnQgPSBjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3JFbGVtZW50KG5vZGUxLCBub2RlMikge1xuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxID09PSBub2RlMikge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTEubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUxLmNvbnRhaW5zKG5vZGUyKSkge1xuICAgIHJldHVybiBub2RlMTtcbiAgfVxuICBpZiAobm9kZTIubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIG5vZGUyLmNvbnRhaW5zKG5vZGUxKSkge1xuICAgIHJldHVybiBub2RlMjtcbiAgfVxuICBjb25zdCBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIGxldCBwYXJlbnQgPSBub2RlMS5wYXJlbnROb2RlO1xuICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICBub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluLnB1c2gocGFyZW50KTtcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgfVxuICBjb25zdCBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluID0gW107XG4gIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7XG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIG5vZGUyRWxlbWVudEFuY2VzdG9yQ2hhaW4ucHVzaChwYXJlbnQpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICB9XG4gIGxldCBjb21tb25BbmNlc3RvciA9IG5vZGUxRWxlbWVudEFuY2VzdG9yQ2hhaW4uZmluZChcbiAgICAobm9kZTFFbGVtZW50QW5jZXN0b3IpID0+IHtcbiAgICAgIHJldHVybiBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmluZGV4T2Yobm9kZTFFbGVtZW50QW5jZXN0b3IpID49IDA7XG4gICAgfVxuICApO1xuICBpZiAoIWNvbW1vbkFuY2VzdG9yKSB7XG4gICAgY29tbW9uQW5jZXN0b3IgPSBub2RlMkVsZW1lbnRBbmNlc3RvckNoYWluLmZpbmQoKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA9PiB7XG4gICAgICByZXR1cm4gbm9kZTFFbGVtZW50QW5jZXN0b3JDaGFpbi5pbmRleE9mKG5vZGUyRWxlbWVudEFuY2VzdG9yKSA+PSAwO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21tb25BbmNlc3Rvcjtcbn1cblxuZnVuY3Rpb24gZnVsbFF1YWxpZmllZFNlbGVjdG9yKG5vZGUpIHtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgICAobm9kZS5sb2NhbE5hbWUgJiYgbm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTtcbiAgfVxuICAvL3JldHVybiBjc3NQYXRoKG5vZGUsIGp1c3RTZWxlY3Rvcik7XG4gIHJldHVybiBjc3NQYXRoKG5vZGUsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKSB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gQ09MTEFQU0VELlwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhd1RleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgY29uc3QgY2xlYW5UZXh0ID0gcmF3VGV4dC50cmltKCkucmVwbGFjZSgvXFxuL2csIFwiIFwiKS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbiAgaWYgKGNsZWFuVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gVEVYVCBFTVBUWS5cIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBjb25zb2xlLmxvZyhcIiQkJCQkJCQkJCQkJCQkJCQkIENBTk5PVCBHRVQgTk9OLUNPTExBUFNFRCBTRUxFQ1RJT04gUkFOR0U/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGNvbnZlcnRSYW5nZShyYW5nZSwgZnVsbFF1YWxpZmllZFNlbGVjdG9yLCBjb21wdXRlQ0ZJKTtcbiAgaWYgKCFyYW5nZUluZm8pIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBTRUxFQ1RJT04gUkFOR0UgSU5GTyBGQUlMPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChJU19ERVYgJiYgREVCVUdfVklTVUFMUykge1xuICAgIGNvbnN0IHJlc3RvcmVkUmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKHdpbi5kb2N1bWVudCwgcmFuZ2VJbmZvKTtcbiAgICBpZiAocmVzdG9yZWRSYW5nZSkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0T2Zmc2V0ID09PSByYW5nZS5zdGFydE9mZnNldCAmJlxuICAgICAgICByZXN0b3JlZFJhbmdlLmVuZE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0ICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgIHJlc3RvcmVkUmFuZ2UuZW5kQ29udGFpbmVyID09PSByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNFTEVDVElPTiBSQU5HRSBSRVNUT1JFRCBPS0FZIChkZXYgY2hlY2spLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNUSU9OIFJBTkdFIFJFU1RPUkUgRkFJTCAoZGV2IGNoZWNrKS5cIik7XG4gICAgICAgIGR1bXBEZWJ1ZyhcbiAgICAgICAgICBcIlNFTEVDVElPTlwiLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiT1JERVJFRCBSQU5HRSBGUk9NIFNFTEVDVElPTlwiLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgIHJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICByYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgICAgZHVtcERlYnVnKFxuICAgICAgICAgIFwiUkVTVE9SRUQgUkFOR0VcIixcbiAgICAgICAgICByZXN0b3JlZFJhbmdlLnN0YXJ0Q29udGFpbmVyLFxuICAgICAgICAgIHJlc3RvcmVkUmFuZ2Uuc3RhcnRPZmZzZXQsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgcmVzdG9yZWRSYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgZ2V0Q3NzU2VsZWN0b3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDQU5OT1QgUkVTVE9SRSBTRUxFQ1RJT04gUkFOR0UgPz8hXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb25zOiByYW5nZUluZm8yTG9jYXRpb24ocmFuZ2VJbmZvKSxcbiAgICB0ZXh0OiB7XG4gICAgICBoaWdobGlnaHQ6IHJhd1RleHQsXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCbGFja2xpc3RlZChlbCkge1xuICBsZXQgYmxhY2tsaXN0ZWRJZDtcbiAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgaWYgKGlkICYmIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJLmluZGV4T2YoaWQpID49IDApIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrQmxhY2tsaXN0ZWQgSUQ6IFwiICsgaWQpO1xuICAgIGJsYWNrbGlzdGVkSWQgPSBpZDtcbiAgfVxuICBsZXQgYmxhY2tsaXN0ZWRDbGFzcztcbiAgZm9yIChjb25zdCBpdGVtIG9mIF9ibGFja2xpc3RJZENsYXNzRm9yQ0ZJKSB7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpdGVtKSkge1xuICAgICAgY29uc29sZS5sb2coXCJjaGVja0JsYWNrbGlzdGVkIENMQVNTOiBcIiArIGl0ZW0pO1xuICAgICAgYmxhY2tsaXN0ZWRDbGFzcyA9IGl0ZW07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGJsYWNrbGlzdGVkSWQgfHwgYmxhY2tsaXN0ZWRDbGFzcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjc3NQYXRoKG5vZGUsIG9wdGltaXplZCkge1xuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBzID0gW107XG4gIGxldCBjb250ZXh0Tm9kZSA9IG5vZGU7XG4gIHdoaWxlIChjb250ZXh0Tm9kZSkge1xuICAgIGNvbnN0IHN0ZXAgPSBfY3NzUGF0aFN0ZXAoY29udGV4dE5vZGUsICEhb3B0aW1pemVkLCBjb250ZXh0Tm9kZSA9PT0gbm9kZSk7XG4gICAgaWYgKCFzdGVwKSB7XG4gICAgICBicmVhazsgLy8gRXJyb3IgLSBiYWlsIG91dCBlYXJseS5cbiAgICB9XG4gICAgc3RlcHMucHVzaChzdGVwLnZhbHVlKTtcbiAgICBpZiAoc3RlcC5vcHRpbWl6ZWQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb250ZXh0Tm9kZSA9IGNvbnRleHROb2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgc3RlcHMucmV2ZXJzZSgpO1xuICByZXR1cm4gc3RlcHMuam9pbihcIiA+IFwiKTtcbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbi8vIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9ibGluay8rL21hc3Rlci9Tb3VyY2UvZGV2dG9vbHMvZnJvbnRfZW5kL2NvbXBvbmVudHMvRE9NUHJlc2VudGF0aW9uVXRpbHMuanMjMzE2XG5mdW5jdGlvbiBfY3NzUGF0aFN0ZXAobm9kZSwgb3B0aW1pemVkLCBpc1RhcmdldE5vZGUpIHtcbiAgZnVuY3Rpb24gcHJlZml4ZWRFbGVtZW50Q2xhc3NOYW1lcyhuZCkge1xuICAgIGNvbnN0IGNsYXNzQXR0cmlidXRlID0gbmQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgaWYgKCFjbGFzc0F0dHJpYnV0ZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc0F0dHJpYnV0ZVxuICAgICAgLnNwbGl0KC9cXHMrL2cpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKChubSkgPT4ge1xuICAgICAgICAvLyBUaGUgcHJlZml4IGlzIHJlcXVpcmVkIHRvIHN0b3JlIFwiX19wcm90b19fXCIgaW4gYSBvYmplY3QtYmFzZWQgbWFwLlxuICAgICAgICByZXR1cm4gXCIkXCIgKyBubTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRTZWxlY3RvcihpZGQpIHtcbiAgICByZXR1cm4gXCIjXCIgKyBlc2NhcGVJZGVudGlmaWVySWZOZWVkZWQoaWRkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChpZGVudCkge1xuICAgIGlmIChpc0NTU0lkZW50aWZpZXIoaWRlbnQpKSB7XG4gICAgICByZXR1cm4gaWRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkRXNjYXBlRmlyc3QgPSAvXig/OlswLTldfC1bMC05LV0/KS8udGVzdChpZGVudCk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaWRlbnQubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gaWRlbnQucmVwbGFjZSgvLi9nLCBmdW5jdGlvbiAoYywgaWkpIHtcbiAgICAgIHJldHVybiAoc2hvdWxkRXNjYXBlRmlyc3QgJiYgaWkgPT09IDApIHx8ICFpc0NTU0lkZW50Q2hhcihjKVxuICAgICAgICA/IGVzY2FwZUFzY2lpQ2hhcihjLCBpaSA9PT0gbGFzdEluZGV4KVxuICAgICAgICA6IGM7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVBc2NpaUNoYXIoYywgaXNMYXN0KSB7XG4gICAgcmV0dXJuIFwiXFxcXFwiICsgdG9IZXhCeXRlKGMpICsgKGlzTGFzdCA/IFwiXCIgOiBcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b0hleEJ5dGUoYykge1xuICAgIGxldCBoZXhCeXRlID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgICBpZiAoaGV4Qnl0ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGhleEJ5dGUgPSBcIjBcIiArIGhleEJ5dGU7XG4gICAgfVxuICAgIHJldHVybiBoZXhCeXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNDU1NJZGVudENoYXIoYykge1xuICAgIGlmICgvW2EtekEtWjAtOV8tXS8udGVzdChjKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBjLmNoYXJDb2RlQXQoMCkgPj0gMHhhMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ1NTSWRlbnRpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiAvXi0/W2EtekEtWl9dW2EtekEtWjAtOV8tXSokLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9XG4gICAgKG5vZGUubG9jYWxOYW1lICYmIG5vZGUubG9jYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGVsZW1lbnQgPSBub2RlO1xuXG4gIGNvbnN0IGlkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtcblxuICBpZiAob3B0aW1pemVkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpbWl6ZWQ6IHRydWUsXG4gICAgICAgIHZhbHVlOiBpZFNlbGVjdG9yKGlkKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGxvd2VyQ2FzZU5hbWUgPT09IFwiYm9keVwiIHx8XG4gICAgICBsb3dlckNhc2VOYW1lID09PSBcImhlYWRcIiB8fFxuICAgICAgbG93ZXJDYXNlTmFtZSA9PT0gXCJodG1sXCJcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGxvd2VyQ2FzZU5hbWUsIC8vIG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vZGVOYW1lID0gbG93ZXJDYXNlTmFtZTsgLy8gbm9kZS5ub2RlTmFtZUluQ29ycmVjdENhc2UoKTtcbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wdGltaXplZDogdHJ1ZSxcbiAgICAgIHZhbHVlOiBub2RlTmFtZSArIGlkU2VsZWN0b3IoaWQpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW1pemVkOiB0cnVlLFxuICAgICAgdmFsdWU6IG5vZGVOYW1lLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKGVsZW1lbnQpO1xuXG4gIGNvbnN0IHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5ID0gW107IC8vIC5rZXlTZXQoKVxuICBwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgIGlmIChwcmVmaXhlZE93bkNsYXNzTmFtZXNBcnJheS5pbmRleE9mKGFyckl0ZW0pIDwgMCkge1xuICAgICAgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkucHVzaChhcnJJdGVtKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxldCBuZWVkc0NsYXNzTmFtZXMgPSBmYWxzZTtcbiAgbGV0IG5lZWRzTnRoQ2hpbGQgPSBmYWxzZTtcbiAgbGV0IG93bkluZGV4ID0gLTE7XG4gIGxldCBlbGVtZW50SW5kZXggPSAtMTtcbiAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQuY2hpbGRyZW47XG5cbiAgZm9yIChcbiAgICBsZXQgaSA9IDA7XG4gICAgKG93bkluZGV4ID09PSAtMSB8fCAhbmVlZHNOdGhDaGlsZCkgJiYgaSA8IHNpYmxpbmdzLmxlbmd0aDtcbiAgICArK2lcbiAgKSB7XG4gICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldO1xuICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVsZW1lbnRJbmRleCArPSAxO1xuICAgIGlmIChzaWJsaW5nID09PSBub2RlKSB7XG4gICAgICBvd25JbmRleCA9IGVsZW1lbnRJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmVlZHNOdGhDaGlsZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc2libGluZy5ub2RlTmFtZUluQ29ycmVjdENhc2UoKVxuICAgIGNvbnN0IHNpYmxpbmdOYW1lID1cbiAgICAgIChzaWJsaW5nLmxvY2FsTmFtZSAmJiBzaWJsaW5nLmxvY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgc2libGluZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChzaWJsaW5nTmFtZSAhPT0gbm9kZU5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBuZWVkc0NsYXNzTmFtZXMgPSB0cnVlO1xuXG4gICAgY29uc3Qgb3duQ2xhc3NOYW1lcyA9IFtdO1xuICAgIHByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5LmZvckVhY2goKGFyckl0ZW0pID0+IHtcbiAgICAgIG93bkNsYXNzTmFtZXMucHVzaChhcnJJdGVtKTtcbiAgICB9KTtcbiAgICBsZXQgb3duQ2xhc3NOYW1lQ291bnQgPSBvd25DbGFzc05hbWVzLmxlbmd0aDtcblxuICAgIGlmIChvd25DbGFzc05hbWVDb3VudCA9PT0gMCkge1xuICAgICAgbmVlZHNOdGhDaGlsZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3Qgc2libGluZ0NsYXNzTmFtZXNBcnJheV8gPSBwcmVmaXhlZEVsZW1lbnRDbGFzc05hbWVzKHNpYmxpbmcpO1xuICAgIGNvbnN0IHNpYmxpbmdDbGFzc05hbWVzQXJyYXkgPSBbXTsgLy8gLmtleVNldCgpXG4gICAgc2libGluZ0NsYXNzTmFtZXNBcnJheV8uZm9yRWFjaCgoYXJySXRlbSkgPT4ge1xuICAgICAgaWYgKHNpYmxpbmdDbGFzc05hbWVzQXJyYXkuaW5kZXhPZihhcnJJdGVtKSA8IDApIHtcbiAgICAgICAgc2libGluZ0NsYXNzTmFtZXNBcnJheS5wdXNoKGFyckl0ZW0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBzaWJsaW5nQ2xhc3Mgb2Ygc2libGluZ0NsYXNzTmFtZXNBcnJheSkge1xuICAgICAgY29uc3QgaW5kID0gb3duQ2xhc3NOYW1lcy5pbmRleE9mKHNpYmxpbmdDbGFzcyk7XG4gICAgICBpZiAoaW5kIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgb3duQ2xhc3NOYW1lcy5zcGxpY2UoaW5kLCAxKTsgLy8gZGVsZXRlIG93bkNsYXNzTmFtZXNbc2libGluZ0NsYXNzXTtcblxuICAgICAgaWYgKCEtLW93bkNsYXNzTmFtZUNvdW50KSB7XG4gICAgICAgIG5lZWRzTnRoQ2hpbGQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gbm9kZU5hbWU7XG4gIGlmIChcbiAgICBpc1RhcmdldE5vZGUgJiZcbiAgICBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmXG4gICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICYmXG4gICAgIWVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiaWRcIikgJiZcbiAgICAhZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICApIHtcbiAgICByZXN1bHQgKz0gJ1t0eXBlPVwiJyArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSArICdcIl0nO1xuICB9XG4gIGlmIChuZWVkc050aENoaWxkKSB7XG4gICAgcmVzdWx0ICs9IFwiOm50aC1jaGlsZChcIiArIChvd25JbmRleCArIDEpICsgXCIpXCI7XG4gIH0gZWxzZSBpZiAobmVlZHNDbGFzc05hbWVzKSB7XG4gICAgZm9yIChjb25zdCBwcmVmaXhlZE5hbWUgb2YgcHJlZml4ZWRPd25DbGFzc05hbWVzQXJyYXkpIHtcbiAgICAgIHJlc3VsdCArPSBcIi5cIiArIGVzY2FwZUlkZW50aWZpZXJJZk5lZWRlZChwcmVmaXhlZE5hbWUuc3Vic3RyKDEpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9wdGltaXplZDogZmFsc2UsXG4gICAgdmFsdWU6IHJlc3VsdCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNGSShub2RlKSB7XG4gIC8vIFRPRE86IGhhbmRsZSBjaGFyYWN0ZXIgcG9zaXRpb24gaW5zaWRlIHRleHQgbm9kZVxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IGNmaSA9IFwiXCI7XG5cbiAgbGV0IGN1cnJlbnRFbGVtZW50ID0gbm9kZTtcbiAgd2hpbGUgKFxuICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICApIHtcbiAgICBjb25zdCBibGFja2xpc3RlZCA9IGNoZWNrQmxhY2tsaXN0ZWQoY3VycmVudEVsZW1lbnQpO1xuICAgIGlmICghYmxhY2tsaXN0ZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW4gPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlLmNoaWxkcmVuO1xuICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5kZXggPSAtMTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQgPT09IGN1cnJlbnRFbGVtZW50UGFyZW50Q2hpbGRyZW5baV0pIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudEluZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBjZmlJbmRleCA9IChjdXJyZW50RWxlbWVudEluZGV4ICsgMSkgKiAyO1xuICAgICAgICBjZmkgPVxuICAgICAgICAgIGNmaUluZGV4ICtcbiAgICAgICAgICAoY3VycmVudEVsZW1lbnQuaWQgPyBcIltcIiArIGN1cnJlbnRFbGVtZW50LmlkICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICAgKGNmaS5sZW5ndGggPyBcIi9cIiArIGNmaSA6IFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gXCIvXCIgKyBjZmk7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQobG9jYXRpb25zLCBjb2xvciwgcG9pbnRlckludGVyYWN0aW9uLCB0eXBlKSB7XG4gIGNvbnN0IHJhbmdlSW5mbyA9IGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbnMpO1xuICBjb25zdCB1bmlxdWVTdHIgPSBgJHtyYW5nZUluZm8uY2ZpfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yfSR7cmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4fSR7cmFuZ2VJbmZvLnN0YXJ0T2Zmc2V0fSR7cmFuZ2VJbmZvLmVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcn0ke3JhbmdlSW5mby5lbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXh9JHtyYW5nZUluZm8uZW5kT2Zmc2V0fWA7XG5cbiAgY29uc3QgaGFzaCA9IHJlcXVpcmUoXCJoYXNoLmpzXCIpO1xuICBjb25zdCBzaGEyNTZIZXggPSBoYXNoLnNoYTI1NigpLnVwZGF0ZSh1bmlxdWVTdHIpLmRpZ2VzdChcImhleFwiKTtcblxuICB2YXIgaWQ7XG4gIGlmICh0eXBlID09IElEX0hJR0hMSUdIVFNfQ09OVEFJTkVSKSB7XG4gICAgaWQgPSBcIlIyX0hJR0hMSUdIVF9cIiArIHNoYTI1NkhleDtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IFwiUjJfQU5OT1RBVElPTl9cIiArIHNoYTI1NkhleDtcbiAgfVxuXG4gIGRlc3Ryb3lIaWdobGlnaHQoaWQpO1xuXG4gIGNvbnN0IGhpZ2hsaWdodCA9IHtcbiAgICBjb2xvcjogY29sb3IgPyBjb2xvciA6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICBpZCxcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgcmFuZ2VJbmZvLFxuICB9O1xuICBfaGlnaGxpZ2h0cy5wdXNoKGhpZ2hsaWdodCk7XG4gIGNyZWF0ZUhpZ2hsaWdodERvbShcbiAgICB3aW5kb3csXG4gICAgaGlnaGxpZ2h0LFxuICAgIHR5cGUgPT0gSURfQU5OT1RBVElPTl9DT05UQUlORVIgPyB0cnVlIDogZmFsc2VcbiAgKTtcblxuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KHNlbGVjdGlvbkluZm8sIGNvbG9yLCBwb2ludGVySW50ZXJhY3Rpb24pIHtcbiAgcmV0dXJuIF9jcmVhdGVIaWdobGlnaHQoXG4gICAgc2VsZWN0aW9uSW5mbyxcbiAgICBjb2xvcixcbiAgICBwb2ludGVySW50ZXJhY3Rpb24sXG4gICAgSURfSElHSExJR0hUU19DT05UQUlORVJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb24oaWQpIHtcbiAgbGV0IGkgPSAtMTtcblxuICBjb25zdCBoaWdobGlnaHQgPSBfaGlnaGxpZ2h0cy5maW5kKChoLCBqKSA9PiB7XG4gICAgaSA9IGo7XG4gICAgcmV0dXJuIGguaWQgPT09IGlkO1xuICB9KTtcbiAgaWYgKGkgPT0gX2hpZ2hsaWdodHMubGVuZ3RoKSByZXR1cm47XG5cbiAgdmFyIGxvY2F0aW9ucyA9IHtcbiAgICBsb2NhdGlvbnM6IHJhbmdlSW5mbzJMb2NhdGlvbihoaWdobGlnaHQucmFuZ2VJbmZvKSxcbiAgfTtcblxuICByZXR1cm4gX2NyZWF0ZUhpZ2hsaWdodChcbiAgICBsb2NhdGlvbnMsXG4gICAgaGlnaGxpZ2h0LmNvbG9yLFxuICAgIHRydWUsXG4gICAgSURfQU5OT1RBVElPTl9DT05UQUlORVJcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0RG9tKHdpbiwgaGlnaGxpZ2h0LCBhbm5vdGF0aW9uRmxhZykge1xuICBjb25zdCBkb2N1bWVudCA9IHdpbi5kb2N1bWVudDtcblxuICBjb25zdCBzY2FsZSA9XG4gICAgMSAvXG4gICAgKHdpbi5SRUFESVVNMiAmJiB3aW4uUkVBRElVTTIuaXNGaXhlZExheW91dFxuICAgICAgPyB3aW4uUkVBRElVTTIuZnhsVmlld3BvcnRTY2FsZVxuICAgICAgOiAxKTtcblxuICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsaW5nRWxlbWVudChkb2N1bWVudCk7XG5cbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWdpbmF0ZWQgPSBpc1BhZ2luYXRlZChkb2N1bWVudCk7XG4gIGNvbnN0IGhpZ2hsaWdodHNDb250YWluZXIgPSBlbnN1cmVDb250YWluZXIod2luLCBhbm5vdGF0aW9uRmxhZyk7XG4gIGNvbnN0IGhpZ2hsaWdodFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGhpZ2hsaWdodC5pZCk7XG4gIGhpZ2hsaWdodFBhcmVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSKTtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICBoaWdobGlnaHRQYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gIGlmIChoaWdobGlnaHQucG9pbnRlckludGVyYWN0aW9uKSB7XG4gICAgaGlnaGxpZ2h0UGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY2xpY2tcIiwgXCIxXCIpO1xuICB9XG5cbiAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB1c2VTVkcgPSAhREVCVUdfVklTVUFMUyAmJiBVU0VfU1ZHO1xuICAvL2NvbnN0IHVzZVNWRyA9IFVTRV9TVkc7XG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICBsZXQgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWc7XG4gIGNvbnN0IHJvdW5kZWRDb3JuZXIgPSAzO1xuICBjb25zdCB1bmRlcmxpbmVUaGlja25lc3MgPSAyO1xuICBjb25zdCBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyA9IDM7XG4gIGNvbnN0IG9wYWNpdHkgPSBERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWTtcbiAgbGV0IGV4dHJhID0gXCJcIjtcbiAgY29uc3QgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0ID1cbiAgICBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaGlnaGxpZ2h0LmlkKTtcblxuICBsZXQgeE9mZnNldDtcbiAgbGV0IHlPZmZzZXQ7XG4gIGxldCBhbm5vdGF0aW9uT2Zmc2V0O1xuXG4gIGlmIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgeE9mZnNldCA9IHBhZ2luYXRlZCA/IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBib2R5UmVjdC5sZWZ0O1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9XG4gICAgICBwYXJzZUludChcbiAgICAgICAgKHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5yaWdodCAtIHhPZmZzZXQpIC8gd2luZG93LmlubmVyV2lkdGhcbiAgICAgICkgKyAxO1xuICB9IGVsc2UgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSkpIHtcbiAgICB4T2Zmc2V0ID0gcGFnaW5hdGVkID8gMCA6IC1zY3JvbGxFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgeU9mZnNldCA9IHBhZ2luYXRlZCA/IDAgOiBib2R5UmVjdC50b3A7XG4gICAgYW5ub3RhdGlvbk9mZnNldCA9IHBhcnNlSW50KFxuICAgICAgcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0IC8gd2luZG93LmlubmVyV2lkdGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY2xpZW50UmVjdCBvZiBjbGllbnRSZWN0cykge1xuICAgIGlmICh1c2VTVkcpIHtcbiAgICAgIGNvbnN0IGJvcmRlclRoaWNrbmVzcyA9IDA7XG4gICAgICBpZiAoIWhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR1JlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgIFNWR19YTUxfTkFNRVNQQUNFLFxuICAgICAgICBcInJlY3RcIlxuICAgICAgKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBmaWxsOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke2hpZ2hsaWdodC5jb2xvci5ibHVlfSkgIWltcG9ydGFudDsgZmlsbC1vcGFjaXR5OiAke29wYWNpdHl9ICFpbXBvcnRhbnQ7IHN0cm9rZS13aWR0aDogMDtgXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2NhbGUgPSBzY2FsZTtcblxuICAgICAgLypcbiAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG5cbiAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QgPSB7XG4gICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeFwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBgJHtyb3VuZGVkQ29ybmVyICogc2NhbGV9YCk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieFwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC5sZWZ0IC0gYm9yZGVyVGhpY2tuZXNzKSAqIHNjYWxlfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwieVwiLFxuICAgICAgICBgJHsoaGlnaGxpZ2h0QXJlYVNWR1JlY3QucmVjdC50b3AgLSBib3JkZXJUaGlja25lc3MpICogc2NhbGV9YFxuICAgICAgKTtcbiAgICAgIGhpZ2hsaWdodEFyZWFTVkdSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgYCR7KGhpZ2hsaWdodEFyZWFTVkdSZWN0LnJlY3QuaGVpZ2h0ICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFxuICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHUmVjdC5yZWN0LndpZHRoICsgYm9yZGVyVGhpY2tuZXNzICogMikgKiBzY2FsZX1gXG4gICAgICApO1xuICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR1JlY3QpO1xuICAgICAgaWYgKGRyYXdVbmRlcmxpbmUpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR1JlY3Quc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgQ0xBU1NfSElHSExJR0hUX0FSRUEpO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgIGBzdHJva2UtbGluZWNhcDogcm91bmQ7IHN0cm9rZS13aWR0aDogJHtcbiAgICAgICAgICAgIHVuZGVybGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBjbGllbnRSZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBjbGllbnRSZWN0LndpZHRoLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID1cbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoID4gcm91bmRlZENvcm5lciA/IHJvdW5kZWRDb3JuZXIgOiAwO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJ4MVwiLFxuICAgICAgICAgIGAkeyhoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKyBsaW5lT2Zmc2V0KSAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDJcIixcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIChoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgK1xuICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoIC1cbiAgICAgICAgICAgICAgbGluZU9mZnNldCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC50b3AgK1xuICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzIC8gMikgKlxuICAgICAgICAgIHNjYWxlO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCBgJHt5fWApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmhlaWdodCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LndpZHRoICogc2NhbGV9YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZy5hcHBlbmRDaGlsZChoaWdobGlnaHRBcmVhU1ZHTGluZSk7XG4gICAgICB9XG4gICAgICBpZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWR0xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgU1ZHX1hNTF9OQU1FU1BBQ0UsXG4gICAgICAgICAgXCJsaW5lXCJcbiAgICAgICAgKTtcblxuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHUmVjdC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgICAgYHN0cm9rZS1saW5lY2FwOiBidXR0OyBzdHJva2Utd2lkdGg6ICR7XG4gICAgICAgICAgICBzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyAqIHNjYWxlXG4gICAgICAgICAgfTsgc3Ryb2tlOiByZ2IoJHtoaWdobGlnaHQuY29sb3IucmVkfSwgJHtoaWdobGlnaHQuY29sb3IuZ3JlZW59LCAke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLmJsdWVcbiAgICAgICAgICB9KSAhaW1wb3J0YW50OyBzdHJva2Utb3BhY2l0eTogJHtvcGFjaXR5fSAhaW1wb3J0YW50YFxuICAgICAgICApO1xuICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5zY2FsZSA9IHNjYWxlO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgKi9cblxuICAgICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgICBoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBBTk5PVEFUSU9OX1dJRFRILCAvL3JhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQgLSByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0LzQsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cuaW5uZXJXaWR0aCAqIGFubm90YXRpb25PZmZzZXQgLSBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgIHdpZHRoOiBBTk5PVEFUSU9OX1dJRFRILFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwieDFcIixcbiAgICAgICAgICBgJHtoaWdobGlnaHRBcmVhU1ZHTGluZS5yZWN0LmxlZnQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIngyXCIsXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICAoaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5sZWZ0ICsgaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCkgKlxuICAgICAgICAgICAgc2NhbGVcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gaGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCB5ID0gKGhpZ2hsaWdodEFyZWFTVkdMaW5lLnJlY3QudG9wICsgbGluZU9mZnNldCkgKiBzY2FsZTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTFcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFwieTJcIiwgYCR7eX1gKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0xpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC5oZWlnaHQgKiBzY2FsZX1gXG4gICAgICAgICk7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFTVkdMaW5lLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgYCR7aGlnaGxpZ2h0QXJlYVNWR0xpbmUucmVjdC53aWR0aCAqIHNjYWxlfWBcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYVNWR0RvY0ZyYWcuYXBwZW5kQ2hpbGQoaGlnaGxpZ2h0QXJlYVNWR0xpbmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoaWdobGlnaHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgaGlnaGxpZ2h0QXJlYS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgIGlmIChERUJVR19WSVNVQUxTKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IE1hdGgucm91bmQoMHhmZmZmZmYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgY29uc3QgciA9IHJnYiA+PiAxNjtcbiAgICAgICAgY29uc3QgZyA9IChyZ2IgPj4gOCkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGIgPSByZ2IgJiAyNTU7XG4gICAgICAgIGV4dHJhID0gYG91dGxpbmUtY29sb3I6IHJnYigke3J9LCAke2d9LCAke2J9KTsgb3V0bGluZS1zdHlsZTogc29saWQ7IG91dGxpbmUtd2lkdGg6IDFweDsgb3V0bGluZS1vZmZzZXQ6IC0xcHg7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChkcmF3VW5kZXJsaW5lKSB7XG4gICAgICAgICAgZXh0cmEgKz0gYGJvcmRlci1ib3R0b206ICR7dW5kZXJsaW5lVGhpY2tuZXNzICogc2NhbGV9cHggc29saWQgcmdiYSgke1xuICAgICAgICAgICAgaGlnaGxpZ2h0LmNvbG9yLnJlZFxuICAgICAgICAgIH0sICR7aGlnaGxpZ2h0LmNvbG9yLmdyZWVufSwgJHtcbiAgICAgICAgICAgIGhpZ2hsaWdodC5jb2xvci5ibHVlXG4gICAgICAgICAgfSwgJHtvcGFjaXR5fSkgIWltcG9ydGFudGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhpZ2hsaWdodEFyZWEuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICAgICk7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICAgICAgaGlnaGxpZ2h0QXJlYS5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc2NhbGUgPSBzY2FsZTtcbiAgICAgIC8qXG4gICAgICAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgICAgIGhlaWdodDogY2xpZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICovXG4gICAgICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYS5yZWN0ID0ge1xuICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICAgICAgdG9wOiByYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodEFyZWEucmVjdCA9IHtcbiAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgIGxlZnQ6IGNsaWVudFJlY3QubGVmdCAtIHhPZmZzZXQsXG4gICAgICAgICAgdG9wOiBjbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUud2lkdGggPSBgJHtoaWdobGlnaHRBcmVhLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEFyZWEucmVjdC5oZWlnaHQgKiBzY2FsZX1weGA7XG4gICAgICBoaWdobGlnaHRBcmVhLnN0eWxlLmxlZnQgPSBgJHtoaWdobGlnaHRBcmVhLnJlY3QubGVmdCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodEFyZWEuc3R5bGUudG9wID0gYCR7aGlnaGxpZ2h0QXJlYS5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcbiAgICAgIGhpZ2hsaWdodFBhcmVudC5hcHBlbmQoaGlnaGxpZ2h0QXJlYSk7XG4gICAgICBpZiAoIURFQlVHX1ZJU1VBTFMgJiYgZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgLy9pZiAoZHJhd1N0cmlrZVRocm91Z2gpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0QXJlYUxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19ISUdITElHSFRfQVJFQSk7XG5cbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICBgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50O2BcbiAgICAgICAgKTtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUuc2V0UHJvcGVydHkoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnBvc2l0aW9uID0gcGFnaW5hdGVkID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiO1xuICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5zY2FsZSA9IHNjYWxlO1xuICAgICAgICAvKlxuICAgICAgICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0ID0ge1xuICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgICAgICAgICAgICB0b3A6IGNsaWVudFJlY3QudG9wIC0geU9mZnNldCxcbiAgICAgICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICovXG5cbiAgICAgICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdCA9IHtcbiAgICAgICAgICAgIGhlaWdodDogQU5OT1RBVElPTl9XSURUSCwgLy9yYW5nZUFubm90YXRpb25Cb3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC0gcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodC80LFxuICAgICAgICAgICAgbGVmdDogd2luZG93LmlubmVyV2lkdGggKiBhbm5vdGF0aW9uT2Zmc2V0IC0gQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICAgIHRvcDogcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LnRvcCAtIHlPZmZzZXQsXG4gICAgICAgICAgICB3aWR0aDogQU5OT1RBVElPTl9XSURUSCxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogY2xpZW50UmVjdC5sZWZ0IC0geE9mZnNldCxcbiAgICAgICAgICAgIHRvcDogY2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgICAgICAgd2lkdGg6IGNsaWVudFJlY3Qud2lkdGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLndpZHRoID0gYCR7XG4gICAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUucmVjdC53aWR0aCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLmhlaWdodCA9IGAke1xuICAgICAgICAgIHN0cmlrZVRocm91Z2hMaW5lVGhpY2tuZXNzICogc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0QXJlYUxpbmUuc3R5bGUubGVmdCA9IGAke1xuICAgICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnJlY3QubGVmdCAqIHNjYWxlXG4gICAgICAgIH1weGA7XG4gICAgICAgIGhpZ2hsaWdodEFyZWFMaW5lLnN0eWxlLnRvcCA9IGAke1xuICAgICAgICAgIChoaWdobGlnaHRBcmVhTGluZS5yZWN0LnRvcCArXG4gICAgICAgICAgICBoaWdobGlnaHRBcmVhTGluZS5yZWN0LmhlaWdodCAvIDIgLVxuICAgICAgICAgICAgc3RyaWtlVGhyb3VnaExpbmVUaGlja25lc3MgLyAyKSAqXG4gICAgICAgICAgc2NhbGVcbiAgICAgICAgfXB4YDtcbiAgICAgICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhTGluZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFubm90YXRpb25GbGFnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAodXNlU1ZHICYmIGhpZ2hsaWdodEFyZWFTVkdEb2NGcmFnKSB7XG4gICAgY29uc3QgaGlnaGxpZ2h0QXJlYVNWRyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfWE1MX05BTUVTUEFDRSwgXCJzdmdcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zZXRBdHRyaWJ1dGUoXCJwb2ludGVyLWV2ZW50c1wiLCBcIm5vbmVcIik7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS5sZWZ0ID0gXCIwXCI7XG4gICAgaGlnaGxpZ2h0QXJlYVNWRy5zdHlsZS50b3AgPSBcIjBcIjtcbiAgICBoaWdobGlnaHRBcmVhU1ZHLmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyk7XG4gICAgaGlnaGxpZ2h0UGFyZW50LmFwcGVuZChoaWdobGlnaHRBcmVhU1ZHKTtcbiAgfVxuXG4gIGNvbnN0IGhpZ2hsaWdodEJvdW5kaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICBpZiAoYW5ub3RhdGlvbkZsYWcpIHtcbiAgICBoaWdobGlnaHRCb3VuZGluZy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBDTEFTU19BTk5PVEFUSU9OX0JPVU5ESU5HX0FSRUEpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBib3JkZXItcmFkaXVzOiAke3JvdW5kZWRDb3JuZXJ9cHggIWltcG9ydGFudDsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgke2hpZ2hsaWdodC5jb2xvci5yZWR9LCAke2hpZ2hsaWdodC5jb2xvci5ncmVlbn0sICR7aGlnaGxpZ2h0LmNvbG9yLmJsdWV9LCAke29wYWNpdHl9KSAhaW1wb3J0YW50OyAke2V4dHJhfWBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIENMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBKTtcbiAgfVxuXG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLnNldFByb3BlcnR5KFwicG9pbnRlci1ldmVudHNcIiwgXCJub25lXCIpO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5wb3NpdGlvbiA9IHBhZ2luYXRlZCA/IFwiZml4ZWRcIiA6IFwiYWJzb2x1dGVcIjtcbiAgaGlnaGxpZ2h0Qm91bmRpbmcuc2NhbGUgPSBzY2FsZTtcblxuICBpZiAoREVCVUdfVklTVUFMUykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnNldEF0dHJpYnV0ZShcbiAgICAgIFwic3R5bGVcIixcbiAgICAgIGBvdXRsaW5lLWNvbG9yOiBtYWdlbnRhOyBvdXRsaW5lLXN0eWxlOiBzb2xpZDsgb3V0bGluZS13aWR0aDogMXB4OyBvdXRsaW5lLW9mZnNldDogLTFweDtgXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbm5vdGF0aW9uRmxhZykge1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IEFOTk9UQVRJT05fV0lEVEgsIC8vcmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAtIHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQvNCxcbiAgICAgIGxlZnQ6IHdpbmRvdy5pbm5lcldpZHRoICogYW5ub3RhdGlvbk9mZnNldCAtIEFOTk9UQVRJT05fV0lEVEgsXG4gICAgICB0b3A6IHJhbmdlQW5ub3RhdGlvbkJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IEFOTk9UQVRJT05fV0lEVEgsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGhpZ2hsaWdodEJvdW5kaW5nLnJlY3QgPSB7XG4gICAgICBoZWlnaHQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCxcbiAgICAgIGxlZnQ6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LmxlZnQgLSB4T2Zmc2V0LFxuICAgICAgdG9wOiByYW5nZUJvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSB5T2Zmc2V0LFxuICAgICAgd2lkdGg6IHJhbmdlQm91bmRpbmdDbGllbnRSZWN0LndpZHRoLFxuICAgIH07XG4gIH1cblxuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS53aWR0aCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3Qud2lkdGggKiBzY2FsZX1weGA7XG4gIGhpZ2hsaWdodEJvdW5kaW5nLnN0eWxlLmhlaWdodCA9IGAke2hpZ2hsaWdodEJvdW5kaW5nLnJlY3QuaGVpZ2h0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS5sZWZ0ID0gYCR7aGlnaGxpZ2h0Qm91bmRpbmcucmVjdC5sZWZ0ICogc2NhbGV9cHhgO1xuICBoaWdobGlnaHRCb3VuZGluZy5zdHlsZS50b3AgPSBgJHtoaWdobGlnaHRCb3VuZGluZy5yZWN0LnRvcCAqIHNjYWxlfXB4YDtcblxuICBoaWdobGlnaHRQYXJlbnQuYXBwZW5kKGhpZ2hsaWdodEJvdW5kaW5nKTtcbiAgaGlnaGxpZ2h0c0NvbnRhaW5lci5hcHBlbmQoaGlnaGxpZ2h0UGFyZW50KTtcblxuICByZXR1cm4gaGlnaGxpZ2h0UGFyZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIENPTExBUFNFRCAuLi4gUkFOR0UgUkVWRVJTRT9cIik7XG4gIGNvbnN0IHJhbmdlUmV2ZXJzZSA9IG5ldyBSYW5nZSgpO1xuICByYW5nZVJldmVyc2Uuc2V0U3RhcnQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgcmFuZ2VSZXZlcnNlLnNldEVuZChzdGFydE5vZGUsIHN0YXJ0T2Zmc2V0KTtcbiAgaWYgKCFyYW5nZVJldmVyc2UuY29sbGFwc2VkKSB7XG4gICAgY29uc29sZS5sb2coXCI+Pj4gY3JlYXRlT3JkZXJlZFJhbmdlIFJBTkdFIFJFVkVSU0UgT0suXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxuICBjb25zb2xlLmxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2UocmFuZ2UsIGdldENzc1NlbGVjdG9yLCBjb21wdXRlRWxlbWVudENGSSkge1xuICBjb25zdCBzdGFydElzRWxlbWVudCA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50ID0gc3RhcnRJc0VsZW1lbnRcbiAgICA/IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgOiByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlICYmXG4gICAgICByYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgID8gcmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIXN0YXJ0Q29udGFpbmVyRWxlbWVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPSBzdGFydElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oc3RhcnRDb250YWluZXJFbGVtZW50LmNoaWxkTm9kZXMpLmluZGV4T2YoXG4gICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gICAgICApO1xuICBpZiAoc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3Qgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IgPSBnZXRDc3NTZWxlY3RvcihcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRcbiAgKTtcbiAgY29uc3QgZW5kSXNFbGVtZW50ID0gcmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudCA9IGVuZElzRWxlbWVudFxuICAgID8gcmFuZ2UuZW5kQ29udGFpbmVyXG4gICAgOiByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZSAmJlxuICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgPyByYW5nZS5lbmRDb250YWluZXIucGFyZW50Tm9kZVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoIWVuZENvbnRhaW5lckVsZW1lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA9IGVuZElzRWxlbWVudFxuICAgID8gLTFcbiAgICA6IEFycmF5LmZyb20oZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzKS5pbmRleE9mKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGlmIChlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPCAtMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yID0gZ2V0Q3NzU2VsZWN0b3IoZW5kQ29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGNvbW1vbkVsZW1lbnRBbmNlc3RvciA9IGdldENvbW1vbkFuY2VzdG9yRWxlbWVudChcbiAgICByYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICByYW5nZS5lbmRDb250YWluZXJcbiAgKTtcbiAgaWYgKCFjb21tb25FbGVtZW50QW5jZXN0b3IpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBOTyBSQU5HRSBDT01NT04gQU5DRVNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcikge1xuICAgIGNvbnN0IHJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50ID1cbiAgICAgIHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxuICAgICAgICA/IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgICAgIDogcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBpZiAoXG4gICAgICByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCAmJlxuICAgICAgcmFuZ2VDb21tb25BbmNlc3RvckVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgKSB7XG4gICAgICBpZiAoY29tbW9uRWxlbWVudEFuY2VzdG9yICE9PSByYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+PiBDT01NT04gQU5DRVNUT1IgQ09OVEFJTkVSIERJRkY/PyFcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGdldENzc1NlbGVjdG9yKGNvbW1vbkVsZW1lbnRBbmNlc3RvcikpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZXRDc3NTZWxlY3RvcihyYW5nZUNvbW1vbkFuY2VzdG9yRWxlbWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByb290RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKGNvbW1vbkVsZW1lbnRBbmNlc3Rvcik7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudENmaSA9IGNvbXB1dGVFbGVtZW50Q0ZJKHN0YXJ0Q29udGFpbmVyRWxlbWVudCk7XG4gIGNvbnN0IGVuZEVsZW1lbnRDZmkgPSBjb21wdXRlRWxlbWVudENGSShlbmRDb250YWluZXJFbGVtZW50KTtcbiAgbGV0IGNmaTtcbiAgaWYgKHJvb3RFbGVtZW50Q2ZpICYmIHN0YXJ0RWxlbWVudENmaSAmJiBlbmRFbGVtZW50Q2ZpKSB7XG4gICAgbGV0IHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaTtcbiAgICBpZiAoIXN0YXJ0SXNFbGVtZW50KSB7XG4gICAgICBjb25zdCBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSA9IGdldENoaWxkVGV4dE5vZGVDZmlJbmRleChcbiAgICAgICAgc3RhcnRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lclxuICAgICAgKTtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgIHN0YXJ0RWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkgK1xuICAgICAgICBcIjpcIiArXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPCBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5zdGFydE9mZnNldF07XG4gICAgICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKHJhbmdlLnN0YXJ0T2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZE5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaSA9IHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQgKiAyO1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGROb2RlID1cbiAgICAgICAgICBzdGFydENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAtIDFcbiAgICAgICAgICBdO1xuICAgICAgICBpZiAobGFzdENoaWxkTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICBzdGFydEVsZW1lbnRPclRleHRDZmkgPVxuICAgICAgICAgICAgc3RhcnRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudENmaSArIFwiL1wiICsgKGNmaUluZGV4T2ZMYXN0RWxlbWVudCArIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaTtcbiAgICBpZiAoIWVuZElzRWxlbWVudCkge1xuICAgICAgY29uc3QgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpID0gZ2V0Q2hpbGRUZXh0Tm9kZUNmaUluZGV4KFxuICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICByYW5nZS5lbmRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID1cbiAgICAgICAgZW5kRWxlbWVudENmaSArXG4gICAgICAgIFwiL1wiICtcbiAgICAgICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4Rm9yQ2ZpICtcbiAgICAgICAgXCI6XCIgK1xuICAgICAgICByYW5nZS5lbmRPZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID49IDAgJiZcbiAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0IDwgZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZS5lbmRPZmZzZXRdO1xuICAgICAgICBpZiAoY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgIGVuZEVsZW1lbnRPclRleHRDZmkgPSBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAocmFuZ2UuZW5kT2Zmc2V0ICsgMSkgKiAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmaVRleHROb2RlSW5kZXggPSBnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgoXG4gICAgICAgICAgICBlbmRDb250YWluZXJFbGVtZW50LFxuICAgICAgICAgICAgY2hpbGROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpID0gZW5kRWxlbWVudENmaSArIFwiL1wiICsgY2ZpVGV4dE5vZGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2ZpSW5kZXhPZkxhc3RFbGVtZW50ID0gZW5kQ29udGFpbmVyRWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudCAqIDI7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGUgPVxuICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgICAgIGVuZENvbnRhaW5lckVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXG4gICAgICAgICAgXTtcbiAgICAgICAgaWYgKGxhc3RDaGlsZE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kRWxlbWVudE9yVGV4dENmaSA9XG4gICAgICAgICAgICBlbmRFbGVtZW50Q2ZpICsgXCIvXCIgKyAoY2ZpSW5kZXhPZkxhc3RFbGVtZW50ICsgMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2ZpID1cbiAgICAgIHJvb3RFbGVtZW50Q2ZpICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHN0YXJ0RWxlbWVudE9yVGV4dENmaS5yZXBsYWNlKHJvb3RFbGVtZW50Q2ZpLCBcIlwiKSArXG4gICAgICBcIixcIiArXG4gICAgICBlbmRFbGVtZW50T3JUZXh0Q2ZpLnJlcGxhY2Uocm9vdEVsZW1lbnRDZmksIFwiXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgY2ZpLFxuICAgIGVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgZW5kT2Zmc2V0OiByYW5nZS5lbmRPZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHJhbmdlLnN0YXJ0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCByYW5nZUluZm8pIHtcbiAgY29uc3Qgc3RhcnRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFzdGFydEVsZW1lbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIFNUQVJUIEVMRU1FTlQgQ1NTIFNFTEVDVE9SPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgc3RhcnRDb250YWluZXIgPSBzdGFydEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gMCkge1xuICAgIGlmIChcbiAgICAgIHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PVxuICAgICAgc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGVuZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgIHJhbmdlSW5mby5lbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3JcbiAgKTtcbiAgaWYgKCFlbmRFbGVtZW50KSB7XG4gICAgY29uc29sZS5sb2coXCJeXl4gY29udmVydFJhbmdlSW5mbyBOTyBFTkQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBlbmRDb250YWluZXIgPSBlbmRFbGVtZW50O1xuICBpZiAocmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLmVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSBlbmRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgIHN0YXJ0Q29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5zdGFydE9mZnNldCxcbiAgICBlbmRDb250YWluZXIsXG4gICAgcmFuZ2VJbmZvLmVuZE9mZnNldFxuICApO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZvckhpZ2hsaWdodEFubm90YXRpb25NYXJrV2l0aElEKHdpbiwgaWQpIHtcbiAgbGV0IGNsaWVudFJlY3RzID0gZnJhbWVGb3JIaWdobGlnaHRXaXRoSUQoaWQpO1xuICBpZiAoIWNsaWVudFJlY3RzKSByZXR1cm47XG5cbiAgdmFyIHRvcENsaWVudFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgdmFyIG1heEhlaWdodCA9IHRvcENsaWVudFJlY3QuaGVpZ2h0O1xuICBmb3IgKGNvbnN0IGNsaWVudFJlY3Qgb2YgY2xpZW50UmVjdHMpIHtcbiAgICBpZiAoY2xpZW50UmVjdC50b3AgPCB0b3BDbGllbnRSZWN0LnRvcCkgdG9wQ2xpZW50UmVjdCA9IGNsaWVudFJlY3Q7XG4gICAgaWYgKGNsaWVudFJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSBtYXhIZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50ID0gd2luLmRvY3VtZW50O1xuXG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcGFnaW5hdGVkID0gaXNQYWdpbmF0ZWQoZG9jdW1lbnQpO1xuICBjb25zdCBib2R5UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGxldCB5T2Zmc2V0O1xuICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQW5kcm9pZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAtc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgOiBib2R5UmVjdC50b3A7XG4gIH0gZWxzZSBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBob25lfGlQYWR8aVBvZC9pKSkge1xuICAgIHlPZmZzZXQgPSBwYWdpbmF0ZWQgPyAwIDogYm9keVJlY3QudG9wO1xuICB9XG4gIHZhciBuZXdUb3AgPSB0b3BDbGllbnRSZWN0LnRvcDtcblxuICBpZiAoX2hpZ2hsaWdodHNDb250YWluZXIpIHtcbiAgICBkbyB7XG4gICAgICB2YXIgYm91bmRpbmdBcmVhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgIENMQVNTX0FOTk9UQVRJT05fQk9VTkRJTkdfQVJFQVxuICAgICAgKTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgICAgLy9mb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gYm91bmRpbmdBcmVhcy5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDAsIGxlbiA9IGJvdW5kaW5nQXJlYXMubGVuZ3RoIHwgMDtcbiAgICAgICAgaSA8IGxlbjtcbiAgICAgICAgaSA9IChpICsgMSkgfCAwXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJvdW5kaW5nQXJlYSA9IGJvdW5kaW5nQXJlYXNbaV07XG4gICAgICAgIGlmIChNYXRoLmFicyhib3VuZGluZ0FyZWEucmVjdC50b3AgLSAobmV3VG9wIC0geU9mZnNldCkpIDwgMykge1xuICAgICAgICAgIG5ld1RvcCArPSBib3VuZGluZ0FyZWEucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmQpO1xuICB9XG5cbiAgdG9wQ2xpZW50UmVjdC50b3AgPSBuZXdUb3A7XG4gIHRvcENsaWVudFJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuXG4gIHJldHVybiB0b3BDbGllbnRSZWN0O1xufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgbGV0IGkgPSAtMTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gX2hpZ2hsaWdodHMuZmluZCgoaCwgaikgPT4ge1xuICAgIGkgPSBqO1xuICAgIHJldHVybiBoLmlkID09PSBpZDtcbiAgfSk7XG4gIHJldHVybiBoaWdobGlnaHQ7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRm9ySGlnaGxpZ2h0V2l0aElEKGlkKSB7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IGhpZ2hsaWdodFdpdGhJRChpZCk7XG4gIGlmICghaGlnaGxpZ2h0KSByZXR1cm47XG5cbiAgY29uc3QgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBnZXRTY3JvbGxpbmdFbGVtZW50KGRvY3VtZW50KTtcbiAgY29uc3QgcmFuZ2UgPSBjb252ZXJ0UmFuZ2VJbmZvKGRvY3VtZW50LCBoaWdobGlnaHQucmFuZ2VJbmZvKTtcbiAgaWYgKCFyYW5nZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkcmF3VW5kZXJsaW5lID0gZmFsc2U7XG4gIGNvbnN0IGRyYXdTdHJpa2VUaHJvdWdoID0gZmFsc2U7XG4gIGNvbnN0IGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMgPSBkcmF3VW5kZXJsaW5lIHx8IGRyYXdTdHJpa2VUaHJvdWdoO1xuICAvL2NvbnN0IGNsaWVudFJlY3RzID0gREVCVUdfVklTVUFMUyA/IHJhbmdlLmdldENsaWVudFJlY3RzKCkgOlxuICBjb25zdCBjbGllbnRSZWN0cyA9IGdldENsaWVudFJlY3RzTm9PdmVybGFwKFxuICAgIHJhbmdlLFxuICAgIGRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHNcbiAgKTtcblxuICByZXR1cm4gY2xpZW50UmVjdHM7XG59XG5cbmZ1bmN0aW9uIHJhbmdlSW5mbzJMb2NhdGlvbihyYW5nZUluZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBjc3NTZWxlY3RvcjogcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgIHBhcnRpYWxDZmk6IHJhbmdlSW5mby5jZmksXG4gICAgZG9tUmFuZ2U6IHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3IsXG4gICAgICAgIHRleHROb2RlSW5kZXg6IHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCxcbiAgICAgICAgb2Zmc2V0OiByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgICB9LFxuICAgICAgZW5kOiB7XG4gICAgICAgIGNzc1NlbGVjdG9yOiByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yLFxuICAgICAgICB0ZXh0Tm9kZUluZGV4OiByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4LFxuICAgICAgICBvZmZzZXQ6IHJhbmdlSW5mby5lbmRPZmZzZXQsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBjZmk6IGxvY2F0aW9uLnBhcnRpYWxDZmksXG4gICAgZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4OiBlbmQudGV4dE5vZGVJbmRleCxcbiAgICBlbmRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IGVuZC5jc3NTZWxlY3RvcixcbiAgICBlbmRPZmZzZXQ6IGVuZC5vZmZzZXQsXG4gICAgc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IHN0YXJ0LnRleHROb2RlSW5kZXgsXG4gICAgc3RhcnRDb250YWluZXJFbGVtZW50Q3NzU2VsZWN0b3I6IHN0YXJ0LmNzc1NlbGVjdG9yLFxuICAgIHN0YXJ0T2Zmc2V0OiBzdGFydC5vZmZzZXQsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQoaWQpIHtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0V2l0aElEKGlkKTtcbiAgaWYgKCFoaWdobGlnaHQpIHJldHVybjtcblxuICBjb25zdCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGdldFNjcm9sbGluZ0VsZW1lbnQoZG9jdW1lbnQpO1xuICBjb25zdCByYW5nZSA9IGNvbnZlcnRSYW5nZUluZm8oZG9jdW1lbnQsIGhpZ2hsaWdodC5yYW5nZUluZm8pO1xuICBpZiAoIXJhbmdlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRyYXdVbmRlcmxpbmUgPSBmYWxzZTtcbiAgY29uc3QgZHJhd1N0cmlrZVRocm91Z2ggPSBmYWxzZTtcbiAgY29uc3QgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0cyA9IGRyYXdVbmRlcmxpbmUgfHwgZHJhd1N0cmlrZVRocm91Z2g7XG4gIC8vY29uc3QgY2xpZW50UmVjdHMgPSBERUJVR19WSVNVQUxTID8gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKSA6XG4gIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0Q2xpZW50UmVjdHNOb092ZXJsYXAoXG4gICAgcmFuZ2UsXG4gICAgZG9Ob3RNZXJnZUhvcml6b250YWxseUFsaWduZWRSZWN0c1xuICApO1xuICB2YXIgc2l6ZSA9IHtcbiAgICBzY3JlZW5XaWR0aDogd2luZG93Lm91dGVyV2lkdGgsXG4gICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgbGVmdDogY2xpZW50UmVjdHNbMF0ubGVmdCxcbiAgICB3aWR0aDogY2xpZW50UmVjdHNbMF0ud2lkdGgsXG4gICAgdG9wOiBjbGllbnRSZWN0c1swXS50b3AsXG4gICAgaGVpZ2h0OiBjbGllbnRSZWN0c1swXS5oZWlnaHQsXG4gIH07XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25SZWN0KCkge1xuICB0cnkge1xuICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG5cbiAgICBjb25zdCBjbGllbnRSZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB2YXIgaGFuZGxlQm91bmRzID0ge1xuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5vdXRlcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cub3V0ZXJIZWlnaHQsXG4gICAgICBsZWZ0OiBjbGllbnRSZWN0LmxlZnQsXG4gICAgICB3aWR0aDogY2xpZW50UmVjdC53aWR0aCxcbiAgICAgIHRvcDogY2xpZW50UmVjdC50b3AsXG4gICAgICBoZWlnaHQ6IGNsaWVudFJlY3QuaGVpZ2h0LFxuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZUJvdW5kcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTY3JvbGxNb2RlKGZsYWcpIHtcbiAgaWYgKCFmbGFnKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfUEFHSU5BVEVEKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19QQUdJTkFURUQpO1xuICB9XG59XG5cbi8qXG4gaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsgLy8gSUUgPj0gOTsgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAvL2FsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpOyAvL2hlcmUgeW91IGRyYXcgeW91ciBvd24gbWVudVxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvL2xldCBnZXRDc3NTZWxlY3RvciA9IGZ1bGxRdWFsaWZpZWRTZWxlY3RvcjtcbiAgICAgICAgICAgIFxuXHRcdFx0bGV0IHN0ciA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGxldCBzZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8oKTtcblx0XHRcdGxldCBwb3MgPSBjcmVhdGVIaWdobGlnaHQoc2VsZWN0aW9uSW5mbyx7cmVkOjEwLGdyZWVuOjUwLGJsdWU6MjMwfSx0cnVlKTtcblx0XHRcdGxldCByZXQyID0gY3JlYXRlQW5ub3RhdGlvbihwb3MuaWQpO1xuXHRcdFx0XG4gIH0sIGZhbHNlKTtcbiAgICB9IGVsc2UgeyAvLyBJRSA8IDlcbiAgICAgICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiWW91J3ZlIHRyaWVkIHRvIG9wZW4gY29udGV4dCBtZW51XCIpO1xuICAgICAgICAgICAgd2luZG93LmV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiovXG4iLCIvL1xuLy8gIENvcHlyaWdodCAyMDIyIFJlYWRpdW0gRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNELXN0eWxlIGxpY2Vuc2Vcbi8vICBhdmFpbGFibGUgaW4gdGhlIHRvcC1sZXZlbCBMSUNFTlNFIGZpbGUgb2YgdGhlIHByb2plY3QuXG4vL1xuXG5pbXBvcnQgeyBpc1Njcm9sbE1vZGVFbmFibGVkLCBwYWdlV2lkdGggfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgZ2V0Q3NzU2VsZWN0b3IgfSBmcm9tIFwiY3NzLXNlbGVjdG9yLWdlbmVyYXRvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IoKSB7XG4gIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaHJlZjogXCIjXCIsXG4gICAgdHlwZTogXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIixcbiAgICBsb2NhdGlvbnM6IHtcbiAgICAgIGNzc1NlbGVjdG9yOiBnZXRDc3NTZWxlY3RvcihlbGVtZW50KSxcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgIGhpZ2hsaWdodDogZWxlbWVudC50ZXh0Q29udGVudCxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kRWxlbWVudChyb290RWxlbWVudCkge1xuICB2YXIgZm91bmRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBmb3IgKHZhciBpID0gcm9vdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBjaGlsZCA9IHJvb3RFbGVtZW50LmNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZWxlbWVudFJlbGF0aXZlUG9zaXRpb24oY2hpbGQsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHBvc2l0aW9uID09IDApIHtcbiAgICAgIGlmICghc2hvdWxkSWdub3JlRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgZm91bmRFbGVtZW50ID0gY2hpbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICAgIGlmICghZm91bmRFbGVtZW50KSB7XG4gICAgICAgIGZvdW5kRWxlbWVudCA9IGNoaWxkO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZvdW5kRWxlbWVudCkge1xuICAgIHJldHVybiBmaW5kRWxlbWVudChmb3VuZEVsZW1lbnQpO1xuICB9XG4gIHJldHVybiByb290RWxlbWVudDtcbn1cblxuLy8gU2VlIGNvbXB1dGVWaXNpYmlsaXR5XygpIGluIHIyLW5hdmlnYXRvci1qc1xuZnVuY3Rpb24gZWxlbWVudFJlbGF0aXZlUG9zaXRpb24oZWxlbWVudCwgZG9tUmVjdCAvKiBudWxsYWJsZSAqLykge1xuICBpZiAocmVhZGl1bS5pc0ZpeGVkTGF5b3V0KSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSB8fCBlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8ICFkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCByZWN0ID0gZG9tUmVjdCB8fCBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGlmIChpc1Njcm9sbE1vZGVFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGlmIChyZWN0LmxlZnQgPj0gcGFnZVdpZHRoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKHJlY3QubGVmdCA+PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZWxTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGlmIChlbFN0eWxlKSB7XG4gICAgY29uc3QgZGlzcGxheSA9IGVsU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIik7XG4gICAgaWYgKGRpc3BsYXkgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gQ2Fubm90IGJlIHJlbGllZCB1cG9uLCBiZWNhdXNlIHdlYiBicm93c2VyIGVuZ2luZSByZXBvcnRzIGludmlzaWJsZSB3aGVuIG91dCBvZiB2aWV3IGluXG4gICAgLy8gc2Nyb2xsZWQgY29sdW1ucyFcbiAgICAvLyBjb25zdCB2aXNpYmlsaXR5ID0gZWxTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJpbGl0eVwiKTtcbiAgICAvLyBpZiAodmlzaWJpbGl0eSA9PT0gXCJoaWRkZW5cIikge1xuICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gfVxuICAgIGNvbnN0IG9wYWNpdHkgPSBlbFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvcGFjaXR5XCIpO1xuICAgIGlmIChvcGFjaXR5ID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuaW1wb3J0IHsgbG9nIGFzIGxvZ05hdGl2ZSwgbG9nRXJyb3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgdG9OYXRpdmVSZWN0IH0gZnJvbSBcIi4vcmVjdFwiO1xuaW1wb3J0IHsgVGV4dFJhbmdlIH0gZnJvbSBcIi4vdmVuZG9yL2h5cG90aGVzaXMvYW5jaG9yaW5nL3RleHQtcmFuZ2VcIjtcblxuLy8gUG9seWZpbGwgZm9yIEFuZHJvaWQgQVBJIDI2XG5pbXBvcnQgbWF0Y2hBbGwgZnJvbSBcInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcIjtcbm1hdGNoQWxsLnNoaW0oKTtcblxuY29uc3QgZGVidWcgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNlbGVjdGlvbigpIHtcbiAgY29uc3QgdGV4dCA9IGdldEN1cnJlbnRTZWxlY3Rpb25UZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBnZXRTZWxlY3Rpb25SZWN0KCk7XG4gIHJldHVybiB7IHRleHQsIHJlY3QgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uUmVjdCgpIHtcbiAgdHJ5IHtcbiAgICBsZXQgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuXG4gICAgcmV0dXJuIHRvTmF0aXZlUmVjdChyYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dFcnJvcihlKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2VsZWN0aW9uVGV4dCgpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHNlbGVjdGlvbi5pc0NvbGxhcHNlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGNsZWFuSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0XG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9cXG4vZywgXCIgXCIpXG4gICAgLnJlcGxhY2UoL1xcc1xccysvZywgXCIgXCIpO1xuICBpZiAoY2xlYW5IaWdobGlnaHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICFzZWxlY3Rpb24uZm9jdXNOb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByYW5nZSA9XG4gICAgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDFcbiAgICAgID8gc2VsZWN0aW9uLmdldFJhbmdlQXQoMClcbiAgICAgIDogY3JlYXRlT3JkZXJlZFJhbmdlKFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgKTtcbiAgaWYgKCFyYW5nZSB8fCByYW5nZS5jb2xsYXBzZWQpIHtcbiAgICBsb2coXCIkJCQkJCQkJCQkJCQkJCQkJCBDQU5OT1QgR0VUIE5PTi1DT0xMQVBTRUQgU0VMRUNUSU9OIFJBTkdFPyFcIik7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50O1xuICBjb25zdCB0ZXh0UmFuZ2UgPSBUZXh0UmFuZ2UuZnJvbVJhbmdlKHJhbmdlKS5yZWxhdGl2ZVRvKGRvY3VtZW50LmJvZHkpO1xuICBjb25zdCBzdGFydCA9IHRleHRSYW5nZS5zdGFydC5vZmZzZXQ7XG4gIGNvbnN0IGVuZCA9IHRleHRSYW5nZS5lbmQub2Zmc2V0O1xuXG4gIGNvbnN0IHNuaXBwZXRMZW5ndGggPSAyMDA7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBiZWZvcmUgdGhlIGhpZ2hsaWdodCwgaWdub3JpbmcgdGhlIGZpcnN0IFwid29yZFwiLCB3aGljaCBtaWdodCBiZSBjdXQuXG4gIGxldCBiZWZvcmUgPSB0ZXh0LnNsaWNlKE1hdGgubWF4KDAsIHN0YXJ0IC0gc25pcHBldExlbmd0aCksIHN0YXJ0KTtcbiAgbGV0IGZpcnN0V29yZFN0YXJ0ID0gYmVmb3JlLnNlYXJjaCgvXFxQe0x9XFxwe0x9L2d1KTtcbiAgaWYgKGZpcnN0V29yZFN0YXJ0ICE9PSAtMSkge1xuICAgIGJlZm9yZSA9IGJlZm9yZS5zbGljZShmaXJzdFdvcmRTdGFydCArIDEpO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgdGV4dCBhZnRlciB0aGUgaGlnaGxpZ2h0LCBpZ25vcmluZyB0aGUgbGFzdCBcIndvcmRcIiwgd2hpY2ggbWlnaHQgYmUgY3V0LlxuICBsZXQgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGVuZCwgTWF0aC5taW4odGV4dC5sZW5ndGgsIGVuZCArIHNuaXBwZXRMZW5ndGgpKTtcbiAgbGV0IGxhc3RXb3JkRW5kID0gQXJyYXkuZnJvbShhZnRlci5tYXRjaEFsbCgvXFxwe0x9XFxQe0x9L2d1KSkucG9wKCk7XG4gIGlmIChsYXN0V29yZEVuZCAhPT0gdW5kZWZpbmVkICYmIGxhc3RXb3JkRW5kLmluZGV4ID4gMSkge1xuICAgIGFmdGVyID0gYWZ0ZXIuc2xpY2UoMCwgbGFzdFdvcmRFbmQuaW5kZXggKyAxKTtcbiAgfVxuXG4gIHJldHVybiB7IGhpZ2hsaWdodCwgYmVmb3JlLCBhZnRlciB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcmRlcmVkUmFuZ2Uoc3RhcnROb2RlLCBzdGFydE9mZnNldCwgZW5kTm9kZSwgZW5kT2Zmc2V0KSB7XG4gIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKCk7XG4gIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Tm9kZSwgc3RhcnRPZmZzZXQpO1xuICByYW5nZS5zZXRFbmQoZW5kTm9kZSwgZW5kT2Zmc2V0KTtcbiAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cbiAgbG9nKFwiPj4+IGNyZWF0ZU9yZGVyZWRSYW5nZSBDT0xMQVBTRUQgLi4uIFJBTkdFIFJFVkVSU0U/XCIpO1xuICBjb25zdCByYW5nZVJldmVyc2UgPSBuZXcgUmFuZ2UoKTtcbiAgcmFuZ2VSZXZlcnNlLnNldFN0YXJ0KGVuZE5vZGUsIGVuZE9mZnNldCk7XG4gIHJhbmdlUmV2ZXJzZS5zZXRFbmQoc3RhcnROb2RlLCBzdGFydE9mZnNldCk7XG4gIGlmICghcmFuZ2VSZXZlcnNlLmNvbGxhcHNlZCkge1xuICAgIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBPSy5cIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG4gIGxvZyhcIj4+PiBjcmVhdGVPcmRlcmVkUmFuZ2UgUkFOR0UgUkVWRVJTRSBBTFNPIENPTExBUFNFRD8hXCIpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFJhbmdlSW5mbyhkb2N1bWVudCwgcmFuZ2VJbmZvKSB7XG4gIGNvbnN0IHN0YXJ0RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghc3RhcnRFbGVtZW50KSB7XG4gICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gTk8gU1RBUlQgRUxFTUVOVCBDU1MgU0VMRUNUT1I/IVwiKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBzdGFydENvbnRhaW5lciA9IHN0YXJ0RWxlbWVudDtcbiAgaWYgKHJhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleCA+PSAwKSB7XG4gICAgaWYgKFxuICAgICAgcmFuZ2VJbmZvLnN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49XG4gICAgICBzdGFydEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uc3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXggPj0gc3RhcnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoPyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXJ0Q29udGFpbmVyID1cbiAgICAgIHN0YXJ0RWxlbWVudC5jaGlsZE5vZGVzW3JhbmdlSW5mby5zdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleF07XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gc3RhcnRDb250YWluZXIubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFPyFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbmRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yXG4gICk7XG4gIGlmICghZW5kRWxlbWVudCkge1xuICAgIGxvZyhcIl5eXiBjb252ZXJ0UmFuZ2VJbmZvIE5PIEVORCBFTEVNRU5UIENTUyBTRUxFQ1RPUj8hXCIpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGVuZENvbnRhaW5lciA9IGVuZEVsZW1lbnQ7XG4gIGlmIChyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IDApIHtcbiAgICBpZiAoXG4gICAgICByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGhcbiAgICApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgXCJeXl4gY29udmVydFJhbmdlSW5mbyByYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4ID49IGVuZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg/IVwiXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZW5kQ29udGFpbmVyID1cbiAgICAgIGVuZEVsZW1lbnQuY2hpbGROb2Rlc1tyYW5nZUluZm8uZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4XTtcbiAgICBpZiAoZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgbG9nKFwiXl5eIGNvbnZlcnRSYW5nZUluZm8gZW5kQ29udGFpbmVyLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERT8hXCIpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZU9yZGVyZWRSYW5nZShcbiAgICBzdGFydENvbnRhaW5lcixcbiAgICByYW5nZUluZm8uc3RhcnRPZmZzZXQsXG4gICAgZW5kQ29udGFpbmVyLFxuICAgIHJhbmdlSW5mby5lbmRPZmZzZXRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2F0aW9uMlJhbmdlSW5mbyhsb2NhdGlvbikge1xuICBjb25zdCBsb2NhdGlvbnMgPSBsb2NhdGlvbi5sb2NhdGlvbnM7XG4gIGNvbnN0IGRvbVJhbmdlID0gbG9jYXRpb25zLmRvbVJhbmdlO1xuICBjb25zdCBzdGFydCA9IGRvbVJhbmdlLnN0YXJ0O1xuICBjb25zdCBlbmQgPSBkb21SYW5nZS5lbmQ7XG5cbiAgcmV0dXJuIHtcbiAgICBlbmRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXg6IGVuZC50ZXh0Tm9kZUluZGV4LFxuICAgIGVuZENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvcjogZW5kLmNzc1NlbGVjdG9yLFxuICAgIGVuZE9mZnNldDogZW5kLm9mZnNldCxcbiAgICBzdGFydENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleDogc3RhcnQudGV4dE5vZGVJbmRleCxcbiAgICBzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3Rvcjogc3RhcnQuY3NzU2VsZWN0b3IsXG4gICAgc3RhcnRPZmZzZXQ6IHN0YXJ0Lm9mZnNldCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9nKCkge1xuICBpZiAoZGVidWcpIHtcbiAgICBsb2dOYXRpdmUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxufVxuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gQmFzZSBzY3JpcHQgdXNlZCBieSBib3RoIHJlZmxvd2FibGUgYW5kIGZpeGVkIGxheW91dCByZXNvdXJjZXMuXG5cbmltcG9ydCBcIi4vZ2VzdHVyZXNcIjtcbmltcG9ydCB7XG4gIHJlbW92ZVByb3BlcnR5LFxuICBzY3JvbGxMZWZ0LFxuICBzY3JvbGxSaWdodCxcbiAgc2Nyb2xsVG9FbmQsXG4gIHNjcm9sbFRvSWQsXG4gIHNjcm9sbFRvUG9zaXRpb24sXG4gIHNjcm9sbFRvU3RhcnQsXG4gIHNjcm9sbFRvVGV4dCxcbiAgc2V0UHJvcGVydHksXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVBbm5vdGF0aW9uLFxuICBjcmVhdGVIaWdobGlnaHQsXG4gIGRlc3Ryb3lIaWdobGlnaHQsXG4gIGdldEN1cnJlbnRTZWxlY3Rpb25JbmZvLFxuICBnZXRTZWxlY3Rpb25SZWN0LFxuICByZWN0YW5nbGVGb3JIaWdobGlnaHRXaXRoSUQsXG4gIHNldFNjcm9sbE1vZGUsXG59IGZyb20gXCIuL2hpZ2hsaWdodFwiO1xuaW1wb3J0IHsgZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IgfSBmcm9tIFwiLi9kb21cIjtcbmltcG9ydCB7IGdldEN1cnJlbnRTZWxlY3Rpb24gfSBmcm9tIFwiLi9zZWxlY3Rpb25cIjtcbmltcG9ydCB7IGdldERlY29yYXRpb25zLCByZWdpc3RlclRlbXBsYXRlcyB9IGZyb20gXCIuL2RlY29yYXRvclwiO1xuXG4vLyBQdWJsaWMgQVBJIHVzZWQgYnkgdGhlIG5hdmlnYXRvci5cbndpbmRvdy5yZWFkaXVtID0ge1xuICAvLyB1dGlsc1xuICBzY3JvbGxUb0lkOiBzY3JvbGxUb0lkLFxuICBzY3JvbGxUb1Bvc2l0aW9uOiBzY3JvbGxUb1Bvc2l0aW9uLFxuICBzY3JvbGxUb1RleHQ6IHNjcm9sbFRvVGV4dCxcbiAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgc2Nyb2xsUmlnaHQ6IHNjcm9sbFJpZ2h0LFxuICBzY3JvbGxUb1N0YXJ0OiBzY3JvbGxUb1N0YXJ0LFxuICBzY3JvbGxUb0VuZDogc2Nyb2xsVG9FbmQsXG4gIHNldFByb3BlcnR5OiBzZXRQcm9wZXJ0eSxcbiAgcmVtb3ZlUHJvcGVydHk6IHJlbW92ZVByb3BlcnR5LFxuXG4gIC8vIHNlbGVjdGlvblxuICBnZXRDdXJyZW50U2VsZWN0aW9uOiBnZXRDdXJyZW50U2VsZWN0aW9uLFxuXG4gIC8vIGRlY29yYXRpb25cbiAgcmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzOiByZWdpc3RlclRlbXBsYXRlcyxcbiAgZ2V0RGVjb3JhdGlvbnM6IGdldERlY29yYXRpb25zLFxuXG4gIC8vIERPTVxuICBmaW5kRmlyc3RWaXNpYmxlTG9jYXRvcjogZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IsXG59O1xuXG4vLyBMZWdhY3kgaGlnaGxpZ2h0cyBBUEkuXG53aW5kb3cuY3JlYXRlQW5ub3RhdGlvbiA9IGNyZWF0ZUFubm90YXRpb247XG53aW5kb3cuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xud2luZG93LmRlc3Ryb3lIaWdobGlnaHQgPSBkZXN0cm95SGlnaGxpZ2h0O1xud2luZG93LmdldEN1cnJlbnRTZWxlY3Rpb25JbmZvID0gZ2V0Q3VycmVudFNlbGVjdGlvbkluZm87XG53aW5kb3cuZ2V0U2VsZWN0aW9uUmVjdCA9IGdldFNlbGVjdGlvblJlY3Q7XG53aW5kb3cucmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEID0gcmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEO1xud2luZG93LnNldFNjcm9sbE1vZGUgPSBzZXRTY3JvbGxNb2RlO1xuIiwiLy9cbi8vICBDb3B5cmlnaHQgMjAyMSBSZWFkaXVtIEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRC1zdHlsZSBsaWNlbnNlXG4vLyAgYXZhaWxhYmxlIGluIHRoZSB0b3AtbGV2ZWwgTElDRU5TRSBmaWxlIG9mIHRoZSBwcm9qZWN0LlxuLy9cblxuLy8gU2NyaXB0IHVzZWQgZm9yIHJlZmxvd2FibGUgcmVzb3VyY2VzLlxuXG5pbXBvcnQgXCIuL2luZGV4XCI7XG5cbndpbmRvdy5yZWFkaXVtLmlzUmVmbG93YWJsZSA9IHRydWU7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgLy8gU2V0dXBzIHRoZSBgdmlld3BvcnRgIG1ldGEgdGFnIHRvIGRpc2FibGUgem9vbWluZy5cbiAgbGV0IG1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgbWV0YS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidmlld3BvcnRcIik7XG4gIG1ldGEuc2V0QXR0cmlidXRlKFxuICAgIFwiY29udGVudFwiLFxuICAgIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8sIHNocmluay10by1maXQ9bm9cIlxuICApO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGEpO1xufSk7XG4iXSwibmFtZXMiOlsiYXBwcm94U2VhcmNoIiwic2VhcmNoIiwidGV4dCIsInN0ciIsIm1heEVycm9ycyIsIm1hdGNoUG9zIiwiZXhhY3RNYXRjaGVzIiwiaW5kZXhPZiIsInB1c2giLCJzdGFydCIsImVuZCIsImxlbmd0aCIsImVycm9ycyIsInRleHRNYXRjaFNjb3JlIiwibWF0Y2hlcyIsIm1hdGNoUXVvdGUiLCJxdW90ZSIsImNvbnRleHQiLCJNYXRoIiwibWluIiwic2NvcmVNYXRjaCIsIm1hdGNoIiwicXVvdGVXZWlnaHQiLCJwcmVmaXhXZWlnaHQiLCJzdWZmaXhXZWlnaHQiLCJwb3NXZWlnaHQiLCJxdW90ZVNjb3JlIiwicHJlZml4U2NvcmUiLCJwcmVmaXgiLCJzbGljZSIsIm1heCIsInN1ZmZpeFNjb3JlIiwic3VmZml4IiwicG9zU2NvcmUiLCJoaW50Iiwib2Zmc2V0IiwiYWJzIiwicmF3U2NvcmUiLCJtYXhTY29yZSIsIm5vcm1hbGl6ZWRTY29yZSIsInNjb3JlZE1hdGNoZXMiLCJtYXAiLCJtIiwic2NvcmUiLCJzb3J0IiwiYSIsImIiLCJub2RlVGV4dExlbmd0aCIsIm5vZGUiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJURVhUX05PREUiLCJ0ZXh0Q29udGVudCIsInByZXZpb3VzU2libGluZ3NUZXh0TGVuZ3RoIiwic2libGluZyIsInByZXZpb3VzU2libGluZyIsInJlc29sdmVPZmZzZXRzIiwiZWxlbWVudCIsIm9mZnNldHMiLCJuZXh0T2Zmc2V0Iiwic2hpZnQiLCJub2RlSXRlciIsIm93bmVyRG9jdW1lbnQiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwicmVzdWx0cyIsImN1cnJlbnROb2RlIiwibmV4dE5vZGUiLCJ0ZXh0Tm9kZSIsInVuZGVmaW5lZCIsImRhdGEiLCJSYW5nZUVycm9yIiwiUkVTT0xWRV9GT1JXQVJEUyIsIlJFU09MVkVfQkFDS1dBUkRTIiwiVGV4dFBvc2l0aW9uIiwiRXJyb3IiLCJwYXJlbnQiLCJjb250YWlucyIsImVsIiwicGFyZW50RWxlbWVudCIsIm9wdGlvbnMiLCJlcnIiLCJkaXJlY3Rpb24iLCJ0dyIsImRvY3VtZW50IiwiY3JlYXRlVHJlZVdhbGtlciIsImdldFJvb3ROb2RlIiwiZm9yd2FyZHMiLCJwcmV2aW91c05vZGUiLCJmcm9tUG9pbnQiLCJ0ZXh0T2Zmc2V0IiwiY2hpbGROb2RlcyIsImkiLCJUZXh0UmFuZ2UiLCJyZWxhdGl2ZVRvIiwicmVzb2x2ZSIsInJhbmdlIiwiUmFuZ2UiLCJzZXRTdGFydCIsInNldEVuZCIsInN0YXJ0Q29udGFpbmVyIiwic3RhcnRPZmZzZXQiLCJlbmRDb250YWluZXIiLCJlbmRPZmZzZXQiLCJyb290Iiwibm9kZUZyb21YUGF0aCIsInhwYXRoRnJvbU5vZGUiLCJSYW5nZUFuY2hvciIsIm5vcm1hbGl6ZWRSYW5nZSIsImZyb21SYW5nZSIsInRvUmFuZ2UiLCJ0ZXh0UmFuZ2UiLCJ0eXBlIiwic2VsZWN0b3IiLCJzdGFydFBvcyIsImZyb21DaGFyT2Zmc2V0IiwiZW5kUG9zIiwiVGV4dFBvc2l0aW9uQW5jaG9yIiwiZnJvbU9mZnNldHMiLCJUZXh0UXVvdGVBbmNob3IiLCJleGFjdCIsInRvUG9zaXRpb25BbmNob3IiLCJjb250ZXh0TGVuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQW5kcm9pZCIsImxvZ0Vycm9yIiwibWVzc2FnZSIsImZpbGVuYW1lIiwibGluZW5vIiwib2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImFwcGVuZFZpcnR1YWxDb2x1bW5JZk5lZWRlZCIsIm9ic2VydmUiLCJib2R5Iiwib25WaWV3cG9ydFdpZHRoQ2hhbmdlZCIsInNuYXBDdXJyZW50T2Zmc2V0IiwiaWQiLCJ2aXJ0dWFsQ29sIiwiZ2V0RWxlbWVudEJ5SWQiLCJpc1Njcm9sbE1vZGVFbmFibGVkIiwiZ2V0Q29sdW1uQ291bnRQZXJTY3JlZW4iLCJyZW1vdmUiLCJkb2N1bWVudFdpZHRoIiwic2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbFdpZHRoIiwiY29sQ291bnQiLCJwYWdlV2lkdGgiLCJoYXNPZGRDb2xDb3VudCIsInJvdW5kIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsInN0eWxlIiwiYnJlYWtCZWZvcmUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsIndpZHRoIiwiZ2V0Vmlld3BvcnRXaWR0aCIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRQcm9wZXJ0eSIsInBhcnNlSW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJ0b1N0cmluZyIsInRyaW0iLCJpc1JUTCIsImRpciIsInRvTG93ZXJDYXNlIiwic2Nyb2xsVG9JZCIsInNjcm9sbFRvUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFRvUG9zaXRpb24iLCJwb3NpdGlvbiIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsImZhY3RvciIsInNjcm9sbExlZnQiLCJzbmFwT2Zmc2V0Iiwic2Nyb2xsVG9UZXh0IiwicmFuZ2VGcm9tTG9jYXRvciIsInNjcm9sbFRvUmFuZ2UiLCJyZWN0IiwidG9wIiwic2Nyb2xsWSIsImlubmVySGVpZ2h0IiwibGVmdCIsInNjcm9sbFgiLCJzY3JvbGxUb1N0YXJ0Iiwic2Nyb2xsVG8iLCJzY3JvbGxUb0VuZCIsIm1pbk9mZnNldCIsInNjcm9sbFRvT2Zmc2V0Iiwic2Nyb2xsUmlnaHQiLCJtYXhPZmZzZXQiLCJjdXJyZW50T2Zmc2V0IiwiZGlmZiIsInZhbHVlIiwiZGVsdGEiLCJsb2NhdG9yIiwiaGlnaGxpZ2h0IiwibG9jYXRpb25zIiwiY3NzU2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yIiwiYmVmb3JlIiwiYWZ0ZXIiLCJlIiwia2V5IiwicmVtb3ZlUHJvcGVydHkiLCJsb2ciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcmd1bWVudHMiLCJqb2luIiwibG9nTmF0aXZlIiwiZGVidWciLCJ0b05hdGl2ZVJlY3QiLCJwaXhlbFJhdGlvIiwiaGVpZ2h0IiwicmlnaHQiLCJib3R0b20iLCJnZXRDbGllbnRSZWN0c05vT3ZlcmxhcCIsImRvTm90TWVyZ2VIb3Jpem9udGFsbHlBbGlnbmVkUmVjdHMiLCJjbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzIiwidG9sZXJhbmNlIiwib3JpZ2luYWxSZWN0cyIsInJhbmdlQ2xpZW50UmVjdCIsIm1lcmdlZFJlY3RzIiwibWVyZ2VUb3VjaGluZ1JlY3RzIiwibm9Db250YWluZWRSZWN0cyIsInJlbW92ZUNvbnRhaW5lZFJlY3RzIiwibmV3UmVjdHMiLCJyZXBsYWNlT3ZlcmxhcGluZ1JlY3RzIiwibWluQXJlYSIsImoiLCJiaWdFbm91Z2giLCJzcGxpY2UiLCJyZWN0cyIsInJlY3QxIiwicmVjdDIiLCJyZWN0c0xpbmVVcFZlcnRpY2FsbHkiLCJhbG1vc3RFcXVhbCIsInJlY3RzTGluZVVwSG9yaXpvbnRhbGx5IiwiaG9yaXpvbnRhbEFsbG93ZWQiLCJhbGlnbmVkIiwiY2FuTWVyZ2UiLCJyZWN0c1RvdWNoT3JPdmVybGFwIiwiZmlsdGVyIiwicmVwbGFjZW1lbnRDbGllbnRSZWN0IiwiZ2V0Qm91bmRpbmdSZWN0IiwicmVjdHNUb0tlZXAiLCJTZXQiLCJkZWxldGUiLCJwb3NzaWJseUNvbnRhaW5pbmdSZWN0IiwiaGFzIiwicmVjdENvbnRhaW5zIiwiZnJvbSIsInJlY3RDb250YWluc1BvaW50IiwieCIsInkiLCJ0b0FkZCIsInRvUmVtb3ZlIiwic3VidHJhY3RSZWN0czEiLCJyZWN0U3VidHJhY3QiLCJzdWJ0cmFjdFJlY3RzMiIsImFwcGx5IiwicmVjdEludGVyc2VjdGVkIiwicmVjdEludGVyc2VjdCIsInJlY3RBIiwicmVjdEIiLCJyZWN0QyIsInJlY3REIiwibWF4TGVmdCIsIm1pblJpZ2h0IiwibWF4VG9wIiwibWluQm90dG9tIiwic3R5bGVzIiwiTWFwIiwiZ3JvdXBzIiwibGFzdEdyb3VwSWQiLCJyZWdpc3RlclRlbXBsYXRlcyIsIm5ld1N0eWxlcyIsInN0eWxlc2hlZXQiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0Iiwic3R5bGVFbGVtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJnZXREZWNvcmF0aW9ucyIsImdyb3VwTmFtZSIsImdyb3VwIiwiZ2V0IiwiRGVjb3JhdGlvbkdyb3VwIiwiaGFuZGxlRGVjb3JhdGlvbkNsaWNrRXZlbnQiLCJjbGlja0V2ZW50Iiwic2l6ZSIsImZpbmRUYXJnZXQiLCJncm91cENvbnRlbnQiLCJpdGVtcyIsInJldmVyc2UiLCJpdGVtIiwiY2xpY2thYmxlRWxlbWVudHMiLCJ0b0pTT04iLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsIm9uRGVjb3JhdGlvbkFjdGl2YXRlZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWNvcmF0aW9uIiwiY2xpY2siLCJncm91cElkIiwibGFzdEl0ZW1JZCIsImNvbnRhaW5lciIsImFkZCIsImxheW91dCIsImRlY29yYXRpb25JZCIsImluZGV4IiwiZmluZEluZGV4IiwidXBkYXRlIiwiY2xlYXIiLCJjbGVhckNvbnRhaW5lciIsInJlcXVlc3RMYXlvdXQiLCJmb3JFYWNoIiwiZ3JvdXBDb250YWluZXIiLCJyZXF1aXJlQ29udGFpbmVyIiwiaXRlbUNvbnRhaW5lciIsInZpZXdwb3J0V2lkdGgiLCJpbm5lcldpZHRoIiwiY29sdW1uQ291bnQiLCJ4T2Zmc2V0IiwieU9mZnNldCIsInBvc2l0aW9uRWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImZsb29yIiwiZWxlbWVudFRlbXBsYXRlIiwidGVtcGxhdGUiLCJjb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlcnJvciIsInIxIiwicjIiLCJjbGllbnRSZWN0IiwibGluZSIsImNsb25lTm9kZSIsImFwcGVuZCIsImJvdW5kcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjaGlsZHJlbiIsImxhc3RTaXplIiwiY2xpZW50V2lkdGgiLCJjbGllbnRIZWlnaHQiLCJvbkNsaWNrIiwiYmluZERyYWdHZXN0dXJlIiwiZ2V0U2VsZWN0aW9uIiwiaXNDb2xsYXBzZWQiLCJkZWZhdWx0UHJldmVudGVkIiwidGFyZ2V0RWxlbWVudCIsIm91dGVySFRNTCIsImludGVyYWN0aXZlRWxlbWVudCIsIm5lYXJlc3RJbnRlcmFjdGl2ZUVsZW1lbnQiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIm9uVGFwIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJvblN0YXJ0IiwicGFzc2l2ZSIsIm9uRW5kIiwib25Nb3ZlIiwic3RhdGUiLCJpc1N0YXJ0aW5nRHJhZyIsInN0YXJ0WCIsInRvdWNoZXMiLCJzdGFydFkiLCJjdXJyZW50WCIsImN1cnJlbnRZIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJpbnRlcmFjdGl2ZVRhZ3MiLCJub2RlTmFtZSIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsIlJPT1RfQ0xBU1NfUkVEVUNFX01PVElPTiIsIlJPT1RfQ0xBU1NfTk9fRk9PVE5PVEVTIiwiUE9QVVBfRElBTE9HX0NMQVNTIiwiRk9PVE5PVEVTX0NPTlRBSU5FUl9DTEFTUyIsIkZPT1ROT1RFU19DTE9TRV9CVVRUT05fQ0xBU1MiLCJGT09UTk9URV9GT1JDRV9TSE9XIiwiVFRTX0lEX1BSRVZJT1VTIiwiVFRTX0lEX05FWFQiLCJUVFNfSURfU0xJREVSIiwiVFRTX0lEX0FDVElWRV9XT1JEIiwiVFRTX0lEX0NPTlRBSU5FUiIsIlRUU19JRF9JTkZPIiwiVFRTX05BVl9CVVRUT05fQ0xBU1MiLCJUVFNfSURfU1BFQUtJTkdfRE9DX0VMRU1FTlQiLCJUVFNfQ0xBU1NfSU5KRUNURURfU1BBTiIsIlRUU19DTEFTU19JTkpFQ1RFRF9TVUJTUEFOIiwiVFRTX0lEX0lOSkVDVEVEX1BBUkVOVCIsIklEX0hJR0hMSUdIVFNfQ09OVEFJTkVSIiwiSURfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQ09OVEFJTkVSIiwiQ0xBU1NfQU5OT1RBVElPTl9DT05UQUlORVIiLCJDTEFTU19ISUdITElHSFRfQVJFQSIsIkNMQVNTX0FOTk9UQVRJT05fQVJFQSIsIkNMQVNTX0hJR0hMSUdIVF9CT1VORElOR19BUkVBIiwiQ0xBU1NfQU5OT1RBVElPTl9CT1VORElOR19BUkVBIiwiX2JsYWNrbGlzdElkQ2xhc3NGb3JDRkkiLCJDTEFTU19QQUdJTkFURUQiLCJJU19ERVYiLCJfaGlnaGxpZ2h0cyIsIl9oaWdobGlnaHRzQ29udGFpbmVyIiwiX2Fubm90YXRpb25Db250YWluZXIiLCJsYXN0TW91c2VEb3duWCIsImxhc3RNb3VzZURvd25ZIiwiYm9keUV2ZW50TGlzdGVuZXJzU2V0IiwiVVNFX1NWRyIsIkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9PUEFDSVRZIiwiQUxUX0JBQ0tHUk9VTkRfQ09MT1JfT1BBQ0lUWSIsIkRFQlVHX1ZJU1VBTFMiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJBTk5PVEFUSU9OX1dJRFRIIiwicmVzZXRIaWdobGlnaHRCb3VuZGluZ1N0eWxlIiwiX3dpbiIsImhpZ2hsaWdodEJvdW5kaW5nIiwib3V0bGluZSIsInNldEhpZ2hsaWdodEFyZWFTdHlsZSIsIndpbiIsImhpZ2hsaWdodEFyZWFzIiwidXNlU1ZHIiwiaGlnaGxpZ2h0QXJlYSIsImlzU1ZHIiwibmFtZXNwYWNlVVJJIiwiU1ZHX1hNTF9OQU1FU1BBQ0UiLCJvcGFjaXR5IiwiY29sb3IiLCJyZXNldEhpZ2hsaWdodEFyZWFTdHlsZSIsInBhcmVudE5vZGUiLCJmaW5kIiwiaCIsInByb2Nlc3NUb3VjaEV2ZW50IiwiZXYiLCJzY3JvbGxFbGVtZW50IiwiZ2V0U2Nyb2xsaW5nRWxlbWVudCIsImNoYW5nZWRUb3VjaGVzIiwicGFnaW5hdGVkIiwiaXNQYWdpbmF0ZWQiLCJib2R5UmVjdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImZvdW5kSGlnaGxpZ2h0IiwiZm91bmRFbGVtZW50IiwiZm91bmRSZWN0IiwiaGlnaGxpZ2h0UGFyZW50IiwiaGl0IiwiaGlnaGxpZ2h0RnJhZ21lbnRzIiwiaGlnaGxpZ2h0RnJhZ21lbnQiLCJ3aXRoUmVjdCIsImhpZ2hsaWdodEJvdW5kaW5ncyIsImFsbEhpZ2hsaWdodEFyZWFzIiwiZm91bmRFbGVtZW50SGlnaGxpZ2h0QXJlYXMiLCJmb3VuZEVsZW1lbnRIaWdobGlnaHRCb3VuZGluZyIsImFsbEhpZ2hsaWdodEJvdW5kaW5ncyIsInNldEhpZ2hsaWdodEJvdW5kaW5nU3R5bGUiLCJzY3JlZW5XaWR0aCIsIm91dGVyV2lkdGgiLCJzY3JlZW5IZWlnaHQiLCJvdXRlckhlaWdodCIsInBheWxvYWQiLCJwcm9jZXNzIiwiZWxlY3Ryb25fMSIsImlwY1JlbmRlcmVyIiwic2VuZFRvSG9zdCIsIlIyX0VWRU5UX0hJR0hMSUdIVF9DTElDSyIsIndlYmtpdFVSTCIsImNvbnNvbGUiLCJpbmNsdWRlcyIsImhpZ2hsaWdodEFubm90YXRpb25NYXJrQWN0aXZhdGVkIiwid2Via2l0IiwibWVzc2FnZUhhbmRsZXJzIiwicG9zdE1lc3NhZ2UiLCJoaWdobGlnaHRBY3RpdmF0ZWQiLCJwcm9jZXNzTW91c2VFdmVudCIsInRvdWNoZWRQb3NpdGlvbiIsInRvUHJlc2VydmUiLCJ0b0NoZWNrIiwiY2hlY2tPdmVybGFwcyIsInN0aWxsT3ZlcmxhcGluZ1JlY3RzIiwiaGFzMSIsImhhczIiLCJ4T3ZlcmxhcCIsImdldFJlY3RPdmVybGFwWCIsInlPdmVybGFwIiwiZ2V0UmVjdE92ZXJsYXBZIiwicmFuZ2VDbGllbnRSZWN0cyIsImdldENsaWVudFJlY3RzTm9PdmVybGFwXyIsImNsYXNzTGlzdCIsImVuc3VyZUNvbnRhaW5lciIsImFubm90YXRpb25GbGFnIiwidG91Y2hFbmQiLCJoaWRlQWxsaGlnaGxpZ2h0cyIsImRlc3Ryb3lBbGxoaWdobGlnaHRzIiwiZGVzdHJveUhpZ2hsaWdodCIsIl9kb2N1bWVudCIsImhpZ2hsaWdodENvbnRhaW5lciIsImlzQ2ZpVGV4dE5vZGUiLCJnZXRDaGlsZFRleHROb2RlQ2ZpSW5kZXgiLCJjaGlsZCIsImZvdW5kIiwidGV4dE5vZGVJbmRleCIsInByZXZpb3VzV2FzRWxlbWVudCIsImNoaWxkTm9kZSIsImlzVGV4dCIsImdldENvbW1vbkFuY2VzdG9yRWxlbWVudCIsIm5vZGUxIiwibm9kZTIiLCJub2RlMUVsZW1lbnRBbmNlc3RvckNoYWluIiwibm9kZTJFbGVtZW50QW5jZXN0b3JDaGFpbiIsImNvbW1vbkFuY2VzdG9yIiwibm9kZTFFbGVtZW50QW5jZXN0b3IiLCJub2RlMkVsZW1lbnRBbmNlc3RvciIsImZ1bGxRdWFsaWZpZWRTZWxlY3RvciIsImxvd2VyQ2FzZU5hbWUiLCJsb2NhbE5hbWUiLCJjc3NQYXRoIiwiZ2V0Q3VycmVudFNlbGVjdGlvbkluZm8iLCJzZWxlY3Rpb24iLCJyYXdUZXh0IiwiY2xlYW5UZXh0IiwicmVwbGFjZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsImNyZWF0ZU9yZGVyZWRSYW5nZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sbGFwc2VkIiwicmFuZ2VJbmZvIiwiY29udmVydFJhbmdlIiwiY29tcHV0ZUNGSSIsInJlc3RvcmVkUmFuZ2UiLCJjb252ZXJ0UmFuZ2VJbmZvIiwiZHVtcERlYnVnIiwiZ2V0Q3NzU2VsZWN0b3IiLCJyYW5nZUluZm8yTG9jYXRpb24iLCJjaGVja0JsYWNrbGlzdGVkIiwiYmxhY2tsaXN0ZWRJZCIsImJsYWNrbGlzdGVkQ2xhc3MiLCJvcHRpbWl6ZWQiLCJzdGVwcyIsImNvbnRleHROb2RlIiwic3RlcCIsIl9jc3NQYXRoU3RlcCIsImlzVGFyZ2V0Tm9kZSIsInByZWZpeGVkRWxlbWVudENsYXNzTmFtZXMiLCJuZCIsImNsYXNzQXR0cmlidXRlIiwic3BsaXQiLCJCb29sZWFuIiwibm0iLCJpZFNlbGVjdG9yIiwiaWRkIiwiZXNjYXBlSWRlbnRpZmllcklmTmVlZGVkIiwiaWRlbnQiLCJpc0NTU0lkZW50aWZpZXIiLCJzaG91bGRFc2NhcGVGaXJzdCIsInRlc3QiLCJsYXN0SW5kZXgiLCJjIiwiaWkiLCJpc0NTU0lkZW50Q2hhciIsImVzY2FwZUFzY2lpQ2hhciIsImlzTGFzdCIsInRvSGV4Qnl0ZSIsImhleEJ5dGUiLCJjaGFyQ29kZUF0IiwiRE9DVU1FTlRfTk9ERSIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5XyIsInByZWZpeGVkT3duQ2xhc3NOYW1lc0FycmF5IiwiYXJySXRlbSIsIm5lZWRzQ2xhc3NOYW1lcyIsIm5lZWRzTnRoQ2hpbGQiLCJvd25JbmRleCIsImVsZW1lbnRJbmRleCIsInNpYmxpbmdzIiwic2libGluZ05hbWUiLCJvd25DbGFzc05hbWVzIiwib3duQ2xhc3NOYW1lQ291bnQiLCJzaWJsaW5nQ2xhc3NOYW1lc0FycmF5XyIsInNpYmxpbmdDbGFzc05hbWVzQXJyYXkiLCJzaWJsaW5nQ2xhc3MiLCJpbmQiLCJyZXN1bHQiLCJwcmVmaXhlZE5hbWUiLCJzdWJzdHIiLCJjZmkiLCJjdXJyZW50RWxlbWVudCIsImJsYWNrbGlzdGVkIiwiY3VycmVudEVsZW1lbnRQYXJlbnRDaGlsZHJlbiIsImN1cnJlbnRFbGVtZW50SW5kZXgiLCJjZmlJbmRleCIsIl9jcmVhdGVIaWdobGlnaHQiLCJwb2ludGVySW50ZXJhY3Rpb24iLCJsb2NhdGlvbjJSYW5nZUluZm8iLCJ1bmlxdWVTdHIiLCJzdGFydENvbnRhaW5lckVsZW1lbnRDc3NTZWxlY3RvciIsInN0YXJ0Q29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiZW5kQ29udGFpbmVyRWxlbWVudENzc1NlbGVjdG9yIiwiZW5kQ29udGFpbmVyQ2hpbGRUZXh0Tm9kZUluZGV4IiwiaGFzaCIsInJlcXVpcmUiLCJzaGEyNTZIZXgiLCJzaGEyNTYiLCJkaWdlc3QiLCJjcmVhdGVIaWdobGlnaHREb20iLCJjcmVhdGVIaWdobGlnaHQiLCJzZWxlY3Rpb25JbmZvIiwiY3JlYXRlQW5ub3RhdGlvbiIsInNjYWxlIiwiUkVBRElVTTIiLCJpc0ZpeGVkTGF5b3V0IiwiZnhsVmlld3BvcnRTY2FsZSIsImhpZ2hsaWdodHNDb250YWluZXIiLCJkcmF3VW5kZXJsaW5lIiwiZHJhd1N0cmlrZVRocm91Z2giLCJoaWdobGlnaHRBcmVhU1ZHRG9jRnJhZyIsInJvdW5kZWRDb3JuZXIiLCJ1bmRlcmxpbmVUaGlja25lc3MiLCJzdHJpa2VUaHJvdWdoTGluZVRoaWNrbmVzcyIsImV4dHJhIiwicmFuZ2VBbm5vdGF0aW9uQm91bmRpbmdDbGllbnRSZWN0IiwiZnJhbWVGb3JIaWdobGlnaHRBbm5vdGF0aW9uTWFya1dpdGhJRCIsImFubm90YXRpb25PZmZzZXQiLCJib3JkZXJUaGlja25lc3MiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaGlnaGxpZ2h0QXJlYVNWR1JlY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJoaWdobGlnaHRBcmVhU1ZHTGluZSIsImxpbmVPZmZzZXQiLCJyZ2IiLCJyYW5kb20iLCJyIiwiZyIsImhpZ2hsaWdodEFyZWFMaW5lIiwiaGlnaGxpZ2h0QXJlYVNWRyIsIm92ZXJmbG93IiwicmFuZ2VCb3VuZGluZ0NsaWVudFJlY3QiLCJzdGFydE5vZGUiLCJlbmROb2RlIiwicmFuZ2VSZXZlcnNlIiwiY29tcHV0ZUVsZW1lbnRDRkkiLCJzdGFydElzRWxlbWVudCIsInN0YXJ0Q29udGFpbmVyRWxlbWVudCIsImVuZElzRWxlbWVudCIsImVuZENvbnRhaW5lckVsZW1lbnQiLCJjb21tb25FbGVtZW50QW5jZXN0b3IiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsInJhbmdlQ29tbW9uQW5jZXN0b3JFbGVtZW50Iiwicm9vdEVsZW1lbnRDZmkiLCJzdGFydEVsZW1lbnRDZmkiLCJlbmRFbGVtZW50Q2ZpIiwic3RhcnRFbGVtZW50T3JUZXh0Q2ZpIiwic3RhcnRDb250YWluZXJDaGlsZFRleHROb2RlSW5kZXhGb3JDZmkiLCJjZmlUZXh0Tm9kZUluZGV4IiwiY2ZpSW5kZXhPZkxhc3RFbGVtZW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJsYXN0Q2hpbGROb2RlIiwiZW5kRWxlbWVudE9yVGV4dENmaSIsImVuZENvbnRhaW5lckNoaWxkVGV4dE5vZGVJbmRleEZvckNmaSIsInN0YXJ0RWxlbWVudCIsImVuZEVsZW1lbnQiLCJmcmFtZUZvckhpZ2hsaWdodFdpdGhJRCIsInRvcENsaWVudFJlY3QiLCJtYXhIZWlnaHQiLCJuZXdUb3AiLCJib3VuZGluZ0FyZWFzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImxlbiIsImJvdW5kaW5nQXJlYSIsImhpZ2hsaWdodFdpdGhJRCIsInBhcnRpYWxDZmkiLCJkb21SYW5nZSIsImxvY2F0aW9uIiwicmVjdGFuZ2xlRm9ySGlnaGxpZ2h0V2l0aElEIiwiZ2V0U2VsZWN0aW9uUmVjdCIsInNlbCIsImhhbmRsZUJvdW5kcyIsInNldFNjcm9sbE1vZGUiLCJmbGFnIiwiZmluZEZpcnN0VmlzaWJsZUxvY2F0b3IiLCJmaW5kRWxlbWVudCIsImhyZWYiLCJyb290RWxlbWVudCIsImVsZW1lbnRSZWxhdGl2ZVBvc2l0aW9uIiwic2hvdWxkSWdub3JlRWxlbWVudCIsImRvbVJlY3QiLCJyZWFkaXVtIiwiZWxTdHlsZSIsImRpc3BsYXkiLCJtYXRjaEFsbCIsInNoaW0iLCJnZXRDdXJyZW50U2VsZWN0aW9uIiwiZ2V0Q3VycmVudFNlbGVjdGlvblRleHQiLCJjbGVhbkhpZ2hsaWdodCIsInNuaXBwZXRMZW5ndGgiLCJmaXJzdFdvcmRTdGFydCIsImxhc3RXb3JkRW5kIiwicG9wIiwicmVnaXN0ZXJEZWNvcmF0aW9uVGVtcGxhdGVzIiwiaXNSZWZsb3dhYmxlIiwibWV0YSIsImhlYWQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5232\n')},1924:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar callBind = __webpack_require__(5559);\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsSUFBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanM/NTQ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1924\n")},5559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTtBQUNsQyxtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzNlYjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5559\n")},4289:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keys = __webpack_require__(2215);\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDI4OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQkFBK0I7QUFDaEU7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanM/ZjM2NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4289\n")},1503:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = __webpack_require__(4149);\nvar isCallable = __webpack_require__(5320);\nvar isDate = __webpack_require__(8923);\nvar isSymbol = __webpack_require__(2636);\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUwMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLGFBQWEsbUJBQU8sQ0FBQyxJQUFnQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsSUFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9lczIwMTUuanM/NTk5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1503\n")},2116:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = __webpack_require__(4149);\n\nvar isCallable = __webpack_require__(5320);\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjExNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF1Qjs7QUFFakQsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzPzJmMTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy04LjEyLjhcbnZhciBFUzVpbnRlcm5hbFNsb3RzID0ge1xuXHQnW1tEZWZhdWx0VmFsdWVdXSc6IGZ1bmN0aW9uIChPKSB7XG5cdFx0dmFyIGFjdHVhbEhpbnQ7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gYXJndW1lbnRzWzFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhY3R1YWxIaW50ID0gdG9TdHIuY2FsbChPKSA9PT0gJ1tvYmplY3QgRGF0ZV0nID8gU3RyaW5nIDogTnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChhY3R1YWxIaW50ID09PSBTdHJpbmcgfHwgYWN0dWFsSGludCA9PT0gTnVtYmVyKSB7XG5cdFx0XHR2YXIgbWV0aG9kcyA9IGFjdHVhbEhpbnQgPT09IFN0cmluZyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdFx0XHR2YXIgdmFsdWUsIGk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRpZiAoaXNDYWxsYWJsZShPW21ldGhvZHNbaV1dKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gT1ttZXRob2RzW2ldXSgpO1xuXHRcdFx0XHRcdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIGRlZmF1bHQgdmFsdWUnKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBbW0RlZmF1bHRWYWx1ZV1dIGhpbnQgc3VwcGxpZWQnKTtcblx0fVxufTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOS4xXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2116\n")},4149:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDE0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLXRvLXByaW1pdGl2ZS9oZWxwZXJzL2lzUHJpbWl0aXZlLmpzPzRkZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4149\n")},7648:function(module){"use strict";eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQSwrRUFBK0Usc0NBQXNDOztBQUVySDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcz82ODhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7648\n")},8612:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(7648);\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODYxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanM/MGY3YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8612\n")},210:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(1405)();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(8612);\nvar hasOwn = __webpack_require__(7642);\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz8wMGNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6IEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6IEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6IFJhbmdlRXJyb3IsXG5cdCclUmVmZXJlbmNlRXJyb3IlJzogUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogVVJJRXJyb3IsXG5cdCclV2Vha01hcCUnOiB0eXBlb2YgV2Vha01hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrTWFwLFxuXHQnJVdlYWtSZWYlJzogdHlwZW9mIFdlYWtSZWYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1JlZixcblx0JyVXZWFrU2V0JSc6IHR5cGVvZiBXZWFrU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtTZXRcbn07XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///210\n")},1405:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(5419);\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLElBQVM7O0FBRXJDO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz81MTU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1405\n")},5419:function(module){"use strict";eval("\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EsMkZBQTJGO0FBQzNGLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrRUFBa0U7QUFDbEUscUVBQXFFOztBQUVyRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVDQUF1Qzs7QUFFdkMsMkRBQTJEO0FBQzNELCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEMsMkVBQTJFOztBQUUzRSx5R0FBeUc7O0FBRXpHO0FBQ0EsNkNBQTZDOztBQUU3Qyw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/MTY5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5419\n")},6410:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(5419);\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQxMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFtQjs7QUFFNUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXMtdG9zdHJpbmd0YWcvc2hhbXMuanM/MDdhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6410\n")},7642:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(8612);\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzY0Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhcy9zcmMvaW5kZXguanM/YTBkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7642\n")},3715:function(__unused_webpack_module,exports,__webpack_require__){eval("var hash = exports;\n\nhash.utils = __webpack_require__(6436);\nhash.common = __webpack_require__(5772);\nhash.sha = __webpack_require__(9041);\nhash.ripemd = __webpack_require__(2949);\nhash.hmac = __webpack_require__(2344);\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcxNS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxhQUFhLG1CQUFPLENBQUMsSUFBYztBQUNuQyxjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBWTtBQUMvQixjQUFjLG1CQUFPLENBQUMsSUFBZTtBQUNyQyxZQUFZLG1CQUFPLENBQUMsSUFBYTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2guanM/N2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IGV4cG9ydHM7XG5cbmhhc2gudXRpbHMgPSByZXF1aXJlKCcuL2hhc2gvdXRpbHMnKTtcbmhhc2guY29tbW9uID0gcmVxdWlyZSgnLi9oYXNoL2NvbW1vbicpO1xuaGFzaC5zaGEgPSByZXF1aXJlKCcuL2hhc2gvc2hhJyk7XG5oYXNoLnJpcGVtZCA9IHJlcXVpcmUoJy4vaGFzaC9yaXBlbWQnKTtcbmhhc2guaG1hYyA9IHJlcXVpcmUoJy4vaGFzaC9obWFjJyk7XG5cbi8vIFByb3h5IGhhc2ggZnVuY3Rpb25zIHRvIHRoZSBtYWluIG9iamVjdFxuaGFzaC5zaGExID0gaGFzaC5zaGEuc2hhMTtcbmhhc2guc2hhMjU2ID0gaGFzaC5zaGEuc2hhMjU2O1xuaGFzaC5zaGEyMjQgPSBoYXNoLnNoYS5zaGEyMjQ7XG5oYXNoLnNoYTM4NCA9IGhhc2guc2hhLnNoYTM4NDtcbmhhc2guc2hhNTEyID0gaGFzaC5zaGEuc2hhNTEyO1xuaGFzaC5yaXBlbWQxNjAgPSBoYXNoLnJpcGVtZC5yaXBlbWQxNjA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3715\n")},5772:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTc3Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG9CQUFvQjtBQUNwQztBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvY29tbW9uLmpzP2VkYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG5mdW5jdGlvbiBCbG9ja0hhc2goKSB7XG4gIHRoaXMucGVuZGluZyA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1RvdGFsID0gMDtcbiAgdGhpcy5ibG9ja1NpemUgPSB0aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZTtcbiAgdGhpcy5vdXRTaXplID0gdGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplO1xuICB0aGlzLmhtYWNTdHJlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoO1xuICB0aGlzLnBhZExlbmd0aCA9IHRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoIC8gODtcbiAgdGhpcy5lbmRpYW4gPSAnYmlnJztcblxuICB0aGlzLl9kZWx0YTggPSB0aGlzLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMuX2RlbHRhMzIgPSB0aGlzLmJsb2NrU2l6ZSAvIDMyO1xufVxuZXhwb3J0cy5CbG9ja0hhc2ggPSBCbG9ja0hhc2g7XG5cbkJsb2NrSGFzaC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIC8vIENvbnZlcnQgbWVzc2FnZSB0byBhcnJheSwgcGFkIGl0LCBhbmQgam9pbiBpbnRvIDMyYml0IGJsb2Nrc1xuICBtc2cgPSB1dGlscy50b0FycmF5KG1zZywgZW5jKTtcbiAgaWYgKCF0aGlzLnBlbmRpbmcpXG4gICAgdGhpcy5wZW5kaW5nID0gbXNnO1xuICBlbHNlXG4gICAgdGhpcy5wZW5kaW5nID0gdGhpcy5wZW5kaW5nLmNvbmNhdChtc2cpO1xuICB0aGlzLnBlbmRpbmdUb3RhbCArPSBtc2cubGVuZ3RoO1xuXG4gIC8vIEVub3VnaCBkYXRhLCB0cnkgdXBkYXRpbmdcbiAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPj0gdGhpcy5fZGVsdGE4KSB7XG4gICAgbXNnID0gdGhpcy5wZW5kaW5nO1xuXG4gICAgLy8gUHJvY2VzcyBwZW5kaW5nIGRhdGEgaW4gYmxvY2tzXG4gICAgdmFyIHIgPSBtc2cubGVuZ3RoICUgdGhpcy5fZGVsdGE4O1xuICAgIHRoaXMucGVuZGluZyA9IG1zZy5zbGljZShtc2cubGVuZ3RoIC0gciwgbXNnLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMucGVuZGluZy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuXG4gICAgbXNnID0gdXRpbHMuam9pbjMyKG1zZywgMCwgbXNnLmxlbmd0aCAtIHIsIHRoaXMuZW5kaWFuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkgKz0gdGhpcy5fZGVsdGEzMilcbiAgICAgIHRoaXMuX3VwZGF0ZShtc2csIGksIGkgKyB0aGlzLl9kZWx0YTMyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKTtcbiAgYXNzZXJ0KHRoaXMucGVuZGluZyA9PT0gbnVsbCk7XG5cbiAgcmV0dXJuIHRoaXMuX2RpZ2VzdChlbmMpO1xufTtcblxuQmxvY2tIYXNoLnByb3RvdHlwZS5fcGFkID0gZnVuY3Rpb24gcGFkKCkge1xuICB2YXIgbGVuID0gdGhpcy5wZW5kaW5nVG90YWw7XG4gIHZhciBieXRlcyA9IHRoaXMuX2RlbHRhODtcbiAgdmFyIGsgPSBieXRlcyAtICgobGVuICsgdGhpcy5wYWRMZW5ndGgpICUgYnl0ZXMpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KGsgKyB0aGlzLnBhZExlbmd0aCk7XG4gIHJlc1swXSA9IDB4ODA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgazsgaSsrKVxuICAgIHJlc1tpXSA9IDA7XG5cbiAgLy8gQXBwZW5kIGxlbmd0aFxuICBsZW4gPDw9IDM7XG4gIGlmICh0aGlzLmVuZGlhbiA9PT0gJ2JpZycpIHtcbiAgICBmb3IgKHZhciB0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG5cbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAobGVuID4+PiAyNCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDgpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IGxlbiAmIDB4ZmY7XG4gIH0gZWxzZSB7XG4gICAgcmVzW2krK10gPSBsZW4gJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gOCkgJiAweGZmO1xuICAgIHJlc1tpKytdID0gKGxlbiA+Pj4gMTYpICYgMHhmZjtcbiAgICByZXNbaSsrXSA9IChsZW4gPj4+IDI0KSAmIDB4ZmY7XG4gICAgcmVzW2krK10gPSAwO1xuICAgIHJlc1tpKytdID0gMDtcbiAgICByZXNbaSsrXSA9IDA7XG4gICAgcmVzW2krK10gPSAwO1xuXG4gICAgZm9yICh0ID0gODsgdCA8IHRoaXMucGFkTGVuZ3RoOyB0KyspXG4gICAgICByZXNbaSsrXSA9IDA7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5772\n")},2344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar assert = __webpack_require__(9746);\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsb0JBQW9CO0FBQy9DOztBQUVBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLGdCQUFnQjtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvaG1hYy5qcz8yMTM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcblxuZnVuY3Rpb24gSG1hYyhoYXNoLCBrZXksIGVuYykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSG1hYykpXG4gICAgcmV0dXJuIG5ldyBIbWFjKGhhc2gsIGtleSwgZW5jKTtcbiAgdGhpcy5IYXNoID0gaGFzaDtcbiAgdGhpcy5ibG9ja1NpemUgPSBoYXNoLmJsb2NrU2l6ZSAvIDg7XG4gIHRoaXMub3V0U2l6ZSA9IGhhc2gub3V0U2l6ZSAvIDg7XG4gIHRoaXMuaW5uZXIgPSBudWxsO1xuICB0aGlzLm91dGVyID0gbnVsbDtcblxuICB0aGlzLl9pbml0KHV0aWxzLnRvQXJyYXkoa2V5LCBlbmMpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gSG1hYztcblxuSG1hYy5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiBpbml0KGtleSkge1xuICAvLyBTaG9ydGVuIGtleSwgaWYgbmVlZGVkXG4gIGlmIChrZXkubGVuZ3RoID4gdGhpcy5ibG9ja1NpemUpXG4gICAga2V5ID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpLmRpZ2VzdCgpO1xuICBhc3NlcnQoa2V5Lmxlbmd0aCA8PSB0aGlzLmJsb2NrU2l6ZSk7XG5cbiAgLy8gQWRkIHBhZGRpbmcgdG8ga2V5XG4gIGZvciAodmFyIGkgPSBrZXkubGVuZ3RoOyBpIDwgdGhpcy5ibG9ja1NpemU7IGkrKylcbiAgICBrZXkucHVzaCgwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDM2O1xuICB0aGlzLmlubmVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xuXG4gIC8vIDB4MzYgXiAweDVjID0gMHg2YVxuICBmb3IgKGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKVxuICAgIGtleVtpXSBePSAweDZhO1xuICB0aGlzLm91dGVyID0gbmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShrZXkpO1xufTtcblxuSG1hYy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKG1zZywgZW5jKSB7XG4gIHRoaXMuaW5uZXIudXBkYXRlKG1zZywgZW5jKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpO1xuICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2344\n")},2949:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjk0OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBUztBQUM3QixhQUFhLG1CQUFPLENBQUMsSUFBVTs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvcmlwZW1kLmpzP2JiNDQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzMgPSB1dGlscy5zdW0zMl8zO1xudmFyIHN1bTMyXzQgPSB1dGlscy5zdW0zMl80O1xudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbmZ1bmN0aW9uIFJJUEVNRDE2MCgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJJUEVNRDE2MCkpXG4gICAgcmV0dXJuIG5ldyBSSVBFTUQxNjAoKTtcblxuICBCbG9ja0hhc2guY2FsbCh0aGlzKTtcblxuICB0aGlzLmggPSBbIDB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5lbmRpYW4gPSAnbGl0dGxlJztcbn1cbnV0aWxzLmluaGVyaXRzKFJJUEVNRDE2MCwgQmxvY2tIYXNoKTtcbmV4cG9ydHMucmlwZW1kMTYwID0gUklQRU1EMTYwO1xuXG5SSVBFTUQxNjAuYmxvY2tTaXplID0gNTEyO1xuUklQRU1EMTYwLm91dFNpemUgPSAxNjA7XG5SSVBFTUQxNjAuaG1hY1N0cmVuZ3RoID0gMTkyO1xuUklQRU1EMTYwLnBhZExlbmd0aCA9IDY0O1xuXG5SSVBFTUQxNjAucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgQSA9IHRoaXMuaFswXTtcbiAgdmFyIEIgPSB0aGlzLmhbMV07XG4gIHZhciBDID0gdGhpcy5oWzJdO1xuICB2YXIgRCA9IHRoaXMuaFszXTtcbiAgdmFyIEUgPSB0aGlzLmhbNF07XG4gIHZhciBBaCA9IEE7XG4gIHZhciBCaCA9IEI7XG4gIHZhciBDaCA9IEM7XG4gIHZhciBEaCA9IEQ7XG4gIHZhciBFaCA9IEU7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgODA7IGorKykge1xuICAgIHZhciBUID0gc3VtMzIoXG4gICAgICByb3RsMzIoXG4gICAgICAgIHN1bTMyXzQoQSwgZihqLCBCLCBDLCBEKSwgbXNnW3Jbal0gKyBzdGFydF0sIEsoaikpLFxuICAgICAgICBzW2pdKSxcbiAgICAgIEUpO1xuICAgIEEgPSBFO1xuICAgIEUgPSBEO1xuICAgIEQgPSByb3RsMzIoQywgMTApO1xuICAgIEMgPSBCO1xuICAgIEIgPSBUO1xuICAgIFQgPSBzdW0zMihcbiAgICAgIHJvdGwzMihcbiAgICAgICAgc3VtMzJfNChBaCwgZig3OSAtIGosIEJoLCBDaCwgRGgpLCBtc2dbcmhbal0gKyBzdGFydF0sIEtoKGopKSxcbiAgICAgICAgc2hbal0pLFxuICAgICAgRWgpO1xuICAgIEFoID0gRWg7XG4gICAgRWggPSBEaDtcbiAgICBEaCA9IHJvdGwzMihDaCwgMTApO1xuICAgIENoID0gQmg7XG4gICAgQmggPSBUO1xuICB9XG4gIFQgPSBzdW0zMl8zKHRoaXMuaFsxXSwgQywgRGgpO1xuICB0aGlzLmhbMV0gPSBzdW0zMl8zKHRoaXMuaFsyXSwgRCwgRWgpO1xuICB0aGlzLmhbMl0gPSBzdW0zMl8zKHRoaXMuaFszXSwgRSwgQWgpO1xuICB0aGlzLmhbM10gPSBzdW0zMl8zKHRoaXMuaFs0XSwgQSwgQmgpO1xuICB0aGlzLmhbNF0gPSBzdW0zMl8zKHRoaXMuaFswXSwgQiwgQ2gpO1xuICB0aGlzLmhbMF0gPSBUO1xufTtcblxuUklQRU1EMTYwLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdsaXR0bGUnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2xpdHRsZScpO1xufTtcblxuZnVuY3Rpb24gZihqLCB4LCB5LCB6KSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiB4IF4geSBeIHo7XG4gIGVsc2UgaWYgKGogPD0gMzEpXG4gICAgcmV0dXJuICh4ICYgeSkgfCAoKH54KSAmIHopO1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAoeCB8ICh+eSkpIF4gejtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gKHggJiB6KSB8ICh5ICYgKH56KSk7XG4gIGVsc2VcbiAgICByZXR1cm4geCBeICh5IHwgKH56KSk7XG59XG5cbmZ1bmN0aW9uIEsoaikge1xuICBpZiAoaiA8PSAxNSlcbiAgICByZXR1cm4gMHgwMDAwMDAwMDtcbiAgZWxzZSBpZiAoaiA8PSAzMSlcbiAgICByZXR1cm4gMHg1YTgyNzk5OTtcbiAgZWxzZSBpZiAoaiA8PSA0NylcbiAgICByZXR1cm4gMHg2ZWQ5ZWJhMTtcbiAgZWxzZSBpZiAoaiA8PSA2MylcbiAgICByZXR1cm4gMHg4ZjFiYmNkYztcbiAgZWxzZVxuICAgIHJldHVybiAweGE5NTNmZDRlO1xufVxuXG5mdW5jdGlvbiBLaChqKSB7XG4gIGlmIChqIDw9IDE1KVxuICAgIHJldHVybiAweDUwYTI4YmU2O1xuICBlbHNlIGlmIChqIDw9IDMxKVxuICAgIHJldHVybiAweDVjNGRkMTI0O1xuICBlbHNlIGlmIChqIDw9IDQ3KVxuICAgIHJldHVybiAweDZkNzAzZWYzO1xuICBlbHNlIGlmIChqIDw9IDYzKVxuICAgIHJldHVybiAweDdhNmQ3NmU5O1xuICBlbHNlXG4gICAgcmV0dXJuIDB4MDAwMDAwMDA7XG59XG5cbnZhciByID0gW1xuICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LFxuICA3LCA0LCAxMywgMSwgMTAsIDYsIDE1LCAzLCAxMiwgMCwgOSwgNSwgMiwgMTQsIDExLCA4LFxuICAzLCAxMCwgMTQsIDQsIDksIDE1LCA4LCAxLCAyLCA3LCAwLCA2LCAxMywgMTEsIDUsIDEyLFxuICAxLCA5LCAxMSwgMTAsIDAsIDgsIDEyLCA0LCAxMywgMywgNywgMTUsIDE0LCA1LCA2LCAyLFxuICA0LCAwLCA1LCA5LCA3LCAxMiwgMiwgMTAsIDE0LCAxLCAzLCA4LCAxMSwgNiwgMTUsIDEzXG5dO1xuXG52YXIgcmggPSBbXG4gIDUsIDE0LCA3LCAwLCA5LCAyLCAxMSwgNCwgMTMsIDYsIDE1LCA4LCAxLCAxMCwgMywgMTIsXG4gIDYsIDExLCAzLCA3LCAwLCAxMywgNSwgMTAsIDE0LCAxNSwgOCwgMTIsIDQsIDksIDEsIDIsXG4gIDE1LCA1LCAxLCAzLCA3LCAxNCwgNiwgOSwgMTEsIDgsIDEyLCAyLCAxMCwgMCwgNCwgMTMsXG4gIDgsIDYsIDQsIDEsIDMsIDExLCAxNSwgMCwgNSwgMTIsIDIsIDEzLCA5LCA3LCAxMCwgMTQsXG4gIDEyLCAxNSwgMTAsIDQsIDEsIDUsIDgsIDcsIDYsIDIsIDEzLCAxNCwgMCwgMywgOSwgMTFcbl07XG5cbnZhciBzID0gW1xuICAxMSwgMTQsIDE1LCAxMiwgNSwgOCwgNywgOSwgMTEsIDEzLCAxNCwgMTUsIDYsIDcsIDksIDgsXG4gIDcsIDYsIDgsIDEzLCAxMSwgOSwgNywgMTUsIDcsIDEyLCAxNSwgOSwgMTEsIDcsIDEzLCAxMixcbiAgMTEsIDEzLCA2LCA3LCAxNCwgOSwgMTMsIDE1LCAxNCwgOCwgMTMsIDYsIDUsIDEyLCA3LCA1LFxuICAxMSwgMTIsIDE0LCAxNSwgMTQsIDE1LCA5LCA4LCA5LCAxNCwgNSwgNiwgOCwgNiwgNSwgMTIsXG4gIDksIDE1LCA1LCAxMSwgNiwgOCwgMTMsIDEyLCA1LCAxMiwgMTMsIDE0LCAxMSwgOCwgNSwgNlxuXTtcblxudmFyIHNoID0gW1xuICA4LCA5LCA5LCAxMSwgMTMsIDE1LCAxNSwgNSwgNywgNywgOCwgMTEsIDE0LCAxNCwgMTIsIDYsXG4gIDksIDEzLCAxNSwgNywgMTIsIDgsIDksIDExLCA3LCA3LCAxMiwgNywgNiwgMTUsIDEzLCAxMSxcbiAgOSwgNywgMTUsIDExLCA4LCA2LCA2LCAxNCwgMTIsIDEzLCA1LCAxNCwgMTMsIDEzLCA3LCA1LFxuICAxNSwgNSwgOCwgMTEsIDE0LCAxNCwgNiwgMTQsIDYsIDksIDEyLCA5LCAxMiwgNSwgMTUsIDgsXG4gIDgsIDUsIDEyLCA5LCAxMiwgNSwgMTQsIDYsIDgsIDEzLCA2LCA1LCAxNSwgMTMsIDExLCAxMVxuXTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2949\n")},9041:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nexports.sha1 = __webpack_require__(4761);\nexports.sha224 = __webpack_require__(799);\nexports.sha256 = __webpack_require__(9344);\nexports.sha384 = __webpack_require__(772);\nexports.sha512 = __webpack_require__(5900);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA0MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix3Q0FBaUM7QUFDakMseUNBQXFDO0FBQ3JDLDBDQUFxQztBQUNyQyx5Q0FBcUM7QUFDckMsMENBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS5qcz81OTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5zaGExID0gcmVxdWlyZSgnLi9zaGEvMScpO1xuZXhwb3J0cy5zaGEyMjQgPSByZXF1aXJlKCcuL3NoYS8yMjQnKTtcbmV4cG9ydHMuc2hhMjU2ID0gcmVxdWlyZSgnLi9zaGEvMjU2Jyk7XG5leHBvcnRzLnNoYTM4NCA9IHJlcXVpcmUoJy4vc2hhLzM4NCcpO1xuZXhwb3J0cy5zaGE1MTIgPSByZXF1aXJlKCcuL3NoYS81MTInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9041\n")},4761:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixRQUFRO0FBQzFCOztBQUVBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzEuanM/MTNlMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgY29tbW9uID0gcmVxdWlyZSgnLi4vY29tbW9uJyk7XG52YXIgc2hhQ29tbW9uID0gcmVxdWlyZSgnLi9jb21tb24nKTtcblxudmFyIHJvdGwzMiA9IHV0aWxzLnJvdGwzMjtcbnZhciBzdW0zMiA9IHV0aWxzLnN1bTMyO1xudmFyIHN1bTMyXzUgPSB1dGlscy5zdW0zMl81O1xudmFyIGZ0XzEgPSBzaGFDb21tb24uZnRfMTtcbnZhciBCbG9ja0hhc2ggPSBjb21tb24uQmxvY2tIYXNoO1xuXG52YXIgc2hhMV9LID0gW1xuICAweDVBODI3OTk5LCAweDZFRDlFQkExLFxuICAweDhGMUJCQ0RDLCAweENBNjJDMUQ2XG5dO1xuXG5mdW5jdGlvbiBTSEExKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMSkpXG4gICAgcmV0dXJuIG5ldyBTSEExKCk7XG5cbiAgQmxvY2tIYXNoLmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAgXTtcbiAgdGhpcy5XID0gbmV3IEFycmF5KDgwKTtcbn1cblxudXRpbHMuaW5oZXJpdHMoU0hBMSwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMTtcblxuU0hBMS5ibG9ja1NpemUgPSA1MTI7XG5TSEExLm91dFNpemUgPSAxNjA7XG5TSEExLmhtYWNTdHJlbmd0aCA9IDgwO1xuU0hBMS5wYWRMZW5ndGggPSA2NDtcblxuU0hBMS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuXG4gIGZvcig7IGkgPCBXLmxlbmd0aDsgaSsrKVxuICAgIFdbaV0gPSByb3RsMzIoV1tpIC0gM10gXiBXW2kgLSA4XSBeIFdbaSAtIDE0XSBeIFdbaSAtIDE2XSwgMSk7XG5cbiAgdmFyIGEgPSB0aGlzLmhbMF07XG4gIHZhciBiID0gdGhpcy5oWzFdO1xuICB2YXIgYyA9IHRoaXMuaFsyXTtcbiAgdmFyIGQgPSB0aGlzLmhbM107XG4gIHZhciBlID0gdGhpcy5oWzRdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHMgPSB+fihpIC8gMjApO1xuICAgIHZhciB0ID0gc3VtMzJfNShyb3RsMzIoYSwgNSksIGZ0XzEocywgYiwgYywgZCksIGUsIFdbaV0sIHNoYTFfS1tzXSk7XG4gICAgZSA9IGQ7XG4gICAgZCA9IGM7XG4gICAgYyA9IHJvdGwzMihiLCAzMCk7XG4gICAgYiA9IGE7XG4gICAgYSA9IHQ7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xufTtcblxuU0hBMS5wcm90b3R5cGUuX2RpZ2VzdCA9IGZ1bmN0aW9uIGRpZ2VzdChlbmMpIHtcbiAgaWYgKGVuYyA9PT0gJ2hleCcpXG4gICAgcmV0dXJuIHV0aWxzLnRvSGV4MzIodGhpcy5oLCAnYmlnJyk7XG4gIGVsc2VcbiAgICByZXR1cm4gdXRpbHMuc3BsaXQzMih0aGlzLmgsICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4761\n")},799:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar SHA256 = __webpack_require__(9344);\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzk5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVO0FBQzlCLGFBQWEsbUJBQU8sQ0FBQyxJQUFPOztBQUU1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzIyNC5qcz8wN2YyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBTSEEyNTYgPSByZXF1aXJlKCcuLzI1NicpO1xuXG5mdW5jdGlvbiBTSEEyMjQoKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTSEEyMjQpKVxuICAgIHJldHVybiBuZXcgU0hBMjI0KCk7XG5cbiAgU0hBMjU2LmNhbGwodGhpcyk7XG4gIHRoaXMuaCA9IFtcbiAgICAweGMxMDU5ZWQ4LCAweDM2N2NkNTA3LCAweDMwNzBkZDE3LCAweGY3MGU1OTM5LFxuICAgIDB4ZmZjMDBiMzEsIDB4Njg1ODE1MTEsIDB4NjRmOThmYTcsIDB4YmVmYTRmYTQgXTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTIyNCwgU0hBMjU2KTtcbm1vZHVsZS5leHBvcnRzID0gU0hBMjI0O1xuXG5TSEEyMjQuYmxvY2tTaXplID0gNTEyO1xuU0hBMjI0Lm91dFNpemUgPSAyMjQ7XG5TSEEyMjQuaG1hY1N0cmVuZ3RoID0gMTkyO1xuU0hBMjI0LnBhZExlbmd0aCA9IDY0O1xuXG5TSEEyMjQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIC8vIEp1c3QgdHJ1bmNhdGUgb3V0cHV0XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCA3KSwgJ2JpZycpO1xuICBlbHNlXG4gICAgcmV0dXJuIHV0aWxzLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsIDcpLCAnYmlnJyk7XG59O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///799\n")},9344:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar shaCommon = __webpack_require__(7038);\nvar assert = __webpack_require__(9746);\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTM0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBLFNBQVMsY0FBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxjQUFjO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMjU2LmpzPzZlZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIGNvbW1vbiA9IHJlcXVpcmUoJy4uL2NvbW1vbicpO1xudmFyIHNoYUNvbW1vbiA9IHJlcXVpcmUoJy4vY29tbW9uJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnbWluaW1hbGlzdGljLWFzc2VydCcpO1xuXG52YXIgc3VtMzIgPSB1dGlscy5zdW0zMjtcbnZhciBzdW0zMl80ID0gdXRpbHMuc3VtMzJfNDtcbnZhciBzdW0zMl81ID0gdXRpbHMuc3VtMzJfNTtcbnZhciBjaDMyID0gc2hhQ29tbW9uLmNoMzI7XG52YXIgbWFqMzIgPSBzaGFDb21tb24ubWFqMzI7XG52YXIgczBfMjU2ID0gc2hhQ29tbW9uLnMwXzI1NjtcbnZhciBzMV8yNTYgPSBzaGFDb21tb24uczFfMjU2O1xudmFyIGcwXzI1NiA9IHNoYUNvbW1vbi5nMF8yNTY7XG52YXIgZzFfMjU2ID0gc2hhQ29tbW9uLmcxXzI1NjtcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXTtcblxuZnVuY3Rpb24gU0hBMjU2KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMjU2KSlcbiAgICByZXR1cm4gbmV3IFNIQTI1NigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLCAweDliMDU2ODhjLCAweDFmODNkOWFiLCAweDViZTBjZDE5XG4gIF07XG4gIHRoaXMuayA9IHNoYTI1Nl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoNjQpO1xufVxudXRpbHMuaW5oZXJpdHMoU0hBMjU2LCBCbG9ja0hhc2gpO1xubW9kdWxlLmV4cG9ydHMgPSBTSEEyNTY7XG5cblNIQTI1Ni5ibG9ja1NpemUgPSA1MTI7XG5TSEEyNTYub3V0U2l6ZSA9IDI1NjtcblNIQTI1Ni5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEyNTYucGFkTGVuZ3RoID0gNjQ7XG5cblNIQTI1Ni5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uIF91cGRhdGUobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXG4gICAgV1tpXSA9IG1zZ1tzdGFydCArIGldO1xuICBmb3IgKDsgaSA8IFcubGVuZ3RoOyBpKyspXG4gICAgV1tpXSA9IHN1bTMyXzQoZzFfMjU2KFdbaSAtIDJdKSwgV1tpIC0gN10sIGcwXzI1NihXW2kgLSAxNV0pLCBXW2kgLSAxNl0pO1xuXG4gIHZhciBhID0gdGhpcy5oWzBdO1xuICB2YXIgYiA9IHRoaXMuaFsxXTtcbiAgdmFyIGMgPSB0aGlzLmhbMl07XG4gIHZhciBkID0gdGhpcy5oWzNdO1xuICB2YXIgZSA9IHRoaXMuaFs0XTtcbiAgdmFyIGYgPSB0aGlzLmhbNV07XG4gIHZhciBnID0gdGhpcy5oWzZdO1xuICB2YXIgaCA9IHRoaXMuaFs3XTtcblxuICBhc3NlcnQodGhpcy5rLmxlbmd0aCA9PT0gVy5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgVy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBUMSA9IHN1bTMyXzUoaCwgczFfMjU2KGUpLCBjaDMyKGUsIGYsIGcpLCB0aGlzLmtbaV0sIFdbaV0pO1xuICAgIHZhciBUMiA9IHN1bTMyKHMwXzI1NihhKSwgbWFqMzIoYSwgYiwgYykpO1xuICAgIGggPSBnO1xuICAgIGcgPSBmO1xuICAgIGYgPSBlO1xuICAgIGUgPSBzdW0zMihkLCBUMSk7XG4gICAgZCA9IGM7XG4gICAgYyA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHN1bTMyKFQxLCBUMik7XG4gIH1cblxuICB0aGlzLmhbMF0gPSBzdW0zMih0aGlzLmhbMF0sIGEpO1xuICB0aGlzLmhbMV0gPSBzdW0zMih0aGlzLmhbMV0sIGIpO1xuICB0aGlzLmhbMl0gPSBzdW0zMih0aGlzLmhbMl0sIGMpO1xuICB0aGlzLmhbM10gPSBzdW0zMih0aGlzLmhbM10sIGQpO1xuICB0aGlzLmhbNF0gPSBzdW0zMih0aGlzLmhbNF0sIGUpO1xuICB0aGlzLmhbNV0gPSBzdW0zMih0aGlzLmhbNV0sIGYpO1xuICB0aGlzLmhbNl0gPSBzdW0zMih0aGlzLmhbNl0sIGcpO1xuICB0aGlzLmhbN10gPSBzdW0zMih0aGlzLmhbN10sIGgpO1xufTtcblxuU0hBMjU2LnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9344\n")},772:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\n\nvar SHA512 = __webpack_require__(5900);\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFlBQVksbUJBQU8sQ0FBQyxJQUFVOztBQUU5QixhQUFhLG1CQUFPLENBQUMsSUFBTzs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC9zaGEvMzg0LmpzPzhiOTUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU0hBNTEyID0gcmVxdWlyZSgnLi81MTInKTtcblxuZnVuY3Rpb24gU0hBMzg0KCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBMzg0KSlcbiAgICByZXR1cm4gbmV3IFNIQTM4NCgpO1xuXG4gIFNIQTUxMi5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCxcbiAgICAweDYyOWEyOTJhLCAweDM2N2NkNTA3LFxuICAgIDB4OTE1OTAxNWEsIDB4MzA3MGRkMTcsXG4gICAgMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSxcbiAgICAweDY3MzMyNjY3LCAweGZmYzAwYjMxLFxuICAgIDB4OGViNDRhODcsIDB4Njg1ODE1MTEsXG4gICAgMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyxcbiAgICAweDQ3YjU0ODFkLCAweGJlZmE0ZmE0IF07XG59XG51dGlscy5pbmhlcml0cyhTSEEzODQsIFNIQTUxMik7XG5tb2R1bGUuZXhwb3J0cyA9IFNIQTM4NDtcblxuU0hBMzg0LmJsb2NrU2l6ZSA9IDEwMjQ7XG5TSEEzODQub3V0U2l6ZSA9IDM4NDtcblNIQTM4NC5obWFjU3RyZW5ndGggPSAxOTI7XG5TSEEzODQucGFkTGVuZ3RoID0gMTI4O1xuXG5TSEEzODQucHJvdG90eXBlLl9kaWdlc3QgPSBmdW5jdGlvbiBkaWdlc3QoZW5jKSB7XG4gIGlmIChlbmMgPT09ICdoZXgnKVxuICAgIHJldHVybiB1dGlscy50b0hleDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLCAxMiksICdiaWcnKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///772\n")},5900:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar common = __webpack_require__(5772);\nvar assert = __webpack_require__(9746);\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsSUFBVztBQUNoQyxhQUFhLG1CQUFPLENBQUMsSUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCLGdEQUFnRDtBQUNoRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2hhc2guanMvbGliL2hhc2gvc2hhLzUxMi5qcz9iNTI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcbnZhciBjb21tb24gPSByZXF1aXJlKCcuLi9jb21tb24nKTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbnZhciByb3RyNjRfaGkgPSB1dGlscy5yb3RyNjRfaGk7XG52YXIgcm90cjY0X2xvID0gdXRpbHMucm90cjY0X2xvO1xudmFyIHNocjY0X2hpID0gdXRpbHMuc2hyNjRfaGk7XG52YXIgc2hyNjRfbG8gPSB1dGlscy5zaHI2NF9sbztcbnZhciBzdW02NCA9IHV0aWxzLnN1bTY0O1xudmFyIHN1bTY0X2hpID0gdXRpbHMuc3VtNjRfaGk7XG52YXIgc3VtNjRfbG8gPSB1dGlscy5zdW02NF9sbztcbnZhciBzdW02NF80X2hpID0gdXRpbHMuc3VtNjRfNF9oaTtcbnZhciBzdW02NF80X2xvID0gdXRpbHMuc3VtNjRfNF9sbztcbnZhciBzdW02NF81X2hpID0gdXRpbHMuc3VtNjRfNV9oaTtcbnZhciBzdW02NF81X2xvID0gdXRpbHMuc3VtNjRfNV9sbztcblxudmFyIEJsb2NrSGFzaCA9IGNvbW1vbi5CbG9ja0hhc2g7XG5cbnZhciBzaGE1MTJfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiwgMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCxcbiAgMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiwgMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyxcbiAgMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCwgMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSxcbiAgMHg5MjNmODJhNCwgMHhhZjE5NGY5YiwgMHhhYjFjNWVkNSwgMHhkYTZkODExOCxcbiAgMHhkODA3YWE5OCwgMHhhMzAzMDI0MiwgMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSxcbiAgMHgyNDMxODViZSwgMHg0ZWU0YjI4YywgMHg1NTBjN2RjMywgMHhkNWZmYjRlMixcbiAgMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiwgMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSxcbiAgMHg5YmRjMDZhNywgMHgyNWM3MTIzNSwgMHhjMTliZjE3NCwgMHhjZjY5MjY5NCxcbiAgMHhlNDliNjljMSwgMHg5ZWYxNGFkMiwgMHhlZmJlNDc4NiwgMHgzODRmMjVlMyxcbiAgMHgwZmMxOWRjNiwgMHg4YjhjZDViNSwgMHgyNDBjYTFjYywgMHg3N2FjOWM2NSxcbiAgMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSwgMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyxcbiAgMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCwgMHg3NmY5ODhkYSwgMHg4MzExNTNiNSxcbiAgMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiwgMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCxcbiAgMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiwgMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCxcbiAgMHhjNmUwMGJmMywgMHgzZGE4OGZjMiwgMHhkNWE3OTE0NywgMHg5MzBhYTcyNSxcbiAgMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiwgMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCxcbiAgMHgyN2I3MGE4NSwgMHg0NmQyMmZmYywgMHgyZTFiMjEzOCwgMHg1YzI2YzkyNixcbiAgMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCwgMHg1MzM4MGQxMywgMHg5ZDk1YjNkZixcbiAgMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSwgMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCxcbiAgMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiwgMHg5MjcyMmM4NSwgMHgxNDgyMzUzYixcbiAgMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCwgMHhhODFhNjY0YiwgMHhiYzQyMzAwMSxcbiAgMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSwgMHhjNzZjNTFhMywgMHgwNjU0YmUzMCxcbiAgMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCwgMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCxcbiAgMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSwgMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCxcbiAgMHgxOWE0YzExNiwgMHhiOGQyZDBjOCwgMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyxcbiAgMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSwgMHgzNGIwYmNiNSwgMHhlMTliNDhhOCxcbiAgMHgzOTFjMGNiMywgMHhjNWM5NWE2MywgMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYixcbiAgMHg1YjljY2E0ZiwgMHg3NzYzZTM3MywgMHg2ODJlNmZmMywgMHhkNmIyYjhhMyxcbiAgMHg3NDhmODJlZSwgMHg1ZGVmYjJmYywgMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCxcbiAgMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiwgMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyxcbiAgMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCwgMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSxcbiAgMHhiZWY5YTNmNywgMHhiMmM2NzkxNSwgMHhjNjcxNzhmMiwgMHhlMzcyNTMyYixcbiAgMHhjYTI3M2VjZSwgMHhlYTI2NjE5YywgMHhkMTg2YjhjNywgMHgyMWMwYzIwNyxcbiAgMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSwgMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCxcbiAgMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSwgMHgwYTYzN2RjNSwgMHhhMmM4OThhNixcbiAgMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSwgMHgxYjcxMGIzNSwgMHgxMzFjNDcxYixcbiAgMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCwgMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyxcbiAgMHgzYzllYmUwYSwgMHgxNWM5YmViYywgMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyxcbiAgMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiwgMHg1OTdmMjk5YywgMHhmYzY1N2UyYSxcbiAgMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYywgMHg2YzQ0MTk4YywgMHg0YTQ3NTgxN1xuXTtcblxuZnVuY3Rpb24gU0hBNTEyKCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0hBNTEyKSlcbiAgICByZXR1cm4gbmV3IFNIQTUxMigpO1xuXG4gIEJsb2NrSGFzaC5jYWxsKHRoaXMpO1xuICB0aGlzLmggPSBbXG4gICAgMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCxcbiAgICAweGJiNjdhZTg1LCAweDg0Y2FhNzNiLFxuICAgIDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIsXG4gICAgMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSxcbiAgICAweDUxMGU1MjdmLCAweGFkZTY4MmQxLFxuICAgIDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYsXG4gICAgMHgxZjgzZDlhYiwgMHhmYjQxYmQ2YixcbiAgICAweDViZTBjZDE5LCAweDEzN2UyMTc5IF07XG4gIHRoaXMuayA9IHNoYTUxMl9LO1xuICB0aGlzLlcgPSBuZXcgQXJyYXkoMTYwKTtcbn1cbnV0aWxzLmluaGVyaXRzKFNIQTUxMiwgQmxvY2tIYXNoKTtcbm1vZHVsZS5leHBvcnRzID0gU0hBNTEyO1xuXG5TSEE1MTIuYmxvY2tTaXplID0gMTAyNDtcblNIQTUxMi5vdXRTaXplID0gNTEyO1xuU0hBNTEyLmhtYWNTdHJlbmd0aCA9IDE5MjtcblNIQTUxMi5wYWRMZW5ndGggPSAxMjg7XG5cblNIQTUxMi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jayA9IGZ1bmN0aW9uIF9wcmVwYXJlQmxvY2sobXNnLCBzdGFydCkge1xuICB2YXIgVyA9IHRoaXMuVztcblxuICAvLyAzMiB4IDMyYml0IHdvcmRzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKylcbiAgICBXW2ldID0gbXNnW3N0YXJ0ICsgaV07XG4gIGZvciAoOyBpIDwgVy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBjMF9oaSA9IGcxXzUxMl9oaShXW2kgLSA0XSwgV1tpIC0gM10pOyAgLy8gaSAtIDJcbiAgICB2YXIgYzBfbG8gPSBnMV81MTJfbG8oV1tpIC0gNF0sIFdbaSAtIDNdKTtcbiAgICB2YXIgYzFfaGkgPSBXW2kgLSAxNF07ICAvLyBpIC0gN1xuICAgIHZhciBjMV9sbyA9IFdbaSAtIDEzXTtcbiAgICB2YXIgYzJfaGkgPSBnMF81MTJfaGkoV1tpIC0gMzBdLCBXW2kgLSAyOV0pOyAgLy8gaSAtIDE1XG4gICAgdmFyIGMyX2xvID0gZzBfNTEyX2xvKFdbaSAtIDMwXSwgV1tpIC0gMjldKTtcbiAgICB2YXIgYzNfaGkgPSBXW2kgLSAzMl07ICAvLyBpIC0gMTZcbiAgICB2YXIgYzNfbG8gPSBXW2kgLSAzMV07XG5cbiAgICBXW2ldID0gc3VtNjRfNF9oaShcbiAgICAgIGMwX2hpLCBjMF9sbyxcbiAgICAgIGMxX2hpLCBjMV9sbyxcbiAgICAgIGMyX2hpLCBjMl9sbyxcbiAgICAgIGMzX2hpLCBjM19sbyk7XG4gICAgV1tpICsgMV0gPSBzdW02NF80X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvKTtcbiAgfVxufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gX3VwZGF0ZShtc2csIHN0YXJ0KSB7XG4gIHRoaXMuX3ByZXBhcmVCbG9jayhtc2csIHN0YXJ0KTtcblxuICB2YXIgVyA9IHRoaXMuVztcblxuICB2YXIgYWggPSB0aGlzLmhbMF07XG4gIHZhciBhbCA9IHRoaXMuaFsxXTtcbiAgdmFyIGJoID0gdGhpcy5oWzJdO1xuICB2YXIgYmwgPSB0aGlzLmhbM107XG4gIHZhciBjaCA9IHRoaXMuaFs0XTtcbiAgdmFyIGNsID0gdGhpcy5oWzVdO1xuICB2YXIgZGggPSB0aGlzLmhbNl07XG4gIHZhciBkbCA9IHRoaXMuaFs3XTtcbiAgdmFyIGVoID0gdGhpcy5oWzhdO1xuICB2YXIgZWwgPSB0aGlzLmhbOV07XG4gIHZhciBmaCA9IHRoaXMuaFsxMF07XG4gIHZhciBmbCA9IHRoaXMuaFsxMV07XG4gIHZhciBnaCA9IHRoaXMuaFsxMl07XG4gIHZhciBnbCA9IHRoaXMuaFsxM107XG4gIHZhciBoaCA9IHRoaXMuaFsxNF07XG4gIHZhciBobCA9IHRoaXMuaFsxNV07XG5cbiAgYXNzZXJ0KHRoaXMuay5sZW5ndGggPT09IFcubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBXLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGMwX2hpID0gaGg7XG4gICAgdmFyIGMwX2xvID0gaGw7XG4gICAgdmFyIGMxX2hpID0gczFfNTEyX2hpKGVoLCBlbCk7XG4gICAgdmFyIGMxX2xvID0gczFfNTEyX2xvKGVoLCBlbCk7XG4gICAgdmFyIGMyX2hpID0gY2g2NF9oaShlaCwgZWwsIGZoLCBmbCwgZ2gsIGdsKTtcbiAgICB2YXIgYzJfbG8gPSBjaDY0X2xvKGVoLCBlbCwgZmgsIGZsLCBnaCwgZ2wpO1xuICAgIHZhciBjM19oaSA9IHRoaXMua1tpXTtcbiAgICB2YXIgYzNfbG8gPSB0aGlzLmtbaSArIDFdO1xuICAgIHZhciBjNF9oaSA9IFdbaV07XG4gICAgdmFyIGM0X2xvID0gV1tpICsgMV07XG5cbiAgICB2YXIgVDFfaGkgPSBzdW02NF81X2hpKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcbiAgICB2YXIgVDFfbG8gPSBzdW02NF81X2xvKFxuICAgICAgYzBfaGksIGMwX2xvLFxuICAgICAgYzFfaGksIGMxX2xvLFxuICAgICAgYzJfaGksIGMyX2xvLFxuICAgICAgYzNfaGksIGMzX2xvLFxuICAgICAgYzRfaGksIGM0X2xvKTtcblxuICAgIGMwX2hpID0gczBfNTEyX2hpKGFoLCBhbCk7XG4gICAgYzBfbG8gPSBzMF81MTJfbG8oYWgsIGFsKTtcbiAgICBjMV9oaSA9IG1hajY0X2hpKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wpO1xuICAgIGMxX2xvID0gbWFqNjRfbG8oYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCk7XG5cbiAgICB2YXIgVDJfaGkgPSBzdW02NF9oaShjMF9oaSwgYzBfbG8sIGMxX2hpLCBjMV9sbyk7XG4gICAgdmFyIFQyX2xvID0gc3VtNjRfbG8oYzBfaGksIGMwX2xvLCBjMV9oaSwgYzFfbG8pO1xuXG4gICAgaGggPSBnaDtcbiAgICBobCA9IGdsO1xuXG4gICAgZ2ggPSBmaDtcbiAgICBnbCA9IGZsO1xuXG4gICAgZmggPSBlaDtcbiAgICBmbCA9IGVsO1xuXG4gICAgZWggPSBzdW02NF9oaShkaCwgZGwsIFQxX2hpLCBUMV9sbyk7XG4gICAgZWwgPSBzdW02NF9sbyhkbCwgZGwsIFQxX2hpLCBUMV9sbyk7XG5cbiAgICBkaCA9IGNoO1xuICAgIGRsID0gY2w7XG5cbiAgICBjaCA9IGJoO1xuICAgIGNsID0gYmw7XG5cbiAgICBiaCA9IGFoO1xuICAgIGJsID0gYWw7XG5cbiAgICBhaCA9IHN1bTY0X2hpKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgICBhbCA9IHN1bTY0X2xvKFQxX2hpLCBUMV9sbywgVDJfaGksIFQyX2xvKTtcbiAgfVxuXG4gIHN1bTY0KHRoaXMuaCwgMCwgYWgsIGFsKTtcbiAgc3VtNjQodGhpcy5oLCAyLCBiaCwgYmwpO1xuICBzdW02NCh0aGlzLmgsIDQsIGNoLCBjbCk7XG4gIHN1bTY0KHRoaXMuaCwgNiwgZGgsIGRsKTtcbiAgc3VtNjQodGhpcy5oLCA4LCBlaCwgZWwpO1xuICBzdW02NCh0aGlzLmgsIDEwLCBmaCwgZmwpO1xuICBzdW02NCh0aGlzLmgsIDEyLCBnaCwgZ2wpO1xuICBzdW02NCh0aGlzLmgsIDE0LCBoaCwgaGwpO1xufTtcblxuU0hBNTEyLnByb3RvdHlwZS5fZGlnZXN0ID0gZnVuY3Rpb24gZGlnZXN0KGVuYykge1xuICBpZiAoZW5jID09PSAnaGV4JylcbiAgICByZXR1cm4gdXRpbHMudG9IZXgzMih0aGlzLmgsICdiaWcnKTtcbiAgZWxzZVxuICAgIHJldHVybiB1dGlscy5zcGxpdDMyKHRoaXMuaCwgJ2JpZycpO1xufTtcblxuZnVuY3Rpb24gY2g2NF9oaSh4aCwgeGwsIHloLCB5bCwgemgpIHtcbiAgdmFyIHIgPSAoeGggJiB5aCkgXiAoKH54aCkgJiB6aCk7XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gY2g2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKCh+eGwpICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIG1hajY0X2hpKHhoLCB4bCwgeWgsIHlsLCB6aCkge1xuICB2YXIgciA9ICh4aCAmIHloKSBeICh4aCAmIHpoKSBeICh5aCAmIHpoKTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBtYWo2NF9sbyh4aCwgeGwsIHloLCB5bCwgemgsIHpsKSB7XG4gIHZhciByID0gKHhsICYgeWwpIF4gKHhsICYgemwpIF4gKHlsICYgemwpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMwXzUxMl9oaSh4aCwgeGwpIHtcbiAgdmFyIGMwX2hpID0gcm90cjY0X2hpKHhoLCB4bCwgMjgpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGwsIHhoLCAyKTsgIC8vIDM0XG4gIHZhciBjMl9oaSA9IHJvdHI2NF9oaSh4bCwgeGgsIDcpOyAgLy8gMzlcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDI4KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMik7ICAvLyAzNFxuICB2YXIgYzJfbG8gPSByb3RyNjRfbG8oeGwsIHhoLCA3KTsgIC8vIDM5XG5cbiAgdmFyIHIgPSBjMF9sbyBeIGMxX2xvIF4gYzJfbG87XG4gIGlmIChyIDwgMClcbiAgICByICs9IDB4MTAwMDAwMDAwO1xuICByZXR1cm4gcjtcbn1cblxuZnVuY3Rpb24gczFfNTEyX2hpKHhoLCB4bCkge1xuICB2YXIgYzBfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCAxNCk7XG4gIHZhciBjMV9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE4KTtcbiAgdmFyIGMyX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgOSk7ICAvLyA0MVxuXG4gIHZhciByID0gYzBfaGkgXiBjMV9oaSBeIGMyX2hpO1xuICBpZiAociA8IDApXG4gICAgciArPSAweDEwMDAwMDAwMDtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHMxXzUxMl9sbyh4aCwgeGwpIHtcbiAgdmFyIGMwX2xvID0gcm90cjY0X2xvKHhoLCB4bCwgMTQpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCAxOCk7XG4gIHZhciBjMl9sbyA9IHJvdHI2NF9sbyh4bCwgeGgsIDkpOyAgLy8gNDFcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDEpO1xuICB2YXIgYzFfaGkgPSByb3RyNjRfaGkoeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMF81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDEpO1xuICB2YXIgYzFfbG8gPSByb3RyNjRfbG8oeGgsIHhsLCA4KTtcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA3KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfaGkoeGgsIHhsKSB7XG4gIHZhciBjMF9oaSA9IHJvdHI2NF9oaSh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2hpID0gcm90cjY0X2hpKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2hpID0gc2hyNjRfaGkoeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2hpIF4gYzFfaGkgXiBjMl9oaTtcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBnMV81MTJfbG8oeGgsIHhsKSB7XG4gIHZhciBjMF9sbyA9IHJvdHI2NF9sbyh4aCwgeGwsIDE5KTtcbiAgdmFyIGMxX2xvID0gcm90cjY0X2xvKHhsLCB4aCwgMjkpOyAgLy8gNjFcbiAgdmFyIGMyX2xvID0gc2hyNjRfbG8oeGgsIHhsLCA2KTtcblxuICB2YXIgciA9IGMwX2xvIF4gYzFfbG8gXiBjMl9sbztcbiAgaWYgKHIgPCAwKVxuICAgIHIgKz0gMHgxMDAwMDAwMDA7XG4gIHJldHVybiByO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5900\n")},7038:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar utils = __webpack_require__(6436);\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzAzOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixZQUFZLG1CQUFPLENBQUMsSUFBVTtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9oYXNoLmpzL2xpYi9oYXNoL3NoYS9jb21tb24uanM/YWE1NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgcm90cjMyID0gdXRpbHMucm90cjMyO1xuXG5mdW5jdGlvbiBmdF8xKHMsIHgsIHksIHopIHtcbiAgaWYgKHMgPT09IDApXG4gICAgcmV0dXJuIGNoMzIoeCwgeSwgeik7XG4gIGlmIChzID09PSAxIHx8IHMgPT09IDMpXG4gICAgcmV0dXJuIHAzMih4LCB5LCB6KTtcbiAgaWYgKHMgPT09IDIpXG4gICAgcmV0dXJuIG1hajMyKHgsIHksIHopO1xufVxuZXhwb3J0cy5mdF8xID0gZnRfMTtcblxuZnVuY3Rpb24gY2gzMih4LCB5LCB6KSB7XG4gIHJldHVybiAoeCAmIHkpIF4gKCh+eCkgJiB6KTtcbn1cbmV4cG9ydHMuY2gzMiA9IGNoMzI7XG5cbmZ1bmN0aW9uIG1hajMyKHgsIHksIHopIHtcbiAgcmV0dXJuICh4ICYgeSkgXiAoeCAmIHopIF4gKHkgJiB6KTtcbn1cbmV4cG9ydHMubWFqMzIgPSBtYWozMjtcblxuZnVuY3Rpb24gcDMyKHgsIHksIHopIHtcbiAgcmV0dXJuIHggXiB5IF4gejtcbn1cbmV4cG9ydHMucDMyID0gcDMyO1xuXG5mdW5jdGlvbiBzMF8yNTYoeCkge1xuICByZXR1cm4gcm90cjMyKHgsIDIpIF4gcm90cjMyKHgsIDEzKSBeIHJvdHIzMih4LCAyMik7XG59XG5leHBvcnRzLnMwXzI1NiA9IHMwXzI1NjtcblxuZnVuY3Rpb24gczFfMjU2KHgpIHtcbiAgcmV0dXJuIHJvdHIzMih4LCA2KSBeIHJvdHIzMih4LCAxMSkgXiByb3RyMzIoeCwgMjUpO1xufVxuZXhwb3J0cy5zMV8yNTYgPSBzMV8yNTY7XG5cbmZ1bmN0aW9uIGcwXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgNykgXiByb3RyMzIoeCwgMTgpIF4gKHggPj4+IDMpO1xufVxuZXhwb3J0cy5nMF8yNTYgPSBnMF8yNTY7XG5cbmZ1bmN0aW9uIGcxXzI1Nih4KSB7XG4gIHJldHVybiByb3RyMzIoeCwgMTcpIF4gcm90cjMyKHgsIDE5KSBeICh4ID4+PiAxMCk7XG59XG5leHBvcnRzLmcxXzI1NiA9IGcxXzI1NjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7038\n")},6436:function(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("\n\nvar assert = __webpack_require__(9746);\nvar inherits = __webpack_require__(5717);\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBcUI7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLElBQVU7O0FBRWpDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0EsSUFBSTtBQUNKLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0JBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0EsZUFBZTs7QUFFZjtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaGFzaC5qcy9saWIvaGFzaC91dGlscy5qcz9jM2MwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFzc2VydCA9IHJlcXVpcmUoJ21pbmltYWxpc3RpYy1hc3NlcnQnKTtcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuaW5oZXJpdHMgPSBpbmhlcml0cztcblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKG1zZywgaSkge1xuICBpZiAoKG1zZy5jaGFyQ29kZUF0KGkpICYgMHhGQzAwKSAhPT0gMHhEODAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpIDwgMCB8fCBpICsgMSA+PSBtc2cubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAobXNnLmNoYXJDb2RlQXQoaSArIDEpICYgMHhGQzAwKSA9PT0gMHhEQzAwO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG1zZywgZW5jKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG1zZykpXG4gICAgcmV0dXJuIG1zZy5zbGljZSgpO1xuICBpZiAoIW1zZylcbiAgICByZXR1cm4gW107XG4gIHZhciByZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKCFlbmMpIHtcbiAgICAgIC8vIEluc3BpcmVkIGJ5IHN0cmluZ1RvVXRmOEJ5dGVBcnJheSgpIGluIGNsb3N1cmUtbGlicmFyeSBieSBHb29nbGVcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvODU5OGQ4NzI0MmFmNTlhYWMyMzMyNzA3NDJjODk4NGUyYjJiZGJlMC9jbG9zdXJlL2dvb2cvY3J5cHQvY3J5cHQuanMjTDExNy1MMTQzXG4gICAgICAvLyBBcGFjaGUgTGljZW5zZSAyLjBcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1saWJyYXJ5L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMTI4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSBjO1xuICAgICAgICB9IGVsc2UgaWYgKGMgPCAyMDQ4KSB7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyA+PiA2KSB8IDE5MjtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3Vycm9nYXRlUGFpcihtc2csIGkpKSB7XG4gICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKGMgJiAweDAzRkYpIDw8IDEwKSArIChtc2cuY2hhckNvZGVBdCgrK2kpICYgMHgwM0ZGKTtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDE4KSB8IDI0MDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiAxMikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoKGMgPj4gNikgJiA2MykgfCAxMjg7XG4gICAgICAgICAgcmVzW3ArK10gPSAoYyAmIDYzKSB8IDEyODtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNbcCsrXSA9IChjID4+IDEyKSB8IDIyNDtcbiAgICAgICAgICByZXNbcCsrXSA9ICgoYyA+PiA2KSAmIDYzKSB8IDEyODtcbiAgICAgICAgICByZXNbcCsrXSA9IChjICYgNjMpIHwgMTI4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbmMgPT09ICdoZXgnKSB7XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZSgvW15hLXowLTldKy9pZywgJycpO1xuICAgICAgaWYgKG1zZy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICBtc2cgPSAnMCcgKyBtc2c7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSArPSAyKVxuICAgICAgICByZXMucHVzaChwYXJzZUludChtc2dbaV0gKyBtc2dbaSArIDFdLCAxNikpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKVxuICAgICAgcmVzW2ldID0gbXNnW2ldIHwgMDtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTtcblxuZnVuY3Rpb24gdG9IZXgobXNnKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspXG4gICAgcmVzICs9IHplcm8yKG1zZ1tpXS50b1N0cmluZygxNikpO1xuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy50b0hleCA9IHRvSGV4O1xuXG5mdW5jdGlvbiBodG9ubCh3KSB7XG4gIHZhciByZXMgPSAodyA+Pj4gMjQpIHxcbiAgICAgICAgICAgICgodyA+Pj4gOCkgJiAweGZmMDApIHxcbiAgICAgICAgICAgICgodyA8PCA4KSAmIDB4ZmYwMDAwKSB8XG4gICAgICAgICAgICAoKHcgJiAweGZmKSA8PCAyNCk7XG4gIHJldHVybiByZXMgPj4+IDA7XG59XG5leHBvcnRzLmh0b25sID0gaHRvbmw7XG5cbmZ1bmN0aW9uIHRvSGV4MzIobXNnLCBlbmRpYW4pIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB3ID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdsaXR0bGUnKVxuICAgICAgdyA9IGh0b25sKHcpO1xuICAgIHJlcyArPSB6ZXJvOCh3LnRvU3RyaW5nKDE2KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMudG9IZXgzMiA9IHRvSGV4MzI7XG5cbmZ1bmN0aW9uIHplcm8yKHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm8yID0gemVybzI7XG5cbmZ1bmN0aW9uIHplcm84KHdvcmQpIHtcbiAgaWYgKHdvcmQubGVuZ3RoID09PSA3KVxuICAgIHJldHVybiAnMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gNilcbiAgICByZXR1cm4gJzAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA1KVxuICAgIHJldHVybiAnMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSA0KVxuICAgIHJldHVybiAnMDAwMCcgKyB3b3JkO1xuICBlbHNlIGlmICh3b3JkLmxlbmd0aCA9PT0gMylcbiAgICByZXR1cm4gJzAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAyKVxuICAgIHJldHVybiAnMDAwMDAwJyArIHdvcmQ7XG4gIGVsc2UgaWYgKHdvcmQubGVuZ3RoID09PSAxKVxuICAgIHJldHVybiAnMDAwMDAwMCcgKyB3b3JkO1xuICBlbHNlXG4gICAgcmV0dXJuIHdvcmQ7XG59XG5leHBvcnRzLnplcm84ID0gemVybzg7XG5cbmZ1bmN0aW9uIGpvaW4zMihtc2csIHN0YXJ0LCBlbmQsIGVuZGlhbikge1xuICB2YXIgbGVuID0gZW5kIC0gc3RhcnQ7XG4gIGFzc2VydChsZW4gJSA0ID09PSAwKTtcbiAgdmFyIHJlcyA9IG5ldyBBcnJheShsZW4gLyA0KTtcbiAgZm9yICh2YXIgaSA9IDAsIGsgPSBzdGFydDsgaSA8IHJlcy5sZW5ndGg7IGkrKywgayArPSA0KSB7XG4gICAgdmFyIHc7XG4gICAgaWYgKGVuZGlhbiA9PT0gJ2JpZycpXG4gICAgICB3ID0gKG1zZ1trXSA8PCAyNCkgfCAobXNnW2sgKyAxXSA8PCAxNikgfCAobXNnW2sgKyAyXSA8PCA4KSB8IG1zZ1trICsgM107XG4gICAgZWxzZVxuICAgICAgdyA9IChtc2dbayArIDNdIDw8IDI0KSB8IChtc2dbayArIDJdIDw8IDE2KSB8IChtc2dbayArIDFdIDw8IDgpIHwgbXNnW2tdO1xuICAgIHJlc1tpXSA9IHcgPj4+IDA7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuam9pbjMyID0gam9pbjMyO1xuXG5mdW5jdGlvbiBzcGxpdDMyKG1zZywgZW5kaWFuKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobXNnLmxlbmd0aCAqIDQpO1xuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyssIGsgKz0gNCkge1xuICAgIHZhciBtID0gbXNnW2ldO1xuICAgIGlmIChlbmRpYW4gPT09ICdiaWcnKSB7XG4gICAgICByZXNba10gPSBtID4+PiAyNDtcbiAgICAgIHJlc1trICsgMV0gPSAobSA+Pj4gMTYpICYgMHhmZjtcbiAgICAgIHJlc1trICsgMl0gPSAobSA+Pj4gOCkgJiAweGZmO1xuICAgICAgcmVzW2sgKyAzXSA9IG0gJiAweGZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbayArIDNdID0gbSA+Pj4gMjQ7XG4gICAgICByZXNbayArIDJdID0gKG0gPj4+IDE2KSAmIDB4ZmY7XG4gICAgICByZXNbayArIDFdID0gKG0gPj4+IDgpICYgMHhmZjtcbiAgICAgIHJlc1trXSA9IG0gJiAweGZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuZXhwb3J0cy5zcGxpdDMyID0gc3BsaXQzMjtcblxuZnVuY3Rpb24gcm90cjMyKHcsIGIpIHtcbiAgcmV0dXJuICh3ID4+PiBiKSB8ICh3IDw8ICgzMiAtIGIpKTtcbn1cbmV4cG9ydHMucm90cjMyID0gcm90cjMyO1xuXG5mdW5jdGlvbiByb3RsMzIodywgYikge1xuICByZXR1cm4gKHcgPDwgYikgfCAodyA+Pj4gKDMyIC0gYikpO1xufVxuZXhwb3J0cy5yb3RsMzIgPSByb3RsMzI7XG5cbmZ1bmN0aW9uIHN1bTMyKGEsIGIpIHtcbiAgcmV0dXJuIChhICsgYikgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyID0gc3VtMzI7XG5cbmZ1bmN0aW9uIHN1bTMyXzMoYSwgYiwgYykge1xuICByZXR1cm4gKGEgKyBiICsgYykgPj4+IDA7XG59XG5leHBvcnRzLnN1bTMyXzMgPSBzdW0zMl8zO1xuXG5mdW5jdGlvbiBzdW0zMl80KGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuIChhICsgYiArIGMgKyBkKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNCA9IHN1bTMyXzQ7XG5cbmZ1bmN0aW9uIHN1bTMyXzUoYSwgYiwgYywgZCwgZSkge1xuICByZXR1cm4gKGEgKyBiICsgYyArIGQgKyBlKSA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtMzJfNSA9IHN1bTMyXzU7XG5cbmZ1bmN0aW9uIHN1bTY0KGJ1ZiwgcG9zLCBhaCwgYWwpIHtcbiAgdmFyIGJoID0gYnVmW3Bvc107XG4gIHZhciBibCA9IGJ1Zltwb3MgKyAxXTtcblxuICB2YXIgbG8gPSAoYWwgKyBibCkgPj4+IDA7XG4gIHZhciBoaSA9IChsbyA8IGFsID8gMSA6IDApICsgYWggKyBiaDtcbiAgYnVmW3Bvc10gPSBoaSA+Pj4gMDtcbiAgYnVmW3BvcyArIDFdID0gbG87XG59XG5leHBvcnRzLnN1bTY0ID0gc3VtNjQ7XG5cbmZ1bmN0aW9uIHN1bTY0X2hpKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IChhbCArIGJsKSA+Pj4gMDtcbiAgdmFyIGhpID0gKGxvIDwgYWwgPyAxIDogMCkgKyBhaCArIGJoO1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0X2hpID0gc3VtNjRfaGk7XG5cbmZ1bmN0aW9uIHN1bTY0X2xvKGFoLCBhbCwgYmgsIGJsKSB7XG4gIHZhciBsbyA9IGFsICsgYmw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfbG8gPSBzdW02NF9sbztcblxuZnVuY3Rpb24gc3VtNjRfNF9oaShhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBjYXJyeTtcbiAgcmV0dXJuIGhpID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF80X2hpID0gc3VtNjRfNF9oaTtcblxuZnVuY3Rpb24gc3VtNjRfNF9sbyhhaCwgYWwsIGJoLCBibCwgY2gsIGNsLCBkaCwgZGwpIHtcbiAgdmFyIGxvID0gYWwgKyBibCArIGNsICsgZGw7XG4gIHJldHVybiBsbyA+Pj4gMDtcbn1cbmV4cG9ydHMuc3VtNjRfNF9sbyA9IHN1bTY0XzRfbG87XG5cbmZ1bmN0aW9uIHN1bTY0XzVfaGkoYWgsIGFsLCBiaCwgYmwsIGNoLCBjbCwgZGgsIGRsLCBlaCwgZWwpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgdmFyIGxvID0gYWw7XG4gIGxvID0gKGxvICsgYmwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGFsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgY2wpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGNsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZGwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGRsID8gMSA6IDA7XG4gIGxvID0gKGxvICsgZWwpID4+PiAwO1xuICBjYXJyeSArPSBsbyA8IGVsID8gMSA6IDA7XG5cbiAgdmFyIGhpID0gYWggKyBiaCArIGNoICsgZGggKyBlaCArIGNhcnJ5O1xuICByZXR1cm4gaGkgPj4+IDA7XG59XG5leHBvcnRzLnN1bTY0XzVfaGkgPSBzdW02NF81X2hpO1xuXG5mdW5jdGlvbiBzdW02NF81X2xvKGFoLCBhbCwgYmgsIGJsLCBjaCwgY2wsIGRoLCBkbCwgZWgsIGVsKSB7XG4gIHZhciBsbyA9IGFsICsgYmwgKyBjbCArIGRsICsgZWw7XG5cbiAgcmV0dXJuIGxvID4+PiAwO1xufVxuZXhwb3J0cy5zdW02NF81X2xvID0gc3VtNjRfNV9sbztcblxuZnVuY3Rpb24gcm90cjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHZhciByID0gKGFsIDw8ICgzMiAtIG51bSkpIHwgKGFoID4+PiBudW0pO1xuICByZXR1cm4gciA+Pj4gMDtcbn1cbmV4cG9ydHMucm90cjY0X2hpID0gcm90cjY0X2hpO1xuXG5mdW5jdGlvbiByb3RyNjRfbG8oYWgsIGFsLCBudW0pIHtcbiAgdmFyIHIgPSAoYWggPDwgKDMyIC0gbnVtKSkgfCAoYWwgPj4+IG51bSk7XG4gIHJldHVybiByID4+PiAwO1xufVxuZXhwb3J0cy5yb3RyNjRfbG8gPSByb3RyNjRfbG87XG5cbmZ1bmN0aW9uIHNocjY0X2hpKGFoLCBhbCwgbnVtKSB7XG4gIHJldHVybiBhaCA+Pj4gbnVtO1xufVxuZXhwb3J0cy5zaHI2NF9oaSA9IHNocjY0X2hpO1xuXG5mdW5jdGlvbiBzaHI2NF9sbyhhaCwgYWwsIG51bSkge1xuICB2YXIgciA9IChhaCA8PCAoMzIgLSBudW0pKSB8IChhbCA+Pj4gbnVtKTtcbiAgcmV0dXJuIHIgPj4+IDA7XG59XG5leHBvcnRzLnNocjY0X2xvID0gc2hyNjRfbG87XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6436\n")},5717:function(module){eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcxNy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzNmYjUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGVcbiAgICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5717\n")},9496:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar has = __webpack_require__(7642);\nvar channel = __webpack_require__(7478)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar SLOT = {\n\tassert: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tchannel.assert(O);\n\t},\n\tget: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn slots && slots['$' + slot];\n\t},\n\thas: function (O, slot) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\treturn !!slots && has(slots, '$' + slot);\n\t},\n\tset: function (O, slot, V) {\n\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\tthrow new $TypeError('`O` is not an object');\n\t\t}\n\t\tif (typeof slot !== 'string') {\n\t\t\tthrow new $TypeError('`slot` must be a string');\n\t\t}\n\t\tvar slots = channel.get(O);\n\t\tif (!slots) {\n\t\t\tslots = {};\n\t\t\tchannel.set(O, slots);\n\t\t}\n\t\tslots['$' + slot] = V;\n\t}\n};\n\nif (Object.freeze) {\n\tObject.freeze(SLOT);\n}\n\nmodule.exports = SLOT;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTQ5Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxJQUFLO0FBQ3ZCLGNBQWMsbUJBQU8sQ0FBQyxJQUFjOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90L2luZGV4LmpzPzY1ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xudmFyIGNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFNMT1QgPSB7XG5cdGFzc2VydDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0Y2hhbm5lbC5hc3NlcnQoTyk7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24gKE8sIHNsb3QpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0cmV0dXJuIHNsb3RzICYmIHNsb3RzWyckJyArIHNsb3RdO1xuXHR9LFxuXHRoYXM6IGZ1bmN0aW9uIChPLCBzbG90KSB7XG5cdFx0aWYgKCFPIHx8ICh0eXBlb2YgTyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIE8gIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYE9gIGlzIG5vdCBhbiBvYmplY3QnKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBzbG90ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BzbG90YCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdHZhciBzbG90cyA9IGNoYW5uZWwuZ2V0KE8pO1xuXHRcdHJldHVybiAhIXNsb3RzICYmIGhhcyhzbG90cywgJyQnICsgc2xvdCk7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24gKE8sIHNsb3QsIFYpIHtcblx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgT2AgaXMgbm90IGFuIG9iamVjdCcpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHNsb3QgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHNsb3RgIG11c3QgYmUgYSBzdHJpbmcnKTtcblx0XHR9XG5cdFx0dmFyIHNsb3RzID0gY2hhbm5lbC5nZXQoTyk7XG5cdFx0aWYgKCFzbG90cykge1xuXHRcdFx0c2xvdHMgPSB7fTtcblx0XHRcdGNoYW5uZWwuc2V0KE8sIHNsb3RzKTtcblx0XHR9XG5cdFx0c2xvdHNbJyQnICsgc2xvdF0gPSBWO1xuXHR9XG59O1xuXG5pZiAoT2JqZWN0LmZyZWV6ZSkge1xuXHRPYmplY3QuZnJlZXplKFNMT1QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNMT1Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9496\n")},5320:function(module){"use strict";eval("\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSw2QkFBNkIsV0FBVztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSxJQUFJO0FBQ0osaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLGdCQUFnQjtBQUNoQixrRUFBa0U7QUFDbEUseURBQXlEO0FBQ3pELHdCQUF3QjtBQUN4Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcz8yMWQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5320\n")},8923:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = __webpack_require__(6410)();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODkyMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsSUFBdUI7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanM/MGU2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8923\n")},8420:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBound = __webpack_require__(1924);\nvar hasToStringTag = __webpack_require__(6410)();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQyMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQyxJQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzP2Q4ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXM7XG52YXIgJGV4ZWM7XG52YXIgaXNSZWdleE1hcmtlcjtcbnZhciBiYWRTdHJpbmdpZmllcjtcblxuaWYgKGhhc1RvU3RyaW5nVGFnKSB7XG5cdGhhcyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eScpO1xuXHQkZXhlYyA9IGNhbGxCb3VuZCgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cdGlzUmVnZXhNYXJrZXIgPSB7fTtcblxuXHR2YXIgdGhyb3dSZWdleE1hcmtlciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aHJvdyBpc1JlZ2V4TWFya2VyO1xuXHR9O1xuXHRiYWRTdHJpbmdpZmllciA9IHtcblx0XHR0b1N0cmluZzogdGhyb3dSZWdleE1hcmtlcixcblx0XHR2YWx1ZU9mOiB0aHJvd1JlZ2V4TWFya2VyXG5cdH07XG5cblx0aWYgKHR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUgPT09ICdzeW1ib2wnKSB7XG5cdFx0YmFkU3RyaW5naWZpZXJbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IHRocm93UmVnZXhNYXJrZXI7XG5cdH1cbn1cblxudmFyICR0b1N0cmluZyA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIHJlZ2V4Q2xhc3MgPSAnW29iamVjdCBSZWdFeHBdJztcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNUb1N0cmluZ1RhZ1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0PyBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0aWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBnT1BEKHZhbHVlLCAnbGFzdEluZGV4Jyk7XG5cdFx0dmFyIGhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgaGFzKGRlc2NyaXB0b3IsICd2YWx1ZScpO1xuXHRcdGlmICghaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdCRleGVjKHZhbHVlLCBiYWRTdHJpbmdpZmllcik7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGUgPT09IGlzUmVnZXhNYXJrZXI7XG5cdFx0fVxuXHR9XG5cdDogZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdC8vIEluIG9sZGVyIGJyb3dzZXJzLCB0eXBlb2YgcmVnZXggaW5jb3JyZWN0bHkgcmV0dXJucyAnZnVuY3Rpb24nXG5cdFx0aWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICR0b1N0cmluZyh2YWx1ZSkgPT09IHJlZ2V4Q2xhc3M7XG5cdH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8420\n")},2636:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = __webpack_require__(1405)();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && 0;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsU0FBUyxNQUFLLElBQUksQ0FBSztBQUN2QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanM/ZmVjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxuaWYgKGhhc1N5bWJvbHMpIHtcblx0dmFyIHN5bVRvU3RyID0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIHN5bVN0cmluZ1JlZ2V4ID0gL15TeW1ib2xcXCguKlxcKSQvO1xuXHR2YXIgaXNTeW1ib2xPYmplY3QgPSBmdW5jdGlvbiBpc1JlYWxTeW1ib2xPYmplY3QodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlLnZhbHVlT2YoKSAhPT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHN5bVN0cmluZ1JlZ2V4LnRlc3Qoc3ltVG9TdHIuY2FsbCh2YWx1ZSkpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmICh0b1N0ci5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBpc1N5bWJvbE9iamVjdCh2YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcbn0gZWxzZSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdC8vIHRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBTeW1ib2xzLlxuXHRcdHJldHVybiBmYWxzZSAmJiB2YWx1ZTtcblx0fTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2636\n")},9746:function(module){eval("module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydC9pbmRleC5qcz9kYTNlIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gYXNzZXJ0O1xuXG5mdW5jdGlvbiBhc3NlcnQodmFsLCBtc2cpIHtcbiAgaWYgKCF2YWwpXG4gICAgdGhyb3cgbmV3IEVycm9yKG1zZyB8fCAnQXNzZXJ0aW9uIGZhaWxlZCcpO1xufVxuXG5hc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBhc3NlcnRFcXVhbChsLCByLCBtc2cpIHtcbiAgaWYgKGwgIT0gcilcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnIHx8ICgnQXNzZXJ0aW9uIGZhaWxlZDogJyArIGwgKyAnICE9ICcgKyByKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9746\n")},631:function(module,__unused_webpack_exports,__webpack_require__){eval("var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nvar inspectCustom = __webpack_require__(4654).custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n return String(obj);\n }\n if (typeof obj === 'bigint') {\n return String(obj) + 'n';\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = seen.slice();\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function') {\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + String(obj.nodeName).toLowerCase();\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + xs.join(', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n return obj[inspectSymbol]();\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + ys.join(', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return String(s).replace(/\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = Array(opts.indent + 1).join(' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: Array(depth + 1).join(baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ((/[^\\w$]/).test(key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdC9pbmRleC5qcz8yNzE0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIE1hcC5wcm90b3R5cGU7XG52YXIgbWFwU2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc01hcCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTWFwLnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgbWFwU2l6ZSA9IGhhc01hcCAmJiBtYXBTaXplRGVzY3JpcHRvciAmJiB0eXBlb2YgbWFwU2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gbWFwU2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBtYXBGb3JFYWNoID0gaGFzTWFwICYmIE1hcC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNTZXQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nICYmIFNldC5wcm90b3R5cGU7XG52YXIgc2V0U2l6ZURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIGhhc1NldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU2V0LnByb3RvdHlwZSwgJ3NpemUnKSA6IG51bGw7XG52YXIgc2V0U2l6ZSA9IGhhc1NldCAmJiBzZXRTaXplRGVzY3JpcHRvciAmJiB0eXBlb2Ygc2V0U2l6ZURlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nID8gc2V0U2l6ZURlc2NyaXB0b3IuZ2V0IDogbnVsbDtcbnZhciBzZXRGb3JFYWNoID0gaGFzU2V0ICYmIFNldC5wcm90b3R5cGUuZm9yRWFjaDtcbnZhciBoYXNXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgV2Vha01hcC5wcm90b3R5cGU7XG52YXIgd2Vha01hcEhhcyA9IGhhc1dlYWtNYXAgPyBXZWFrTWFwLnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrU2V0LnByb3RvdHlwZTtcbnZhciB3ZWFrU2V0SGFzID0gaGFzV2Vha1NldCA/IFdlYWtTZXQucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1JlZiA9IHR5cGVvZiBXZWFrUmVmID09PSAnZnVuY3Rpb24nICYmIFdlYWtSZWYucHJvdG90eXBlO1xudmFyIHdlYWtSZWZEZXJlZiA9IGhhc1dlYWtSZWYgPyBXZWFrUmVmLnByb3RvdHlwZS5kZXJlZiA6IG51bGw7XG52YXIgYm9vbGVhblZhbHVlT2YgPSBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mO1xudmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciBiaWdJbnRWYWx1ZU9mID0gdHlwZW9mIEJpZ0ludCA9PT0gJ2Z1bmN0aW9uJyA/IEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZiA6IG51bGw7XG52YXIgZ09QUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgc3ltVG9TdHJpbmcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnID8gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyA6IG51bGw7XG52YXIgaGFzU2hhbW1lZFN5bWJvbHMgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdvYmplY3QnO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbnZhciBpbnNwZWN0Q3VzdG9tID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKS5jdXN0b207XG52YXIgaW5zcGVjdFN5bWJvbCA9IGluc3BlY3RDdXN0b20gJiYgaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcbnZhciB0b1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb25zIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9IHNlZW4uc2xpY2UoKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArIGtleXMuam9pbignLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/IFN0cmluZyhvYmopLnJlcGxhY2UoL14oU3ltYm9sXFwoLipcXCkpX1teKV0qJC8sICckMScpIDogc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgIWhhc1NoYW1tZWRTeW1ib2xzID8gbWFya0JveGVkKHN5bVN0cmluZykgOiBzeW1TdHJpbmc7XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQob2JqKSkge1xuICAgICAgICB2YXIgcyA9ICc8JyArIFN0cmluZyhvYmoubm9kZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgU3RyaW5nKG9iai5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArIHhzLmpvaW4oJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgcGFydHMuam9pbignLCAnKSArICcgfSc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBjdXN0b21JbnNwZWN0KSB7XG4gICAgICAgIGlmIChpbnNwZWN0U3ltYm9sICYmIHR5cGVvZiBvYmpbaW5zcGVjdFN5bWJvbF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbaW5zcGVjdFN5bWJvbF0oKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgbWFwUGFydHMucHVzaChpbnNwZWN0KGtleSwgb2JqLCB0cnVlKSArICcgPT4gJyArIGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignTWFwJywgbWFwU2l6ZS5jYWxsKG9iaiksIG1hcFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNTZXQob2JqKSkge1xuICAgICAgICB2YXIgc2V0UGFydHMgPSBbXTtcbiAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyB0b1N0cihvYmopLnNsaWNlKDgsIC0xKSA6IHByb3RvVGFnID8gJ09iamVjdCcgOiAnJztcbiAgICAgICAgdmFyIGNvbnN0cnVjdG9yVGFnID0gaXNQbGFpbk9iamVjdCB8fCB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yICE9PSAnZnVuY3Rpb24nID8gJycgOiBvYmouY29uc3RydWN0b3IubmFtZSA/IG9iai5jb25zdHJ1Y3Rvci5uYW1lICsgJyAnIDogJyc7XG4gICAgICAgIHZhciB0YWcgPSBjb25zdHJ1Y3RvclRhZyArIChzdHJpbmdUYWcgfHwgcHJvdG9UYWcgPyAnWycgKyBbXS5jb25jYXQoc3RyaW5nVGFnIHx8IFtdLCBwcm90b1RhZyB8fCBbXSkuam9pbignOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArIHlzLmpvaW4oJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG59O1xuXG5mdW5jdGlvbiB3cmFwUXVvdGVzKHMsIGRlZmF1bHRTdHlsZSwgb3B0cykge1xuICAgIHZhciBxdW90ZUNoYXIgPSAob3B0cy5xdW90ZVN0eWxlIHx8IGRlZmF1bHRTdHlsZSkgPT09ICdkb3VibGUnID8gJ1wiJyA6IFwiJ1wiO1xuICAgIHJldHVybiBxdW90ZUNoYXIgKyBzICsgcXVvdGVDaGFyO1xufVxuXG5mdW5jdGlvbiBxdW90ZShzKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9IG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKHN0ci5zbGljZSgwLCBvcHRzLm1heFN0cmluZ0xlbmd0aCksIG9wdHMpICsgdHJhaWxlcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICB2YXIgcyA9IHN0ci5yZXBsYWNlKC8oWydcXFxcXSkvZywgJ1xcXFwkMScpLnJlcGxhY2UoL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiBlbnRyaWVzLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9IEFycmF5KG9wdHMuaW5kZW50ICsgMSkuam9pbignICcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBiYXNlSW5kZW50LFxuICAgICAgICBwcmV2OiBBcnJheShkZXB0aCArIDEpLmpvaW4oYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyB4cy5qb2luKCcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCgvW15cXHckXS8pLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///631\n")},8987:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = __webpack_require__(1414); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODk4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLElBQWUsR0FBRztBQUN4QztBQUNBLDJDQUEyQyxnQkFBZ0I7QUFDM0QsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanM/YjE4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8987\n")},2215:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar slice = Array.prototype.slice;\nvar isArgs = __webpack_require__(1414);\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(8987);\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIxNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxJQUFlOztBQUVwQztBQUNBLDZDQUE2QyxzQkFBc0IsRUFBRSxtQkFBTyxDQUFDLElBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pbmRleC5qcz9kNmM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTtcblxudmFyIG9yaWdLZXlzID0gT2JqZWN0LmtleXM7XG52YXIga2V5c1NoaW0gPSBvcmlnS2V5cyA/IGZ1bmN0aW9uIGtleXMobykgeyByZXR1cm4gb3JpZ0tleXMobyk7IH0gOiByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBvcmlnaW5hbEtleXMgPSBPYmplY3Qua2V5cztcblxua2V5c1NoaW0uc2hpbSA9IGZ1bmN0aW9uIHNoaW1PYmplY3RLZXlzKCkge1xuXHRpZiAoT2JqZWN0LmtleXMpIHtcblx0XHR2YXIga2V5c1dvcmtzV2l0aEFyZ3VtZW50cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBTYWZhcmkgNS4wIGJ1Z1xuXHRcdFx0dmFyIGFyZ3MgPSBPYmplY3Qua2V5cyhhcmd1bWVudHMpO1xuXHRcdFx0cmV0dXJuIGFyZ3MgJiYgYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0fSgxLCAyKSk7XG5cdFx0aWYgKCFrZXlzV29ya3NXaXRoQXJndW1lbnRzKSB7XG5cdFx0XHRPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZnVuYy1uYW1lLW1hdGNoaW5nXG5cdFx0XHRcdGlmIChpc0FyZ3Mob2JqZWN0KSkge1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMoc2xpY2UuY2FsbChvYmplY3QpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKG9iamVjdCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRPYmplY3Qua2V5cyA9IGtleXNTaGltO1xuXHR9XG5cdHJldHVybiBPYmplY3Qua2V5cyB8fCBrZXlzU2hpbTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2215\n")},1414:function(module){"use strict";eval("\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQxNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaXNBcmd1bWVudHMuanM/ZDRhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHtcblx0dmFyIHN0ciA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHR2YXIgaXNBcmdzID0gc3RyID09PSAnW29iamVjdCBBcmd1bWVudHNdJztcblx0aWYgKCFpc0FyZ3MpIHtcblx0XHRpc0FyZ3MgPSBzdHIgIT09ICdbb2JqZWN0IEFycmF5XScgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG5cdFx0XHR0eXBlb2YgdmFsdWUubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuXHRcdFx0dmFsdWUubGVuZ3RoID49IDAgJiZcblx0XHRcdHRvU3RyLmNhbGwodmFsdWUuY2FsbGVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblx0fVxuXHRyZXR1cm4gaXNBcmdzO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1414\n")},3697:function(module){"use strict";eval("\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY5Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL2ltcGxlbWVudGF0aW9uLmpzPzU3MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYWdzKCkge1xuXHRpZiAodGhpcyAhPSBudWxsICYmIHRoaXMgIT09ICRPYmplY3QodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwLnByb3RvdHlwZS5mbGFncyBnZXR0ZXIgY2FsbGVkIG9uIG5vbi1vYmplY3QnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gJyc7XG5cdGlmICh0aGlzLmdsb2JhbCkge1xuXHRcdHJlc3VsdCArPSAnZyc7XG5cdH1cblx0aWYgKHRoaXMuaWdub3JlQ2FzZSkge1xuXHRcdHJlc3VsdCArPSAnaSc7XG5cdH1cblx0aWYgKHRoaXMubXVsdGlsaW5lKSB7XG5cdFx0cmVzdWx0ICs9ICdtJztcblx0fVxuXHRpZiAodGhpcy5kb3RBbGwpIHtcblx0XHRyZXN1bHQgKz0gJ3MnO1xuXHR9XG5cdGlmICh0aGlzLnVuaWNvZGUpIHtcblx0XHRyZXN1bHQgKz0gJ3UnO1xuXHR9XG5cdGlmICh0aGlzLnN0aWNreSkge1xuXHRcdHJlc3VsdCArPSAneSc7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3697\n")},2847:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar callBind = __webpack_require__(5559);\n\nvar implementation = __webpack_require__(3697);\nvar getPolyfill = __webpack_require__(1721);\nvar shim = __webpack_require__(2753);\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjg0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLElBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9pbmRleC5qcz9lNzEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGZsYWdzQm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShmbGFnc0JvdW5kLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGFnc0JvdW5kO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2847\n")},1721:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(3697);\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcyMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0MsMEJBQTBCLDZDQUFnRDtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvcmVnZXhwLnByb3RvdHlwZS5mbGFncy9wb2x5ZmlsbC5qcz81N2VjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJykuc3VwcG9ydHNEZXNjcmlwdG9ycztcbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0aWYgKCgvYS9taWcpLmZsYWdzID09PSAnZ2ltJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gJGdPUEQoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJyk7XG5cdFx0aWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiAoL2EvKS5kb3RBbGwgPT09ICdib29sZWFuJykge1xuXHRcdFx0cmV0dXJuIGRlc2NyaXB0b3IuZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1721\n")},2753:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar supportsDescriptors = __webpack_require__(4289).supportsDescriptors;\nvar getPolyfill = __webpack_require__(1721);\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc1My5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsNkNBQWdEO0FBQzFFLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzL3NoaW0uanM/MWM3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgcmVnZXggPSAvYS87XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUZsYWdzKCkge1xuXHRpZiAoIXN1cHBvcnRzRGVzY3JpcHRvcnMgfHwgIWdldFByb3RvKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1JlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgcmVxdWlyZXMgYSB0cnVlIEVTNSBlbnZpcm9ubWVudCB0aGF0IHN1cHBvcnRzIHByb3BlcnR5IGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0dmFyIHByb3RvID0gZ2V0UHJvdG8ocmVnZXgpO1xuXHR2YXIgZGVzY3JpcHRvciA9IGdPUEQocHJvdG8sICdmbGFncycpO1xuXHRpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5nZXQgIT09IHBvbHlmaWxsKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkocHJvdG8sICdmbGFncycsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiBwb2x5ZmlsbFxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2753\n")},7478:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\nvar inspect = __webpack_require__(631);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzQ3OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLGNBQWMsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLDZCQUE2Qiw2QkFBNkI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcz81NDAyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaW5zcGVjdCA9IHJlcXVpcmUoJ29iamVjdC1pbnNwZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCByZXR1cm5pbmcgdGhlIG5vZGUgY29ycmVzcG9uZGluZyB0byB0aGVcbiAqIGdpdmVuIGtleS5cbiAqXG4gKiBUaGF0IG5vZGUgaXMgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdCBpZiBpdCdzIGFjY2Vzc2VkXG4gKiBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseVxuICogdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0Zm9yICh2YXIgcHJldiA9IGxpc3QsIGN1cnI7IChjdXJyID0gcHJldi5uZXh0KSAhPT0gbnVsbDsgcHJldiA9IGN1cnIpIHtcblx0XHRpZiAoY3Vyci5rZXkgPT09IGtleSkge1xuXHRcdFx0cHJldi5uZXh0ID0gY3Vyci5uZXh0O1xuXHRcdFx0Y3Vyci5uZXh0ID0gbGlzdC5uZXh0O1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cbn07XG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0U2lkZUNoYW5uZWwoKSB7XG5cdHZhciAkd207XG5cdHZhciAkbTtcblx0dmFyICRvO1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8qXG5cdFx0XHRcdFx0ICogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3QgYXMgYW4gZW1wdHkgbm9kZSwgc28gdGhhdCB3ZSBkb24ndCBoYXZlXG5cdFx0XHRcdFx0ICogdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvXG5cdFx0XHRcdFx0ICogaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7478\n")},9505:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar GetMethod = __webpack_require__(7364);\nvar IsRegExp = __webpack_require__(840);\nvar ToString = __webpack_require__(6846);\nvar RequireObjectCoercible = __webpack_require__(9619);\nvar callBound = __webpack_require__(1924);\nvar hasSymbols = __webpack_require__(1405)();\nvar flagsGetter = __webpack_require__(2847);\n\nvar $indexOf = callBound('String.prototype.indexOf');\n\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar getMatcher = function getMatcher(regexp) { // eslint-disable-line consistent-return\n\tvar matcherPolyfill = regexpMatchAllPolyfill();\n\tif (hasSymbols && typeof Symbol.matchAll === 'symbol') {\n\t\tvar matcher = GetMethod(regexp, Symbol.matchAll);\n\t\tif (matcher === RegExp.prototype[Symbol.matchAll] && matcher !== matcherPolyfill) {\n\t\t\treturn matcherPolyfill;\n\t\t}\n\t\treturn matcher;\n\t}\n\t// fallback for pre-Symbol.matchAll environments\n\tif (IsRegExp(regexp)) {\n\t\treturn matcherPolyfill;\n\t}\n};\n\nmodule.exports = function matchAll(regexp) {\n\tvar O = RequireObjectCoercible(this);\n\n\tif (typeof regexp !== 'undefined' && regexp !== null) {\n\t\tvar isRegExp = IsRegExp(regexp);\n\t\tif (isRegExp) {\n\t\t\t// workaround for older engines that lack RegExp.prototype.flags\n\t\t\tvar flags = 'flags' in regexp ? Get(regexp, 'flags') : flagsGetter(regexp);\n\t\t\tRequireObjectCoercible(flags);\n\t\t\tif ($indexOf(ToString(flags), 'g') < 0) {\n\t\t\t\tthrow new TypeError('matchAll requires a global regular expression');\n\t\t\t}\n\t\t}\n\n\t\tvar matcher = getMatcher(regexp);\n\t\tif (typeof matcher !== 'undefined') {\n\t\t\treturn Call(matcher, regexp, [O]);\n\t\t}\n\t}\n\n\tvar S = ToString(O);\n\t// var rx = RegExpCreate(regexp, 'g');\n\tvar rx = new RegExp(regexp, 'g');\n\treturn Call(getMatcher(rx), rx, [S]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsR0FBdUI7QUFDMUMsVUFBVSxtQkFBTyxDQUFDLElBQXNCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLElBQTRCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsSUFBMkI7QUFDbEQsNkJBQTZCLG1CQUFPLENBQUMsSUFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUEsNkJBQTZCLG1CQUFPLENBQUMsSUFBNEI7O0FBRWpFLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbXBsZW1lbnRhdGlvbi5qcz9jMTdkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIENhbGwgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NhbGwnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEdldE1ldGhvZCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0TWV0aG9kJyk7XG52YXIgSXNSZWdFeHAgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzUmVnRXhwJyk7XG52YXIgVG9TdHJpbmcgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvU3RyaW5nJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGZsYWdzR2V0dGVyID0gcmVxdWlyZSgncmVnZXhwLnByb3RvdHlwZS5mbGFncycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpO1xuXG52YXIgcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsJyk7XG5cbnZhciBnZXRNYXRjaGVyID0gZnVuY3Rpb24gZ2V0TWF0Y2hlcihyZWdleHApIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHR2YXIgbWF0Y2hlclBvbHlmaWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRpZiAoaGFzU3ltYm9scyAmJiB0eXBlb2YgU3ltYm9sLm1hdGNoQWxsID09PSAnc3ltYm9sJykge1xuXHRcdHZhciBtYXRjaGVyID0gR2V0TWV0aG9kKHJlZ2V4cCwgU3ltYm9sLm1hdGNoQWxsKTtcblx0XHRpZiAobWF0Y2hlciA9PT0gUmVnRXhwLnByb3RvdHlwZVtTeW1ib2wubWF0Y2hBbGxdICYmIG1hdGNoZXIgIT09IG1hdGNoZXJQb2x5ZmlsbCkge1xuXHRcdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoZXI7XG5cdH1cblx0Ly8gZmFsbGJhY2sgZm9yIHByZS1TeW1ib2wubWF0Y2hBbGwgZW52aXJvbm1lbnRzXG5cdGlmIChJc1JlZ0V4cChyZWdleHApKSB7XG5cdFx0cmV0dXJuIG1hdGNoZXJQb2x5ZmlsbDtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcblx0dmFyIE8gPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuXG5cdGlmICh0eXBlb2YgcmVnZXhwICE9PSAndW5kZWZpbmVkJyAmJiByZWdleHAgIT09IG51bGwpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBJc1JlZ0V4cChyZWdleHApO1xuXHRcdGlmIChpc1JlZ0V4cCkge1xuXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igb2xkZXIgZW5naW5lcyB0aGF0IGxhY2sgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xuXHRcdFx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiByZWdleHAgPyBHZXQocmVnZXhwLCAnZmxhZ3MnKSA6IGZsYWdzR2V0dGVyKHJlZ2V4cCk7XG5cdFx0XHRSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGZsYWdzKTtcblx0XHRcdGlmICgkaW5kZXhPZihUb1N0cmluZyhmbGFncyksICdnJykgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ21hdGNoQWxsIHJlcXVpcmVzIGEgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBtYXRjaGVyID0gZ2V0TWF0Y2hlcihyZWdleHApO1xuXHRcdGlmICh0eXBlb2YgbWF0Y2hlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBDYWxsKG1hdGNoZXIsIHJlZ2V4cCwgW09dKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgUyA9IFRvU3RyaW5nKE8pO1xuXHQvLyB2YXIgcnggPSBSZWdFeHBDcmVhdGUocmVnZXhwLCAnZycpO1xuXHR2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcblx0cmV0dXJuIENhbGwoZ2V0TWF0Y2hlcihyeCksIHJ4LCBbU10pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9505\n")},4956:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar callBind = __webpack_require__(5559);\nvar define = __webpack_require__(4289);\n\nvar implementation = __webpack_require__(9505);\nvar getPolyfill = __webpack_require__(3447);\nvar shim = __webpack_require__(2376);\n\nvar boundMatchAll = callBind(implementation);\n\ndefine(boundMatchAll, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDk1Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsSUFBVztBQUNsQyxhQUFhLG1CQUFPLENBQUMsSUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLElBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLElBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9pbmRleC5qcz9iMWNjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kTWF0Y2hBbGwgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZE1hdGNoQWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4956\n")},6966:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar hasSymbols = __webpack_require__(1405)();\nvar regexpMatchAll = __webpack_require__(7201);\n\nmodule.exports = function getRegExpMatchAllPolyfill() {\n\tif (!hasSymbols || typeof Symbol.matchAll !== 'symbol' || typeof RegExp.prototype[Symbol.matchAll] !== 'function') {\n\t\treturn regexpMatchAll;\n\t}\n\treturn RegExp.prototype[Symbol.matchAll];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFhO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLElBQW1COztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcG9seWZpbGwtcmVnZXhwLW1hdGNoYWxsLmpzPzZjMTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciByZWdleHBNYXRjaEFsbCA9IHJlcXVpcmUoJy4vcmVnZXhwLW1hdGNoYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UmVnRXhwTWF0Y2hBbGxQb2x5ZmlsbCgpIHtcblx0aWYgKCFoYXNTeW1ib2xzIHx8IHR5cGVvZiBTeW1ib2wubWF0Y2hBbGwgIT09ICdzeW1ib2wnIHx8IHR5cGVvZiBSZWdFeHAucHJvdG90eXBlW1N5bWJvbC5tYXRjaEFsbF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gcmVnZXhwTWF0Y2hBbGw7XG5cdH1cblx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLm1hdGNoQWxsXTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6966\n")},3447:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(9505);\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.matchAll) {\n\t\ttry {\n\t\t\t''.matchAll(RegExp.prototype);\n\t\t} catch (e) {\n\t\t\treturn String.prototype.matchAll;\n\t\t}\n\t}\n\treturn implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQ0Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9wb2x5ZmlsbC5qcz9iOGExIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCkge1xuXHRcdHRyeSB7XG5cdFx0XHQnJy5tYXRjaEFsbChSZWdFeHAucHJvdG90eXBlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3447\n")},7201:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// var Construct = require('es-abstract/2021/Construct');\nvar CreateRegExpStringIterator = __webpack_require__(3937);\nvar Get = __webpack_require__(1391);\nvar Set = __webpack_require__(105);\nvar SpeciesConstructor = __webpack_require__(9655);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\nvar flagsGetter = __webpack_require__(2847);\n\nvar OrigRegExp = RegExp;\n\nvar supportsConstructingWithFlags = 'flags' in RegExp.prototype;\n\nvar constructRegexWithFlags = function constructRegex(C, R) {\n\tvar matcher;\n\t// workaround for older engines that lack RegExp.prototype.flags\n\tvar flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R));\n\tif (supportsConstructingWithFlags && typeof flags === 'string') {\n\t\tmatcher = new C(R, flags);\n\t} else if (C === OrigRegExp) {\n\t\t// workaround for older engines that can not construct a RegExp with flags\n\t\tmatcher = new C(R.source, flags);\n\t} else {\n\t\tmatcher = new C(R, flags);\n\t}\n\treturn { flags: flags, matcher: matcher };\n};\n\nvar regexMatchAll = function SymbolMatchAll(string) {\n\tvar R = this;\n\tif (Type(R) !== 'Object') {\n\t\tthrow new TypeError('\"this\" value must be an Object');\n\t}\n\tvar S = ToString(string);\n\tvar C = SpeciesConstructor(R, OrigRegExp);\n\n\tvar tmp = constructRegexWithFlags(C, R);\n\t// var flags = ToString(Get(R, 'flags'));\n\tvar flags = tmp.flags;\n\t// var matcher = Construct(C, [R, flags]);\n\tvar matcher = tmp.matcher;\n\n\tvar lastIndex = ToLength(Get(R, 'lastIndex'));\n\tSet(matcher, 'lastIndex', lastIndex, true);\n\tvar global = flags.indexOf('g') > -1;\n\tvar fullUnicode = flags.indexOf('u') > -1;\n\treturn CreateRegExpStringIterator(matcher, S, global, fullUnicode);\n};\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nif (defineP && gOPD) {\n\tvar desc = gOPD(regexMatchAll, 'name');\n\tif (desc && desc.configurable) {\n\t\tdefineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' });\n\t}\n}\n\nmodule.exports = regexMatchAll;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzIwMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGlDQUFpQyxtQkFBTyxDQUFDLElBQTZDO0FBQ3RGLFVBQVUsbUJBQU8sQ0FBQyxJQUFzQjtBQUN4QyxVQUFVLG1CQUFPLENBQUMsR0FBc0I7QUFDeEMseUJBQXlCLG1CQUFPLENBQUMsSUFBcUM7QUFDdEUsZUFBZSxtQkFBTyxDQUFDLElBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxJQUEyQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsSUFBdUI7QUFDMUMsa0JBQWtCLG1CQUFPLENBQUMsSUFBd0I7O0FBRWxEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNEJBQTRCO0FBQy9EO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvcmVnZXhwLW1hdGNoYWxsLmpzP2ZhODkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgQ29uc3RydWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Db25zdHJ1Y3QnKTtcbnZhciBDcmVhdGVSZWdFeHBTdHJpbmdJdGVyYXRvciA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3InKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIFNldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2V0Jyk7XG52YXIgU3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9TcGVjaWVzQ29uc3RydWN0b3InKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9UeXBlJyk7XG52YXIgZmxhZ3NHZXR0ZXIgPSByZXF1aXJlKCdyZWdleHAucHJvdG90eXBlLmZsYWdzJyk7XG5cbnZhciBPcmlnUmVnRXhwID0gUmVnRXhwO1xuXG52YXIgc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyA9IGZ1bmN0aW9uIGNvbnN0cnVjdFJlZ2V4KEMsIFIpIHtcblx0dmFyIG1hdGNoZXI7XG5cdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBsYWNrIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Ncblx0dmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSID8gR2V0KFIsICdmbGFncycpIDogVG9TdHJpbmcoZmxhZ3NHZXR0ZXIoUikpO1xuXHRpZiAoc3VwcG9ydHNDb25zdHJ1Y3RpbmdXaXRoRmxhZ3MgJiYgdHlwZW9mIGZsYWdzID09PSAnc3RyaW5nJykge1xuXHRcdG1hdGNoZXIgPSBuZXcgQyhSLCBmbGFncyk7XG5cdH0gZWxzZSBpZiAoQyA9PT0gT3JpZ1JlZ0V4cCkge1xuXHRcdC8vIHdvcmthcm91bmQgZm9yIG9sZGVyIGVuZ2luZXMgdGhhdCBjYW4gbm90IGNvbnN0cnVjdCBhIFJlZ0V4cCB3aXRoIGZsYWdzXG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIuc291cmNlLCBmbGFncyk7XG5cdH0gZWxzZSB7XG5cdFx0bWF0Y2hlciA9IG5ldyBDKFIsIGZsYWdzKTtcblx0fVxuXHRyZXR1cm4geyBmbGFnczogZmxhZ3MsIG1hdGNoZXI6IG1hdGNoZXIgfTtcbn07XG5cbnZhciByZWdleE1hdGNoQWxsID0gZnVuY3Rpb24gU3ltYm9sTWF0Y2hBbGwoc3RyaW5nKSB7XG5cdHZhciBSID0gdGhpcztcblx0aWYgKFR5cGUoUikgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgdmFsdWUgbXVzdCBiZSBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9IFRvU3RyaW5nKHN0cmluZyk7XG5cdHZhciBDID0gU3BlY2llc0NvbnN0cnVjdG9yKFIsIE9yaWdSZWdFeHApO1xuXG5cdHZhciB0bXAgPSBjb25zdHJ1Y3RSZWdleFdpdGhGbGFncyhDLCBSKTtcblx0Ly8gdmFyIGZsYWdzID0gVG9TdHJpbmcoR2V0KFIsICdmbGFncycpKTtcblx0dmFyIGZsYWdzID0gdG1wLmZsYWdzO1xuXHQvLyB2YXIgbWF0Y2hlciA9IENvbnN0cnVjdChDLCBbUiwgZmxhZ3NdKTtcblx0dmFyIG1hdGNoZXIgPSB0bXAubWF0Y2hlcjtcblxuXHR2YXIgbGFzdEluZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFNldChtYXRjaGVyLCAnbGFzdEluZGV4JywgbGFzdEluZGV4LCB0cnVlKTtcblx0dmFyIGdsb2JhbCA9IGZsYWdzLmluZGV4T2YoJ2cnKSA+IC0xO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBmbGFncy5pbmRleE9mKCd1JykgPiAtMTtcblx0cmV0dXJuIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0dmFyIGRlc2MgPSBnT1BEKHJlZ2V4TWF0Y2hBbGwsICduYW1lJyk7XG5cdGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0ZGVmaW5lUChyZWdleE1hdGNoQWxsLCAnbmFtZScsIHsgdmFsdWU6ICdbU3ltYm9sLm1hdGNoQWxsXScgfSk7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdleE1hdGNoQWxsO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7201\n")},2376:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(4289);\nvar hasSymbols = __webpack_require__(1405)();\nvar getPolyfill = __webpack_require__(3447);\nvar regexpMatchAllPolyfill = __webpack_require__(6966);\n\nvar defineP = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function shimMatchAll() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tString.prototype,\n\t\t{ matchAll: polyfill },\n\t\t{ matchAll: function () { return String.prototype.matchAll !== polyfill; } }\n\t);\n\tif (hasSymbols) {\n\t\t// eslint-disable-next-line no-restricted-properties\n\t\tvar symbol = Symbol.matchAll || (Symbol['for'] ? Symbol['for']('Symbol.matchAll') : Symbol('Symbol.matchAll'));\n\t\tdefine(\n\t\t\tSymbol,\n\t\t\t{ matchAll: symbol },\n\t\t\t{ matchAll: function () { return Symbol.matchAll !== symbol; } }\n\t\t);\n\n\t\tif (defineP && gOPD) {\n\t\t\tvar desc = gOPD(Symbol, symbol);\n\t\t\tif (!desc || desc.configurable) {\n\t\t\t\tdefineP(Symbol, symbol, {\n\t\t\t\t\tconfigurable: false,\n\t\t\t\t\tenumerable: false,\n\t\t\t\t\tvalue: symbol,\n\t\t\t\t\twritable: false\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar regexpMatchAll = regexpMatchAllPolyfill();\n\t\tvar func = {};\n\t\tfunc[symbol] = regexpMatchAll;\n\t\tvar predicate = {};\n\t\tpredicate[symbol] = function () {\n\t\t\treturn RegExp.prototype[symbol] !== regexpMatchAll;\n\t\t};\n\t\tdefine(RegExp.prototype, func, predicate);\n\t}\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjM3Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsSUFBbUI7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsSUFBYTtBQUN0QyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFZO0FBQ3RDLDZCQUE2QixtQkFBTyxDQUFDLElBQTRCOztBQUVqRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx3QkFBd0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxrQkFBa0I7QUFDdkIsS0FBSyx3QkFBd0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvc2hpbS5qcz85Yzg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciByZWdleHBNYXRjaEFsbFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbC1yZWdleHAtbWF0Y2hhbGwnKTtcblxudmFyIGRlZmluZVAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU1hdGNoQWxsKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0U3RyaW5nLnByb3RvdHlwZSxcblx0XHR7IG1hdGNoQWxsOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWF0Y2hBbGw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0aWYgKGhhc1N5bWJvbHMpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0dmFyIHN5bWJvbCA9IFN5bWJvbC5tYXRjaEFsbCB8fCAoU3ltYm9sWydmb3InXSA/IFN5bWJvbFsnZm9yJ10oJ1N5bWJvbC5tYXRjaEFsbCcpIDogU3ltYm9sKCdTeW1ib2wubWF0Y2hBbGwnKSk7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0U3ltYm9sLFxuXHRcdFx0eyBtYXRjaEFsbDogc3ltYm9sIH0sXG5cdFx0XHR7IG1hdGNoQWxsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBTeW1ib2wubWF0Y2hBbGwgIT09IHN5bWJvbDsgfSB9XG5cdFx0KTtcblxuXHRcdGlmIChkZWZpbmVQICYmIGdPUEQpIHtcblx0XHRcdHZhciBkZXNjID0gZ09QRChTeW1ib2wsIHN5bWJvbCk7XG5cdFx0XHRpZiAoIWRlc2MgfHwgZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdFx0ZGVmaW5lUChTeW1ib2wsIHN5bWJvbCwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdFx0dmFsdWU6IHN5bWJvbCxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHJlZ2V4cE1hdGNoQWxsID0gcmVnZXhwTWF0Y2hBbGxQb2x5ZmlsbCgpO1xuXHRcdHZhciBmdW5jID0ge307XG5cdFx0ZnVuY1tzeW1ib2xdID0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0dmFyIHByZWRpY2F0ZSA9IHt9O1xuXHRcdHByZWRpY2F0ZVtzeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGVbc3ltYm9sXSAhPT0gcmVnZXhwTWF0Y2hBbGw7XG5cdFx0fTtcblx0XHRkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgZnVuYywgcHJlZGljYXRlKTtcblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2376\n")},4654:function(){},4766:function(module){eval('!function(t,e){ true?module.exports=e():0}(self,(function(){return(()=>{var t={426:(t,e,n)=>{var r=n(529);function o(t,e,n){Array.isArray(t)?t.push(e):t[n]=e}t.exports=function(t){var e,n,i,u=[];if(Array.isArray(t))n=[],e=t.length-1;else{if("object"!=typeof t||null===t)throw new TypeError("Expecting an Array or an Object, but `"+(null===t?"null":typeof t)+"` provided.");n={},i=Object.keys(t),e=i.length-1}return function n(c,a){var l,s,f,d;for(s=i?i[a]:a,Array.isArray(t[s])||(void 0===t[s]?t[s]=[]:t[s]=[t[s]]),l=0;l=e?u.push(f):n(f,a+1)}(n,0),u}},529:t=>{t.exports=function(){for(var t={},n=0;n{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>X,getCssSelector:()=>Q});var t,e,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};function i(t){return null!=t&&"object"===(void 0===t?"undefined":o(t))&&1===t.nodeType&&"object"===o(t.style)&&"object"===o(t.ownerDocument)}function u(t="unknown problem",...e){console.warn(`CssSelectorGenerator: ${t}`,...e)}!function(t){t.NONE="none",t.DESCENDANT="descendant",t.CHILD="child"}(t||(t={})),function(t){t.id="id",t.class="class",t.tag="tag",t.attribute="attribute",t.nthchild="nthchild",t.nthoftype="nthoftype"}(e||(e={}));const c={selectors:[e.id,e.class,e.tag,e.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY};function a(t){return t instanceof RegExp}function l(t){return["string","function"].includes(typeof t)||a(t)}function s(t){return Array.isArray(t)?t.filter(l):[]}function f(t){const e=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return function(t){return t instanceof Node}(t)&&e.includes(t.nodeType)}function d(t,e){if(f(t))return t.contains(e)||u("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element\'s real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will nto work as intended."),t;const n=e.getRootNode({composed:!1});return f(n)?(n!==document&&u("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),n):e.ownerDocument.querySelector(":root")}function p(t){return"number"==typeof t?t:Number.POSITIVE_INFINITY}function m(t=[]){const[e=[],...n]=t;return 0===n.length?e:n.reduce(((t,e)=>t.filter((t=>e.includes(t)))),e)}function h(t){return[].concat(...t)}function y(t){const e=t.map((t=>{if(a(t))return e=>t.test(e);if("function"==typeof t)return e=>{const n=t(e);return"boolean"!=typeof n?(u("pattern matcher function invalid","Provided pattern matching function does not return boolean. It\'s result will be ignored.",t),!1):n};if("string"==typeof t){const e=new RegExp("^"+t.replace(/[|\\\\{}()[\\]^$+?.]/g,"\\\\$&").replace(/\\*/g,".+")+"$");return t=>e.test(t)}return u("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",t),()=>!1}));return t=>e.some((e=>e(t)))}function g(t,e,n){const r=Array.from(d(n,t[0]).querySelectorAll(e));return r.length===t.length&&t.every((t=>r.includes(t)))}function b(t,e){e=null!=e?e:function(t){return t.ownerDocument.querySelector(":root")}(t);const n=[];let r=t;for(;i(r)&&r!==e;)n.push(r),r=r.parentElement;return n}function v(t,e){return m(t.map((t=>b(t,e))))}const N={[t.NONE]:{type:t.NONE,value:""},[t.DESCENDANT]:{type:t.DESCENDANT,value:" > "},[t.CHILD]:{type:t.CHILD,value:" "}},S=new RegExp(["^$","\\\\s","^\\\\d"].join("|")),E=new RegExp(["^$","^\\\\d"].join("|")),w=[e.nthoftype,e.tag,e.id,e.class,e.attribute,e.nthchild];var x=n(426),A=n.n(x);const C=y(["class","id","ng-*"]);function O({nodeName:t}){return`[${t}]`}function T({nodeName:t,nodeValue:e}){return`[${t}=\'${Y(e)}\']`}function I({nodeName:t}){return!C(t)}function j(t){const e=Array.from(t.attributes).filter(I);return[...e.map(O),...e.map(T)]}function D(t){return(t.getAttribute("class")||"").trim().split(/\\s+/).filter((t=>!E.test(t))).map((t=>`.${Y(t)}`))}function $(t){const e=t.getAttribute("id")||"",n=`#${Y(e)}`,r=t.getRootNode({composed:!1});return!S.test(e)&&g([t],n,r)?[n]:[]}function P(t){const e=t.parentNode;if(e){const n=Array.from(e.childNodes).filter(i).indexOf(t);if(n>-1)return[`:nth-child(${n+1})`]}return[]}function R(t){return[Y(t.tagName.toLowerCase())]}function _(t){const e=[...new Set(h(t.map(R)))];return 0===e.length||e.length>1?[]:[e[0]]}function k(t){const e=_([t])[0],n=t.parentElement;if(n){const r=Array.from(n.children).filter((t=>t.tagName.toLowerCase()===e)).indexOf(t);if(r>-1)return[`${e}:nth-of-type(${r+1})`]}return[]}function M(t=[],{maxResults:e=Number.POSITIVE_INFINITY}={}){const n=[];let r=0,o=q(1);for(;o.length<=t.length&&rt[e]))),o=L(o,t.length-1);return n}function L(t=[],e=0){const n=t.length;if(0===n)return[];const r=[...t];r[n-1]+=1;for(let t=n-1;t>=0;t--)if(r[t]>e){if(0===t)return q(n+1);r[t-1]++,r[t]=r[t-1]+1}return r[n-1]>e?q(n+1):r}function q(t=1){return Array.from(Array(t).keys())}const F=":".charCodeAt(0).toString(16).toUpperCase(),V=/[ !"#$%&\'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;function Y(t=""){var e,n;return null!==(n=null===(e=null===CSS||void 0===CSS?void 0:CSS.escape)||void 0===e?void 0:e.call(CSS,t))&&void 0!==n?n:function(t=""){return t.split("").map((t=>":"===t?`\\\\${F} `:V.test(t)?`\\\\${t}`:escape(t).replace(/%/g,"\\\\"))).join("")}(t)}const B={tag:_,id:function(t){return 0===t.length||t.length>1?[]:$(t[0])},class:function(t){return m(t.map(D))},attribute:function(t){return m(t.map(j))},nthchild:function(t){return m(t.map(P))},nthoftype:function(t){return m(t.map(k))}},G={tag:R,id:$,class:D,attribute:j,nthchild:P,nthoftype:k};function W(t){return t.includes(e.tag)||t.includes(e.nthoftype)?[...t]:[...t,e.tag]}function H(t={}){const n=[...w];return t[e.tag]&&t[e.nthoftype]&&n.splice(n.indexOf(e.tag),1),n.map((e=>{return(r=t)[n=e]?r[n].join(""):"";var n,r})).join("")}function U(t,e,n="",r){const o=function(t,e){return""===e?t:function(t,e){return[...t.map((t=>e+" "+t)),...t.map((t=>e+" > "+t))]}(t,e)}(function(t,e,n){const r=h(function(t,e){return function(t){const{selectors:e,combineBetweenSelectors:n,includeTag:r,maxCandidates:o}=t,i=n?M(e,{maxResults:o}):e.map((t=>[t]));return r?i.map(W):i}(e).map((e=>function(t,e){const n={};return t.forEach((t=>{const r=e[t];r.length>0&&(n[t]=r)})),A()(n).map(H)}(e,t))).filter((t=>t.length>0))}(function(t,e){const{blacklist:n,whitelist:r,combineWithinSelector:o,maxCombinations:i}=e,u=y(n),c=y(r);return function(t){const{selectors:e,includeTag:n}=t,r=[].concat(e);return n&&!r.includes("tag")&&r.push("tag"),r}(e).reduce(((e,n)=>{const r=function(t=[],e){return t.sort(((t,n)=>{const r=e(t),o=e(n);return r&&!o?-1:!r&&o?1:0}))}(function(t=[],e,n){return t.filter((t=>n(t)||!e(t)))}(function(t,e){var n;return(null!==(n=B[e])&&void 0!==n?n:()=>[])(t)}(t,n),u,c),c);return e[n]=o?M(r,{maxResults:i}):r.map((t=>[t])),e}),{})}(t,n),n));return[...new Set(r)]}(t,r.root,r),n);for(const e of o)if(g(t,e,r.root))return e;return null}function z(t){return{value:t,include:!1}}function J({selectors:t,operator:n}){let r=[...w];t[e.tag]&&t[e.nthoftype]&&(r=r.filter((t=>t!==e.tag)));let o="";return r.forEach((e=>{(t[e]||[]).forEach((({value:t,include:e})=>{e&&(o+=t)}))})),n.value+o}function K(n){return[":root",...b(n).reverse().map((n=>{const r=function(e,n,r=t.NONE){const o={};return n.forEach((t=>{Reflect.set(o,t,function(t,e){return G[e](t)}(e,t).map(z))})),{element:e,operator:N[r],selectors:o}}(n,[e.nthchild],t.DESCENDANT);return r.selectors.nthchild.forEach((t=>{t.include=!0})),r})).map(J)].join("")}function Q(t,n={}){const r=function(t){const e=(Array.isArray(t)?t:[t]).filter(i);return[...new Set(e)]}(t),o=function(t,n={}){const r=Object.assign(Object.assign({},c),n);return{selectors:(o=r.selectors,Array.isArray(o)?o.filter((t=>{return n=e,r=t,Object.values(n).includes(r);var n,r})):[]),whitelist:s(r.whitelist),blacklist:s(r.blacklist),root:d(r.root,t),combineWithinSelector:!!r.combineWithinSelector,combineBetweenSelectors:!!r.combineBetweenSelectors,includeTag:!!r.includeTag,maxCombinations:p(r.maxCombinations),maxCandidates:p(r.maxCandidates)};var o}(r[0],n);let u="",a=o.root;function l(){return function(t,e,n="",r){if(0===t.length)return null;const o=[t.length>1?t:[],...v(t,e).map((t=>[t]))];for(const t of o){const e=U(t,0,n,r);if(e)return{foundElements:t,selector:e}}return null}(r,a,u,o)}let f=l();for(;f;){const{foundElements:t,selector:e}=f;if(g(r,e,o.root))return e;a=t[0],u=e,f=l()}return r.length>1?r.map((t=>Q(t,o))).join(", "):function(t){return t.map(K).join(", ")}(r)}const X=Q})(),r})()}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc2Ni5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLEtBQWlELG9CQUFvQixDQUF1SSxDQUFDLGtCQUFrQixZQUFZLE9BQU8sY0FBYyxhQUFhLGtCQUFrQixrQ0FBa0Msc0JBQXNCLGVBQWUsc0NBQXNDLEtBQUssdUlBQXVJLElBQUksK0JBQStCLHVCQUF1QixZQUFZLDRFQUE0RSxjQUFjLG9GQUFvRixTQUFTLFNBQVMscUJBQXFCLFlBQVksS0FBSyxtQkFBbUIsS0FBSyxtQkFBbUIsd0NBQXdDLFVBQVUsdUNBQXVDLE1BQU0sY0FBYyxXQUFXLCtCQUErQixZQUFZLFlBQVkscUNBQXFDLFFBQVEsMENBQTBDLGNBQWMsSUFBSSxJQUFJLGFBQWEsK0RBQStELHVCQUF1QixFQUFFLDhEQUE4RCw0RkFBNEYsZUFBZSx3Q0FBd0MsU0FBUyxHQUFHLFNBQVMsWUFBWSxhQUFhLGNBQWMsbUNBQW1DLEVBQUUsa0ZBQWtGLGdCQUFnQixhQUFhLCtFQUErRSxjQUFjLCtIQUErSCxxQ0FBcUMsc0NBQXNDLEVBQUUsUUFBUSxhQUFhLHdEQUF3RCxTQUFTLGVBQWUsNEdBQTRHLFNBQVMsR0FBRyxTQUFTLGtPQUFrTyxjQUFjLDJCQUEyQixjQUFjLHFEQUFxRCxjQUFjLHVDQUF1QyxjQUFjLDJFQUEyRSxtQkFBbUIseUJBQXlCLDRCQUE0QixnQkFBZ0Isc1RBQXNULHVCQUF1QixZQUFZLEVBQUUsdVZBQXVWLGNBQWMsb0RBQW9ELGlCQUFpQixtQkFBbUIsd0VBQXdFLGNBQWMsc0JBQXNCLGNBQWMsbUJBQW1CLDRCQUE0QixtQ0FBbUMsYUFBYSxxS0FBcUssdUJBQXVCLHdDQUF3QywrQ0FBK0Msb0JBQW9CLHNLQUFzSyxHQUFHLDRCQUE0QixrQkFBa0Isa0RBQWtELHdEQUF3RCxnQkFBZ0Isd0JBQXdCLDhDQUE4QyxJQUFJLFdBQVcsUUFBUSxLQUFLLFlBQVksNkJBQTZCLFNBQVMsZ0JBQWdCLDZCQUE2QixTQUFTLFVBQVUscUJBQXFCLGlCQUFpQiw4QkFBOEIsWUFBWSx3QkFBd0IsNklBQTZJLHNCQUFzQixpQ0FBaUMsWUFBWSxXQUFXLEVBQUUsVUFBVSxFQUFFLEdBQUcsWUFBWSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxLQUFLLElBQUksWUFBWSxXQUFXLEVBQUUsWUFBWSxjQUFjLDJDQUEyQyxnQ0FBZ0MsY0FBYyw0RkFBNEYsS0FBSyxJQUFJLGNBQWMsdUNBQXVDLEtBQUssbUJBQW1CLFlBQVksRUFBRSxvQ0FBb0MsY0FBYyxxQkFBcUIsTUFBTSxzREFBc0QsNkJBQTZCLElBQUksSUFBSSxTQUFTLGNBQWMsbUNBQW1DLGNBQWMsa0NBQWtDLDBDQUEwQyxjQUFjLG9DQUFvQyxNQUFNLG1GQUFtRixrQkFBa0IsRUFBRSxlQUFlLElBQUksSUFBSSxTQUFTLGlCQUFpQixzQ0FBc0MsR0FBRyxFQUFFLFdBQVcsZUFBZSxLQUFLLHdCQUF3QixpREFBaUQsU0FBUyxxQkFBcUIsaUJBQWlCLGtCQUFrQixlQUFlLFVBQVUsY0FBYyxLQUFLLGVBQWUsdUJBQXVCLHVCQUF1Qix5QkFBeUIsZ0JBQWdCLG1DQUFtQyx3RUFBd0UsRUFBRSxRQUFRLFdBQVcsaUJBQWlCLFFBQVEsc0lBQXNJLHdDQUF3QyxHQUFHLGlCQUFpQixFQUFFLDBDQUEwQyxJQUFJLFNBQVMscUJBQXFCLDJDQUEyQyxtQkFBbUIsbUJBQW1CLHVCQUF1QixtQkFBbUIsc0JBQXNCLG1CQUFtQix1QkFBdUIsb0JBQW9CLElBQUksdURBQXVELGNBQWMsc0VBQXNFLGVBQWUsRUFBRSxlQUFlLHlFQUF5RSxrQ0FBa0MsUUFBUSxZQUFZLHVCQUF1QixzQkFBc0IsNkJBQTZCLHdEQUF3RCxNQUFNLGlCQUFpQix3QkFBd0IsbUJBQW1CLE1BQU0sbUVBQW1FLFlBQVksYUFBYSxrQkFBa0Isb0JBQW9CLDBCQUEwQixXQUFXLHNCQUFzQixhQUFhLHFCQUFxQixpQkFBaUIsZ0NBQWdDLGVBQWUsTUFBTSxrRUFBa0UsaUJBQWlCLG1CQUFtQixNQUFNLHlCQUF5QixrQkFBa0IsOENBQThDLG9CQUFvQix5QkFBeUIsdUJBQXVCLG9CQUFvQiwwQkFBMEIsR0FBRyxvQkFBb0Isa0NBQWtDLGVBQWUsTUFBTSxnREFBZ0QsY0FBYyxtQkFBbUIsYUFBYSxvQkFBb0IsSUFBSSxFQUFFLFVBQVUsc0JBQXNCLGdCQUFnQiwyQ0FBMkMsWUFBWSxjQUFjLE9BQU8sb0JBQW9CLFlBQVksdUJBQXVCLEVBQUUsYUFBYSx1REFBdUQsU0FBUyxzQkFBc0Isc0JBQXNCLGtCQUFrQixJQUFJLFVBQVUsR0FBRyxhQUFhLGNBQWMsMENBQTBDLCtCQUErQixXQUFXLHNCQUFzQiw4QkFBOEIsZUFBZSxjQUFjLElBQUkscUNBQXFDLDhCQUE4Qix5Q0FBeUMsYUFBYSxLQUFLLG9CQUFvQixpQkFBaUIsRUFBRSxvQkFBb0IsMkNBQTJDLHNCQUFzQixxQkFBcUIsRUFBRSxzQ0FBc0MsT0FBTyxPQUFPLHdEQUF3RCw0Q0FBNEMsUUFBUSwrUUFBK1EsTUFBTSxTQUFTLGtCQUFrQixhQUFhLDRCQUE0Qiw0QkFBNEIsa0RBQWtELGtCQUFrQixtQkFBbUIsWUFBWSw0QkFBNEIsWUFBWSxVQUFVLFVBQVUsS0FBSyxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsR0FBRywwQkFBMEIsaUJBQWlCLDREQUE0RCwyQkFBMkIsSUFBSSxVQUFVLE1BQU0sSUFBSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdG9yLWdlbmVyYXRvci9idWlsZC9pbmRleC5qcz9lZDI0Il0sInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpOnQuQ3NzU2VsZWN0b3JHZW5lcmF0b3I9ZSgpfShzZWxmLChmdW5jdGlvbigpe3JldHVybigoKT0+e3ZhciB0PXs0MjY6KHQsZSxuKT0+e3ZhciByPW4oNTI5KTtmdW5jdGlvbiBvKHQsZSxuKXtBcnJheS5pc0FycmF5KHQpP3QucHVzaChlKTp0W25dPWV9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSx1PVtdO2lmKEFycmF5LmlzQXJyYXkodCkpbj1bXSxlPXQubGVuZ3RoLTE7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGluZyBhbiBBcnJheSBvciBhbiBPYmplY3QsIGJ1dCBgXCIrKG51bGw9PT10P1wibnVsbFwiOnR5cGVvZiB0KStcImAgcHJvdmlkZWQuXCIpO249e30saT1PYmplY3Qua2V5cyh0KSxlPWkubGVuZ3RoLTF9cmV0dXJuIGZ1bmN0aW9uIG4oYyxhKXt2YXIgbCxzLGYsZDtmb3Iocz1pP2lbYV06YSxBcnJheS5pc0FycmF5KHRbc10pfHwodm9pZCAwPT09dFtzXT90W3NdPVtdOnRbc109W3Rbc11dKSxsPTA7bDx0W3NdLmxlbmd0aDtsKyspbygoZD1jLGY9QXJyYXkuaXNBcnJheShkKT9bXS5jb25jYXQoZCk6cihkKSksdFtzXVtsXSxzKSxhPj1lP3UucHVzaChmKTpuKGYsYSsxKX0obiwwKSx1fX0sNTI5OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9e30sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciByPWFyZ3VtZW50c1tuXTtmb3IodmFyIG8gaW4gcillLmNhbGwocixvKSYmKHRbb109cltvXSl9cmV0dXJuIHR9O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9fSxlPXt9O2Z1bmN0aW9uIG4ocil7dmFyIG89ZVtyXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGk9ZVtyXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbcl0oaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4ubj10PT57dmFyIGU9dCYmdC5fX2VzTW9kdWxlPygpPT50LmRlZmF1bHQ6KCk9PnQ7cmV0dXJuIG4uZChlLHthOmV9KSxlfSxuLmQ9KHQsZSk9Pntmb3IodmFyIHIgaW4gZSluLm8oZSxyKSYmIW4ubyh0LHIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHtlbnVtZXJhYmxlOiEwLGdldDplW3JdfSl9LG4ubz0odCxlKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSksbi5yPXQ9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTtyZXR1cm4oKCk9PntcInVzZSBzdHJpY3RcIjtuLnIociksbi5kKHIse2RlZmF1bHQ6KCk9PlgsZ2V0Q3NzU2VsZWN0b3I6KCk9PlF9KTt2YXIgdCxlLG89XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiB0fTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiZcIm9iamVjdFwiPT09KHZvaWQgMD09PXQ/XCJ1bmRlZmluZWRcIjpvKHQpKSYmMT09PXQubm9kZVR5cGUmJlwib2JqZWN0XCI9PT1vKHQuc3R5bGUpJiZcIm9iamVjdFwiPT09byh0Lm93bmVyRG9jdW1lbnQpfWZ1bmN0aW9uIHUodD1cInVua25vd24gcHJvYmxlbVwiLC4uLmUpe2NvbnNvbGUud2FybihgQ3NzU2VsZWN0b3JHZW5lcmF0b3I6ICR7dH1gLC4uLmUpfSFmdW5jdGlvbih0KXt0Lk5PTkU9XCJub25lXCIsdC5ERVNDRU5EQU5UPVwiZGVzY2VuZGFudFwiLHQuQ0hJTEQ9XCJjaGlsZFwifSh0fHwodD17fSkpLGZ1bmN0aW9uKHQpe3QuaWQ9XCJpZFwiLHQuY2xhc3M9XCJjbGFzc1wiLHQudGFnPVwidGFnXCIsdC5hdHRyaWJ1dGU9XCJhdHRyaWJ1dGVcIix0Lm50aGNoaWxkPVwibnRoY2hpbGRcIix0Lm50aG9mdHlwZT1cIm50aG9mdHlwZVwifShlfHwoZT17fSkpO2NvbnN0IGM9e3NlbGVjdG9yczpbZS5pZCxlLmNsYXNzLGUudGFnLGUuYXR0cmlidXRlXSxpbmNsdWRlVGFnOiExLHdoaXRlbGlzdDpbXSxibGFja2xpc3Q6W10sY29tYmluZVdpdGhpblNlbGVjdG9yOiEwLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOiEwLHJvb3Q6bnVsbCxtYXhDb21iaW5hdGlvbnM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG1heENhbmRpZGF0ZXM6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfTtmdW5jdGlvbiBhKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIGwodCl7cmV0dXJuW1wic3RyaW5nXCIsXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgdCl8fGEodCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90LmZpbHRlcihsKTpbXX1mdW5jdGlvbiBmKHQpe2NvbnN0IGU9W05vZGUuRE9DVU1FTlRfTk9ERSxOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsTm9kZS5FTEVNRU5UX05PREVdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV9KHQpJiZlLmluY2x1ZGVzKHQubm9kZVR5cGUpfWZ1bmN0aW9uIGQodCxlKXtpZihmKHQpKXJldHVybiB0LmNvbnRhaW5zKGUpfHx1KFwiZWxlbWVudCByb290IG1pc21hdGNoXCIsXCJQcm92aWRlZCByb290IGRvZXMgbm90IGNvbnRhaW4gdGhlIGVsZW1lbnQuIFRoaXMgd2lsbCBtb3N0IGxpa2VseSByZXN1bHQgaW4gcHJvZHVjaW5nIGEgZmFsbGJhY2sgc2VsZWN0b3IgdXNpbmcgZWxlbWVudCdzIHJlYWwgcm9vdCBub2RlLiBJZiB5b3UgcGxhbiB0byB1c2UgdGhlIHNlbGVjdG9yIHVzaW5nIHByb3ZpZGVkIHJvb3QgKGUuZy4gYHJvb3QucXVlcnlTZWxlY3RvcmApLCBpdCB3aWxsIG50byB3b3JrIGFzIGludGVuZGVkLlwiKSx0O2NvbnN0IG49ZS5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4gZihuKT8obiE9PWRvY3VtZW50JiZ1KFwic2hhZG93IHJvb3QgaW5mZXJyZWRcIixcIllvdSBkaWQgbm90IHByb3ZpZGUgYSByb290IGFuZCB0aGUgZWxlbWVudCBpcyBhIGNoaWxkIG9mIFNoYWRvdyBET00uIFRoaXMgd2lsbCBwcm9kdWNlIGEgc2VsZWN0b3IgdXNpbmcgU2hhZG93Um9vdCBhcyBhIHJvb3QuIElmIHlvdSBwbGFuIHRvIHVzZSB0aGUgc2VsZWN0b3IgdXNpbmcgZG9jdW1lbnQgYXMgYSByb290IChlLmcuIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCksIGl0IHdpbGwgbm90IHdvcmsgYXMgaW50ZW5kZWQuXCIpLG4pOmUub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90Ok51bWJlci5QT1NJVElWRV9JTkZJTklUWX1mdW5jdGlvbiBtKHQ9W10pe2NvbnN0W2U9W10sLi4ubl09dDtyZXR1cm4gMD09PW4ubGVuZ3RoP2U6bi5yZWR1Y2UoKCh0LGUpPT50LmZpbHRlcigodD0+ZS5pbmNsdWRlcyh0KSkpKSxlKX1mdW5jdGlvbiBoKHQpe3JldHVybltdLmNvbmNhdCguLi50KX1mdW5jdGlvbiB5KHQpe2NvbnN0IGU9dC5tYXAoKHQ9PntpZihhKHQpKXJldHVybiBlPT50LnRlc3QoZSk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZT0+e2NvbnN0IG49dChlKTtyZXR1cm5cImJvb2xlYW5cIiE9dHlwZW9mIG4/KHUoXCJwYXR0ZXJuIG1hdGNoZXIgZnVuY3Rpb24gaW52YWxpZFwiLFwiUHJvdmlkZWQgcGF0dGVybiBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbi4gSXQncyByZXN1bHQgd2lsbCBiZSBpZ25vcmVkLlwiLHQpLCExKTpufTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7Y29uc3QgZT1uZXcgUmVnRXhwKFwiXlwiK3QucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9cXCovZyxcIi4rXCIpK1wiJFwiKTtyZXR1cm4gdD0+ZS50ZXN0KHQpfXJldHVybiB1KFwicGF0dGVybiBtYXRjaGVyIGludmFsaWRcIixcIlBhdHRlcm4gbWF0Y2hpbmcgb25seSBhY2NlcHRzIHN0cmluZ3MsIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kL29yIGZ1bmN0aW9ucy4gVGhpcyBpdGVtIGlzIGludmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5cIix0KSwoKT0+ITF9KSk7cmV0dXJuIHQ9PmUuc29tZSgoZT0+ZSh0KSkpfWZ1bmN0aW9uIGcodCxlLG4pe2NvbnN0IHI9QXJyYXkuZnJvbShkKG4sdFswXSkucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHIubGVuZ3RoPT09dC5sZW5ndGgmJnQuZXZlcnkoKHQ9PnIuaW5jbHVkZXModCkpKX1mdW5jdGlvbiBiKHQsZSl7ZT1udWxsIT1lP2U6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiOnJvb3RcIil9KHQpO2NvbnN0IG49W107bGV0IHI9dDtmb3IoO2kocikmJnIhPT1lOyluLnB1c2gocikscj1yLnBhcmVudEVsZW1lbnQ7cmV0dXJuIG59ZnVuY3Rpb24gdih0LGUpe3JldHVybiBtKHQubWFwKCh0PT5iKHQsZSkpKSl9Y29uc3QgTj17W3QuTk9ORV06e3R5cGU6dC5OT05FLHZhbHVlOlwiXCJ9LFt0LkRFU0NFTkRBTlRdOnt0eXBlOnQuREVTQ0VOREFOVCx2YWx1ZTpcIiA+IFwifSxbdC5DSElMRF06e3R5cGU6dC5DSElMRCx2YWx1ZTpcIiBcIn19LFM9bmV3IFJlZ0V4cChbXCJeJFwiLFwiXFxcXHNcIixcIl5cXFxcZFwiXS5qb2luKFwifFwiKSksRT1uZXcgUmVnRXhwKFtcIl4kXCIsXCJeXFxcXGRcIl0uam9pbihcInxcIikpLHc9W2UubnRob2Z0eXBlLGUudGFnLGUuaWQsZS5jbGFzcyxlLmF0dHJpYnV0ZSxlLm50aGNoaWxkXTt2YXIgeD1uKDQyNiksQT1uLm4oeCk7Y29uc3QgQz15KFtcImNsYXNzXCIsXCJpZFwiLFwibmctKlwiXSk7ZnVuY3Rpb24gTyh7bm9kZU5hbWU6dH0pe3JldHVybmBbJHt0fV1gfWZ1bmN0aW9uIFQoe25vZGVOYW1lOnQsbm9kZVZhbHVlOmV9KXtyZXR1cm5gWyR7dH09JyR7WShlKX0nXWB9ZnVuY3Rpb24gSSh7bm9kZU5hbWU6dH0pe3JldHVybiFDKHQpfWZ1bmN0aW9uIGoodCl7Y29uc3QgZT1BcnJheS5mcm9tKHQuYXR0cmlidXRlcykuZmlsdGVyKEkpO3JldHVyblsuLi5lLm1hcChPKSwuLi5lLm1hcChUKV19ZnVuY3Rpb24gRCh0KXtyZXR1cm4odC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikudHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKCh0PT4hRS50ZXN0KHQpKSkubWFwKCh0PT5gLiR7WSh0KX1gKSl9ZnVuY3Rpb24gJCh0KXtjb25zdCBlPXQuZ2V0QXR0cmlidXRlKFwiaWRcIil8fFwiXCIsbj1gIyR7WShlKX1gLHI9dC5nZXRSb290Tm9kZSh7Y29tcG9zZWQ6ITF9KTtyZXR1cm4hUy50ZXN0KGUpJiZnKFt0XSxuLHIpP1tuXTpbXX1mdW5jdGlvbiBQKHQpe2NvbnN0IGU9dC5wYXJlbnROb2RlO2lmKGUpe2NvbnN0IG49QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmZpbHRlcihpKS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuW2A6bnRoLWNoaWxkKCR7bisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBSKHQpe3JldHVybltZKHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKV19ZnVuY3Rpb24gXyh0KXtjb25zdCBlPVsuLi5uZXcgU2V0KGgodC5tYXAoUikpKV07cmV0dXJuIDA9PT1lLmxlbmd0aHx8ZS5sZW5ndGg+MT9bXTpbZVswXV19ZnVuY3Rpb24gayh0KXtjb25zdCBlPV8oW3RdKVswXSxuPXQucGFyZW50RWxlbWVudDtpZihuKXtjb25zdCByPUFycmF5LmZyb20obi5jaGlsZHJlbikuZmlsdGVyKCh0PT50LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUpKS5pbmRleE9mKHQpO2lmKHI+LTEpcmV0dXJuW2Ake2V9Om50aC1vZi10eXBlKCR7cisxfSlgXX1yZXR1cm5bXX1mdW5jdGlvbiBNKHQ9W10se21heFJlc3VsdHM6ZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9PXt9KXtjb25zdCBuPVtdO2xldCByPTAsbz1xKDEpO2Zvcig7by5sZW5ndGg8PXQubGVuZ3RoJiZyPGU7KXIrPTEsbi5wdXNoKG8ubWFwKChlPT50W2VdKSkpLG89TChvLHQubGVuZ3RoLTEpO3JldHVybiBufWZ1bmN0aW9uIEwodD1bXSxlPTApe2NvbnN0IG49dC5sZW5ndGg7aWYoMD09PW4pcmV0dXJuW107Y29uc3Qgcj1bLi4udF07cltuLTFdKz0xO2ZvcihsZXQgdD1uLTE7dD49MDt0LS0paWYoclt0XT5lKXtpZigwPT09dClyZXR1cm4gcShuKzEpO3JbdC0xXSsrLHJbdF09clt0LTFdKzF9cmV0dXJuIHJbbi0xXT5lP3EobisxKTpyfWZ1bmN0aW9uIHEodD0xKXtyZXR1cm4gQXJyYXkuZnJvbShBcnJheSh0KS5rZXlzKCkpfWNvbnN0IEY9XCI6XCIuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxWPS9bICFcIiMkJSYnKClcXFtcXF17fH08PiorLC4vOz0/QF5gflxcXFxdLztmdW5jdGlvbiBZKHQ9XCJcIil7dmFyIGUsbjtyZXR1cm4gbnVsbCE9PShuPW51bGw9PT0oZT1udWxsPT09Q1NTfHx2b2lkIDA9PT1DU1M/dm9pZCAwOkNTUy5lc2NhcGUpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNhbGwoQ1NTLHQpKSYmdm9pZCAwIT09bj9uOmZ1bmN0aW9uKHQ9XCJcIil7cmV0dXJuIHQuc3BsaXQoXCJcIikubWFwKCh0PT5cIjpcIj09PXQ/YFxcXFwke0Z9IGA6Vi50ZXN0KHQpP2BcXFxcJHt0fWA6ZXNjYXBlKHQpLnJlcGxhY2UoLyUvZyxcIlxcXFxcIikpKS5qb2luKFwiXCIpfSh0KX1jb25zdCBCPXt0YWc6XyxpZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RofHx0Lmxlbmd0aD4xP1tdOiQodFswXSl9LGNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKEQpKX0sYXR0cmlidXRlOmZ1bmN0aW9uKHQpe3JldHVybiBtKHQubWFwKGopKX0sbnRoY2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoUCkpfSxudGhvZnR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG0odC5tYXAoaykpfX0sRz17dGFnOlIsaWQ6JCxjbGFzczpELGF0dHJpYnV0ZTpqLG50aGNoaWxkOlAsbnRob2Z0eXBlOmt9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQuaW5jbHVkZXMoZS50YWcpfHx0LmluY2x1ZGVzKGUubnRob2Z0eXBlKT9bLi4udF06Wy4uLnQsZS50YWddfWZ1bmN0aW9uIEgodD17fSl7Y29uc3Qgbj1bLi4ud107cmV0dXJuIHRbZS50YWddJiZ0W2UubnRob2Z0eXBlXSYmbi5zcGxpY2Uobi5pbmRleE9mKGUudGFnKSwxKSxuLm1hcCgoZT0+e3JldHVybihyPXQpW249ZV0/cltuXS5qb2luKFwiXCIpOlwiXCI7dmFyIG4scn0pKS5qb2luKFwiXCIpfWZ1bmN0aW9uIFUodCxlLG49XCJcIixyKXtjb25zdCBvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJcIj09PWU/dDpmdW5jdGlvbih0LGUpe3JldHVyblsuLi50Lm1hcCgodD0+ZStcIiBcIit0KSksLi4udC5tYXAoKHQ9PmUrXCIgPiBcIit0KSldfSh0LGUpfShmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1oKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2NvbnN0e3NlbGVjdG9yczplLGNvbWJpbmVCZXR3ZWVuU2VsZWN0b3JzOm4saW5jbHVkZVRhZzpyLG1heENhbmRpZGF0ZXM6b309dCxpPW4/TShlLHttYXhSZXN1bHRzOm99KTplLm1hcCgodD0+W3RdKSk7cmV0dXJuIHI/aS5tYXAoVyk6aX0oZSkubWFwKChlPT5mdW5jdGlvbih0LGUpe2NvbnN0IG49e307cmV0dXJuIHQuZm9yRWFjaCgodD0+e2NvbnN0IHI9ZVt0XTtyLmxlbmd0aD4wJiYoblt0XT1yKX0pKSxBKCkobikubWFwKEgpfShlLHQpKSkuZmlsdGVyKCh0PT50Lmxlbmd0aD4wKSl9KGZ1bmN0aW9uKHQsZSl7Y29uc3R7YmxhY2tsaXN0Om4sd2hpdGVsaXN0OnIsY29tYmluZVdpdGhpblNlbGVjdG9yOm8sbWF4Q29tYmluYXRpb25zOml9PWUsdT15KG4pLGM9eShyKTtyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3R7c2VsZWN0b3JzOmUsaW5jbHVkZVRhZzpufT10LHI9W10uY29uY2F0KGUpO3JldHVybiBuJiYhci5pbmNsdWRlcyhcInRhZ1wiKSYmci5wdXNoKFwidGFnXCIpLHJ9KGUpLnJlZHVjZSgoKGUsbik9Pntjb25zdCByPWZ1bmN0aW9uKHQ9W10sZSl7cmV0dXJuIHQuc29ydCgoKHQsbik9Pntjb25zdCByPWUodCksbz1lKG4pO3JldHVybiByJiYhbz8tMTohciYmbz8xOjB9KSl9KGZ1bmN0aW9uKHQ9W10sZSxuKXtyZXR1cm4gdC5maWx0ZXIoKHQ9Pm4odCl8fCFlKHQpKSl9KGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKG51bGwhPT0obj1CW2VdKSYmdm9pZCAwIT09bj9uOigpPT5bXSkodCl9KHQsbiksdSxjKSxjKTtyZXR1cm4gZVtuXT1vP00ocix7bWF4UmVzdWx0czppfSk6ci5tYXAoKHQ9Plt0XSkpLGV9KSx7fSl9KHQsbiksbikpO3JldHVyblsuLi5uZXcgU2V0KHIpXX0odCxyLnJvb3Qsciksbik7Zm9yKGNvbnN0IGUgb2YgbylpZihnKHQsZSxyLnJvb3QpKXJldHVybiBlO3JldHVybiBudWxsfWZ1bmN0aW9uIHoodCl7cmV0dXJue3ZhbHVlOnQsaW5jbHVkZTohMX19ZnVuY3Rpb24gSih7c2VsZWN0b3JzOnQsb3BlcmF0b3I6bn0pe2xldCByPVsuLi53XTt0W2UudGFnXSYmdFtlLm50aG9mdHlwZV0mJihyPXIuZmlsdGVyKCh0PT50IT09ZS50YWcpKSk7bGV0IG89XCJcIjtyZXR1cm4gci5mb3JFYWNoKChlPT57KHRbZV18fFtdKS5mb3JFYWNoKCgoe3ZhbHVlOnQsaW5jbHVkZTplfSk9PntlJiYobys9dCl9KSl9KSksbi52YWx1ZStvfWZ1bmN0aW9uIEsobil7cmV0dXJuW1wiOnJvb3RcIiwuLi5iKG4pLnJldmVyc2UoKS5tYXAoKG49Pntjb25zdCByPWZ1bmN0aW9uKGUsbixyPXQuTk9ORSl7Y29uc3Qgbz17fTtyZXR1cm4gbi5mb3JFYWNoKCh0PT57UmVmbGVjdC5zZXQobyx0LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEdbZV0odCl9KGUsdCkubWFwKHopKX0pKSx7ZWxlbWVudDplLG9wZXJhdG9yOk5bcl0sc2VsZWN0b3JzOm99fShuLFtlLm50aGNoaWxkXSx0LkRFU0NFTkRBTlQpO3JldHVybiByLnNlbGVjdG9ycy5udGhjaGlsZC5mb3JFYWNoKCh0PT57dC5pbmNsdWRlPSEwfSkpLHJ9KSkubWFwKEopXS5qb2luKFwiXCIpfWZ1bmN0aW9uIFEodCxuPXt9KXtjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IGU9KEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLmZpbHRlcihpKTtyZXR1cm5bLi4ubmV3IFNldChlKV19KHQpLG89ZnVuY3Rpb24odCxuPXt9KXtjb25zdCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxjKSxuKTtyZXR1cm57c2VsZWN0b3JzOihvPXIuc2VsZWN0b3JzLEFycmF5LmlzQXJyYXkobyk/by5maWx0ZXIoKHQ9PntyZXR1cm4gbj1lLHI9dCxPYmplY3QudmFsdWVzKG4pLmluY2x1ZGVzKHIpO3ZhciBuLHJ9KSk6W10pLHdoaXRlbGlzdDpzKHIud2hpdGVsaXN0KSxibGFja2xpc3Q6cyhyLmJsYWNrbGlzdCkscm9vdDpkKHIucm9vdCx0KSxjb21iaW5lV2l0aGluU2VsZWN0b3I6ISFyLmNvbWJpbmVXaXRoaW5TZWxlY3Rvcixjb21iaW5lQmV0d2VlblNlbGVjdG9yczohIXIuY29tYmluZUJldHdlZW5TZWxlY3RvcnMsaW5jbHVkZVRhZzohIXIuaW5jbHVkZVRhZyxtYXhDb21iaW5hdGlvbnM6cChyLm1heENvbWJpbmF0aW9ucyksbWF4Q2FuZGlkYXRlczpwKHIubWF4Q2FuZGlkYXRlcyl9O3ZhciBvfShyWzBdLG4pO2xldCB1PVwiXCIsYT1vLnJvb3Q7ZnVuY3Rpb24gbCgpe3JldHVybiBmdW5jdGlvbih0LGUsbj1cIlwiLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBvPVt0Lmxlbmd0aD4xP3Q6W10sLi4udih0LGUpLm1hcCgodD0+W3RdKSldO2Zvcihjb25zdCB0IG9mIG8pe2NvbnN0IGU9VSh0LDAsbixyKTtpZihlKXJldHVybntmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX19cmV0dXJuIG51bGx9KHIsYSx1LG8pfWxldCBmPWwoKTtmb3IoO2Y7KXtjb25zdHtmb3VuZEVsZW1lbnRzOnQsc2VsZWN0b3I6ZX09ZjtpZihnKHIsZSxvLnJvb3QpKXJldHVybiBlO2E9dFswXSx1PWUsZj1sKCl9cmV0dXJuIHIubGVuZ3RoPjE/ci5tYXAoKHQ9PlEodCxvKSkpLmpvaW4oXCIsIFwiKTpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoSykuam9pbihcIiwgXCIpfShyKX1jb25zdCBYPVF9KSgpLHJ9KSgpfSkpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4766\n')},7912:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzkxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjAvSXNBcnJheS5qcz8wODFhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7912\n")},4200:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar CodePointAt = __webpack_require__(2432);\nvar IsIntegralNumber = __webpack_require__(7312);\nvar Type = __webpack_require__(3633);\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex\n\nmodule.exports = function AdvanceStringIndex(S, index, unicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tif (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {\n\t\tthrow new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');\n\t}\n\tif (Type(unicode) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `unicode` must be a Boolean');\n\t}\n\tif (!unicode) {\n\t\treturn index + 1;\n\t}\n\tvar length = S.length;\n\tif ((index + 1) >= length) {\n\t\treturn index + 1;\n\t}\n\tvar cp = CodePointAt(S, index);\n\treturn index + cp['[[CodeUnitCount]]'];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIwMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLElBQW9CO0FBQ25ELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9BZHZhbmNlU3RyaW5nSW5kZXguanM/NWE1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBDb2RlUG9pbnRBdCA9IHJlcXVpcmUoJy4vQ29kZVBvaW50QXQnKTtcbnZhciBJc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi9Jc0ludGVncmFsTnVtYmVyJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvbWF4U2FmZUludGVnZXInKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMi4wLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQWR2YW5jZVN0cmluZ0luZGV4KFMsIGluZGV4LCB1bmljb2RlKSB7XG5cdGlmIChUeXBlKFMpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgU2AgbXVzdCBiZSBhIFN0cmluZycpO1xuXHR9XG5cdGlmICghSXNJbnRlZ3JhbE51bWJlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgbGVuZ3RoYCBtdXN0IGJlIGFuIGludGVnZXIgPj0gMCBhbmQgPD0gMioqNTMnKTtcblx0fVxuXHRpZiAoVHlwZSh1bmljb2RlKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGB1bmljb2RlYCBtdXN0IGJlIGEgQm9vbGVhbicpO1xuXHR9XG5cdGlmICghdW5pY29kZSkge1xuXHRcdHJldHVybiBpbmRleCArIDE7XG5cdH1cblx0dmFyIGxlbmd0aCA9IFMubGVuZ3RoO1xuXHRpZiAoKGluZGV4ICsgMSkgPj0gbGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGluZGV4ICsgMTtcblx0fVxuXHR2YXIgY3AgPSBDb2RlUG9pbnRBdChTLCBpbmRleCk7XG5cdHJldHVybiBpbmRleCArIGNwWydbW0NvZGVVbml0Q291bnRdXSddO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4200\n")},581:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar callBound = __webpack_require__(1924);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = __webpack_require__(6975);\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTgxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7O0FBRTdDOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxJQUFXOztBQUVqQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DYWxsLmpzPzk4YjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBJc0FycmF5ID0gcmVxdWlyZSgnLi9Jc0FycmF5Jyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGNhbGxCb3VuZCgnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWNhbGxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWxsKEYsIFYpIHtcblx0dmFyIGFyZ3VtZW50c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IFtdO1xuXHRpZiAoIUlzQXJyYXkoYXJndW1lbnRzTGlzdCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogb3B0aW9uYWwgYGFyZ3VtZW50c0xpc3RgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIExpc3QnKTtcblx0fVxuXHRyZXR1cm4gJGFwcGx5KEYsIFYsIGFyZ3VtZW50c0xpc3QpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///581\n")},2432:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar callBound = __webpack_require__(1924);\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\nvar Type = __webpack_require__(3633);\nvar UTF16SurrogatePairToCodePoint = __webpack_require__(4857);\n\nvar $charAt = callBound('String.prototype.charAt');\nvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\n// https://ecma-international.org/ecma-262/12.0/#sec-codepointat\n\nmodule.exports = function CodePointAt(string, position) {\n\tif (Type(string) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `string` must be a String');\n\t}\n\tvar size = string.length;\n\tif (position < 0 || position >= size) {\n\t\tthrow new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');\n\t}\n\tvar first = $charCodeAt(string, position);\n\tvar cp = $charAt(string, position);\n\tvar firstIsLeading = isLeadingSurrogate(first);\n\tvar firstIsTrailing = isTrailingSurrogate(first);\n\tif (!firstIsLeading && !firstIsTrailing) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': false\n\t\t};\n\t}\n\tif (firstIsTrailing || (position + 1 === size)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\tvar second = $charCodeAt(string, position + 1);\n\tif (!isTrailingSurrogate(second)) {\n\t\treturn {\n\t\t\t'[[CodePoint]]': cp,\n\t\t\t'[[CodeUnitCount]]': 1,\n\t\t\t'[[IsUnpairedSurrogate]]': true\n\t\t};\n\t}\n\n\treturn {\n\t\t'[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),\n\t\t'[[CodeUnitCount]]': 2,\n\t\t'[[IsUnpairedSurrogate]]': false\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCO0FBQzdDLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixvQ0FBb0MsbUJBQU8sQ0FBQyxJQUFpQzs7QUFFN0U7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ29kZVBvaW50QXQuanM/NWI1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBVVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludCA9IHJlcXVpcmUoJy4vVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGNoYXJDb2RlQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdCcpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvMTIuMC8jc2VjLWNvZGVwb2ludGF0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ29kZVBvaW50QXQoc3RyaW5nLCBwb3NpdGlvbikge1xuXHRpZiAoVHlwZShzdHJpbmcpICE9PSAnU3RyaW5nJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgc3RyaW5nYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYHBvc2l0aW9uYCBtdXN0IGJlID49IDAsIGFuZCA8IHRoZSBsZW5ndGggb2YgYHN0cmluZ2AnKTtcblx0fVxuXHR2YXIgZmlyc3QgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGNwID0gJGNoYXJBdChzdHJpbmcsIHBvc2l0aW9uKTtcblx0dmFyIGZpcnN0SXNMZWFkaW5nID0gaXNMZWFkaW5nU3Vycm9nYXRlKGZpcnN0KTtcblx0dmFyIGZpcnN0SXNUcmFpbGluZyA9IGlzVHJhaWxpbmdTdXJyb2dhdGUoZmlyc3QpO1xuXHRpZiAoIWZpcnN0SXNMZWFkaW5nICYmICFmaXJzdElzVHJhaWxpbmcpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J1tbQ29kZVBvaW50XV0nOiBjcCxcblx0XHRcdCdbW0NvZGVVbml0Q291bnRdXSc6IDEsXG5cdFx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHRcdH07XG5cdH1cblx0aWYgKGZpcnN0SXNUcmFpbGluZyB8fCAocG9zaXRpb24gKyAxID09PSBzaXplKSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQnW1tDb2RlUG9pbnRdXSc6IGNwLFxuXHRcdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMSxcblx0XHRcdCdbW0lzVW5wYWlyZWRTdXJyb2dhdGVdXSc6IHRydWVcblx0XHR9O1xuXHR9XG5cdHZhciBzZWNvbmQgPSAkY2hhckNvZGVBdChzdHJpbmcsIHBvc2l0aW9uICsgMSk7XG5cdGlmICghaXNUcmFpbGluZ1N1cnJvZ2F0ZShzZWNvbmQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdbW0NvZGVQb2ludF1dJzogY3AsXG5cdFx0XHQnW1tDb2RlVW5pdENvdW50XV0nOiAxLFxuXHRcdFx0J1tbSXNVbnBhaXJlZFN1cnJvZ2F0ZV1dJzogdHJ1ZVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdCdbW0NvZGVQb2ludF1dJzogVVRGMTZTdXJyb2dhdGVQYWlyVG9Db2RlUG9pbnQoZmlyc3QsIHNlY29uZCksXG5cdFx0J1tbQ29kZVVuaXRDb3VudF1dJzogMixcblx0XHQnW1tJc1VucGFpcmVkU3Vycm9nYXRlXV0nOiBmYWxzZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2432\n")},2658:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject\n\nmodule.exports = function CreateIterResultObject(value, done) {\n\tif (Type(done) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: Type(done) is not Boolean');\n\t}\n\treturn {\n\t\tvalue: value,\n\t\tdone: done\n\t};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjY1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QuanM/NGY2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmFsdWUsIGRvbmUpIHtcblx0aWYgKFR5cGUoZG9uZSkgIT09ICdCb29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKGRvbmUpIGlzIG5vdCBCb29sZWFuJyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0ZG9uZTogZG9uZVxuXHR9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2658\n")},7730:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty\n\nmodule.exports = function CreateMethodProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar newDesc = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': false,\n\t\t'[[Value]]': V,\n\t\t'[[Writable]]': true\n\t};\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tnewDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzczMC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9DcmVhdGVNZXRob2RQcm9wZXJ0eS5qcz80ZGZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtY3JlYXRlbWV0aG9kcHJvcGVydHlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDcmVhdGVNZXRob2RQcm9wZXJ0eShPLCBQLCBWKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHR2YXIgbmV3RGVzYyA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogZmFsc2UsXG5cdFx0J1tbVmFsdWVdXSc6IFYsXG5cdFx0J1tbV3JpdGFibGVdXSc6IHRydWVcblx0fTtcblx0cmV0dXJuIERlZmluZU93blByb3BlcnR5KFxuXHRcdElzRGF0YURlc2NyaXB0b3IsXG5cdFx0U2FtZVZhbHVlLFxuXHRcdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdFx0Tyxcblx0XHRQLFxuXHRcdG5ld0Rlc2Ncblx0KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7730\n")},3937:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\nvar hasSymbols = __webpack_require__(1405)();\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar AdvanceStringIndex = __webpack_require__(4200);\nvar CreateIterResultObject = __webpack_require__(2658);\nvar CreateMethodProperty = __webpack_require__(7730);\nvar Get = __webpack_require__(1391);\nvar OrdinaryObjectCreate = __webpack_require__(953);\nvar RegExpExec = __webpack_require__(6258);\nvar Set = __webpack_require__(105);\nvar ToLength = __webpack_require__(8305);\nvar ToString = __webpack_require__(6846);\nvar Type = __webpack_require__(3633);\n\nvar SLOT = __webpack_require__(9496);\n\nvar RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('`S` must be a string');\n\t}\n\tif (Type(global) !== 'Boolean') {\n\t\tthrow new $TypeError('`global` must be a boolean');\n\t}\n\tif (Type(fullUnicode) !== 'Boolean') {\n\t\tthrow new $TypeError('`fullUnicode` must be a boolean');\n\t}\n\tSLOT.set(this, '[[IteratingRegExp]]', R);\n\tSLOT.set(this, '[[IteratedString]]', S);\n\tSLOT.set(this, '[[Global]]', global);\n\tSLOT.set(this, '[[Unicode]]', fullUnicode);\n\tSLOT.set(this, '[[Done]]', false);\n};\n\nif (IteratorPrototype) {\n\tRegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);\n}\n\nvar RegExpStringIteratorNext = function next() {\n\tvar O = this; // eslint-disable-line no-invalid-this\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('receiver must be an object');\n\t}\n\tif (\n\t\t!(O instanceof RegExpStringIterator)\n || !SLOT.has(O, '[[IteratingRegExp]]')\n || !SLOT.has(O, '[[IteratedString]]')\n || !SLOT.has(O, '[[Global]]')\n || !SLOT.has(O, '[[Unicode]]')\n || !SLOT.has(O, '[[Done]]')\n\t) {\n\t\tthrow new $TypeError('\"this\" value must be a RegExpStringIterator instance');\n\t}\n\tif (SLOT.get(O, '[[Done]]')) {\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tvar R = SLOT.get(O, '[[IteratingRegExp]]');\n\tvar S = SLOT.get(O, '[[IteratedString]]');\n\tvar global = SLOT.get(O, '[[Global]]');\n\tvar fullUnicode = SLOT.get(O, '[[Unicode]]');\n\tvar match = RegExpExec(R, S);\n\tif (match === null) {\n\t\tSLOT.set(O, '[[Done]]', true);\n\t\treturn CreateIterResultObject(undefined, true);\n\t}\n\tif (global) {\n\t\tvar matchStr = ToString(Get(match, '0'));\n\t\tif (matchStr === '') {\n\t\t\tvar thisIndex = ToLength(Get(R, 'lastIndex'));\n\t\t\tvar nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);\n\t\t\tSet(R, 'lastIndex', nextIndex, true);\n\t\t}\n\t\treturn CreateIterResultObject(match, false);\n\t}\n\tSLOT.set(O, '[[Done]]', true);\n\treturn CreateIterResultObject(match, false);\n};\nCreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);\n\nif (hasSymbols) {\n\tif (Symbol.toStringTag) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: 'RegExp String Iterator',\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tRegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';\n\t\t}\n\t}\n\n\tif (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {\n\t\tvar iteratorFn = function SymbolIterator() {\n\t\t\treturn this;\n\t\t};\n\t\tCreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);\n\t}\n}\n\n// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator\nmodule.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {\n\t// assert R.global === global && R.unicode === fullUnicode?\n\treturn new RegExpStringIterator(R, S, global, fullUnicode);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkzNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLElBQWE7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsbUJBQU8sQ0FBQyxJQUFzQjtBQUN2RCw2QkFBNkIsbUJBQU8sQ0FBQyxJQUEwQjtBQUMvRCwyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QiwyQkFBMkIsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzRCxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxHQUFPO0FBQ3pCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxJQUFZO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQixXQUFXLG1CQUFPLENBQUMsSUFBZTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvQ3JlYXRlUmVnRXhwU3RyaW5nSXRlcmF0b3IuanM/Yzc5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBHZXRJbnRyaW5zaWMoJyVJdGVyYXRvclByb3RvdHlwZSUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBBZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL0FkdmFuY2VTdHJpbmdJbmRleCcpO1xudmFyIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuL0NyZWF0ZUl0ZXJSZXN1bHRPYmplY3QnKTtcbnZhciBDcmVhdGVNZXRob2RQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ3JlYXRlTWV0aG9kUHJvcGVydHknKTtcbnZhciBHZXQgPSByZXF1aXJlKCcuL0dldCcpO1xudmFyIE9yZGluYXJ5T2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi9PcmRpbmFyeU9iamVjdENyZWF0ZScpO1xudmFyIFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL1JlZ0V4cEV4ZWMnKTtcbnZhciBTZXQgPSByZXF1aXJlKCcuL1NldCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnLi9Ub0xlbmd0aCcpO1xudmFyIFRvU3RyaW5nID0gcmVxdWlyZSgnLi9Ub1N0cmluZycpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIFNMT1QgPSByZXF1aXJlKCdpbnRlcm5hbC1zbG90Jyk7XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BTYCBtdXN0IGJlIGEgc3RyaW5nJyk7XG5cdH1cblx0aWYgKFR5cGUoZ2xvYmFsKSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BnbG9iYWxgIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblx0aWYgKFR5cGUoZnVsbFVuaWNvZGUpICE9PSAnQm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZ1bGxVbmljb2RlYCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJywgUik7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0l0ZXJhdGVkU3RyaW5nXV0nLCBTKTtcblx0U0xPVC5zZXQodGhpcywgJ1tbR2xvYmFsXV0nLCBnbG9iYWwpO1xuXHRTTE9ULnNldCh0aGlzLCAnW1tVbmljb2RlXV0nLCBmdWxsVW5pY29kZSk7XG5cdFNMT1Quc2V0KHRoaXMsICdbW0RvbmVdXScsIGZhbHNlKTtcbn07XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSkge1xuXHRSZWdFeHBTdHJpbmdJdGVyYXRvci5wcm90b3R5cGUgPSBPcmRpbmFyeU9iamVjdENyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG59XG5cbnZhciBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHR2YXIgTyA9IHRoaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdyZWNlaXZlciBtdXN0IGJlIGFuIG9iamVjdCcpO1xuXHR9XG5cdGlmIChcblx0XHQhKE8gaW5zdGFuY2VvZiBSZWdFeHBTdHJpbmdJdGVyYXRvcilcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGluZ1JlZ0V4cF1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0l0ZXJhdGVkU3RyaW5nXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbR2xvYmFsXV0nKVxuICAgICAgICB8fCAhU0xPVC5oYXMoTywgJ1tbVW5pY29kZV1dJylcbiAgICAgICAgfHwgIVNMT1QuaGFzKE8sICdbW0RvbmVdXScpXG5cdCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcInRoaXNcIiB2YWx1ZSBtdXN0IGJlIGEgUmVnRXhwU3RyaW5nSXRlcmF0b3IgaW5zdGFuY2UnKTtcblx0fVxuXHRpZiAoU0xPVC5nZXQoTywgJ1tbRG9uZV1dJykpIHtcblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHZhciBSID0gU0xPVC5nZXQoTywgJ1tbSXRlcmF0aW5nUmVnRXhwXV0nKTtcblx0dmFyIFMgPSBTTE9ULmdldChPLCAnW1tJdGVyYXRlZFN0cmluZ11dJyk7XG5cdHZhciBnbG9iYWwgPSBTTE9ULmdldChPLCAnW1tHbG9iYWxdXScpO1xuXHR2YXIgZnVsbFVuaWNvZGUgPSBTTE9ULmdldChPLCAnW1tVbmljb2RlXV0nKTtcblx0dmFyIG1hdGNoID0gUmVnRXhwRXhlYyhSLCBTKTtcblx0aWYgKG1hdGNoID09PSBudWxsKSB7XG5cdFx0U0xPVC5zZXQoTywgJ1tbRG9uZV1dJywgdHJ1ZSk7XG5cdFx0cmV0dXJuIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRpZiAoZ2xvYmFsKSB7XG5cdFx0dmFyIG1hdGNoU3RyID0gVG9TdHJpbmcoR2V0KG1hdGNoLCAnMCcpKTtcblx0XHRpZiAobWF0Y2hTdHIgPT09ICcnKSB7XG5cdFx0XHR2YXIgdGhpc0luZGV4ID0gVG9MZW5ndGgoR2V0KFIsICdsYXN0SW5kZXgnKSk7XG5cdFx0XHR2YXIgbmV4dEluZGV4ID0gQWR2YW5jZVN0cmluZ0luZGV4KFMsIHRoaXNJbmRleCwgZnVsbFVuaWNvZGUpO1xuXHRcdFx0U2V0KFIsICdsYXN0SW5kZXgnLCBuZXh0SW5kZXgsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xuXHR9XG5cdFNMT1Quc2V0KE8sICdbW0RvbmVdXScsIHRydWUpO1xuXHRyZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChtYXRjaCwgZmFsc2UpO1xufTtcbkNyZWF0ZU1ldGhvZFByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgJ25leHQnLCBSZWdFeHBTdHJpbmdJdGVyYXRvck5leHQpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHRpZiAoU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0aWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0JGRlZmluZVByb3BlcnR5KFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiAnUmVnRXhwIFN0cmluZyBJdGVyYXRvcicsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddID0gJ1JlZ0V4cCBTdHJpbmcgSXRlcmF0b3InO1xuXHRcdH1cblx0fVxuXG5cdGlmIChTeW1ib2wuaXRlcmF0b3IgJiYgdHlwZW9mIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGl0ZXJhdG9yRm4gPSBmdW5jdGlvbiBTeW1ib2xJdGVyYXRvcigpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH07XG5cdFx0Q3JlYXRlTWV0aG9kUHJvcGVydHkoUmVnRXhwU3RyaW5nSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIGl0ZXJhdG9yRm4pO1xuXHR9XG59XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWNyZWF0ZXJlZ2V4cHN0cmluZ2l0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENyZWF0ZVJlZ0V4cFN0cmluZ0l0ZXJhdG9yKFIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcblx0Ly8gYXNzZXJ0IFIuZ2xvYmFsID09PSBnbG9iYWwgJiYgUi51bmljb2RlID09PSBmdWxsVW5pY29kZT9cblx0cmV0dXJuIG5ldyBSZWdFeHBTdHJpbmdJdGVyYXRvcihSLCBTLCBnbG9iYWwsIGZ1bGxVbmljb2RlKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3937\n")},3950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = __webpack_require__(2435);\nvar DefineOwnProperty = __webpack_require__(3682);\n\nvar FromPropertyDescriptor = __webpack_require__(8334);\nvar IsAccessorDescriptor = __webpack_require__(9527);\nvar IsDataDescriptor = __webpack_require__(3746);\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar ToPropertyDescriptor = __webpack_require__(9916);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSwyQkFBMkIsbUJBQU8sQ0FBQyxJQUFpQztBQUNwRSx3QkFBd0IsbUJBQU8sQ0FBQyxJQUE4Qjs7QUFFOUQsNkJBQTZCLG1CQUFPLENBQUMsSUFBMEI7QUFDL0QsMkJBQTJCLG1CQUFPLENBQUMsSUFBd0I7QUFDM0QsdUJBQXVCLG1CQUFPLENBQUMsSUFBb0I7QUFDbkQsb0JBQW9CLG1CQUFPLENBQUMsSUFBaUI7QUFDN0MsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYTtBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyxJQUF3QjtBQUMzRCxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0RlZmluZVByb3BlcnR5T3JUaHJvdy5qcz8wMzBhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpc1Byb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBEZWZpbmVPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvRGVmaW5lT3duUHJvcGVydHknKTtcblxudmFyIEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL0Zyb21Qcm9wZXJ0eURlc2NyaXB0b3InKTtcbnZhciBJc0FjY2Vzc29yRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vSXNBY2Nlc3NvckRlc2NyaXB0b3InKTtcbnZhciBJc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9Jc0RhdGFEZXNjcmlwdG9yJyk7XG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVG9Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL1RvUHJvcGVydHlEZXNjcmlwdG9yJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZGVmaW5lcHJvcGVydHlvcnRocm93XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lUHJvcGVydHlPclRocm93KE8sIFAsIGRlc2MpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IFR5cGUoTykgaXMgbm90IE9iamVjdCcpO1xuXHR9XG5cblx0aWYgKCFJc1Byb3BlcnR5S2V5KFApKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IElzUHJvcGVydHlLZXkoUCkgaXMgbm90IHRydWUnKTtcblx0fVxuXG5cdHZhciBEZXNjID0gaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgZGVzYykgPyBkZXNjIDogVG9Qcm9wZXJ0eURlc2NyaXB0b3IoZGVzYyk7XG5cdGlmICghaXNQcm9wZXJ0eURlc2NyaXB0b3Ioe1xuXHRcdFR5cGU6IFR5cGUsXG5cdFx0SXNEYXRhRGVzY3JpcHRvcjogSXNEYXRhRGVzY3JpcHRvcixcblx0XHRJc0FjY2Vzc29yRGVzY3JpcHRvcjogSXNBY2Nlc3NvckRlc2NyaXB0b3Jcblx0fSwgRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogRGVzYyBpcyBub3QgYSB2YWxpZCBQcm9wZXJ0eSBEZXNjcmlwdG9yJyk7XG5cdH1cblxuXHRyZXR1cm4gRGVmaW5lT3duUHJvcGVydHkoXG5cdFx0SXNEYXRhRGVzY3JpcHRvcixcblx0XHRTYW1lVmFsdWUsXG5cdFx0RnJvbVByb3BlcnR5RGVzY3JpcHRvcixcblx0XHRPLFxuXHRcdFAsXG5cdFx0RGVzY1xuXHQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3950\n")},8334:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMzNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUF5Qjs7QUFFcEQsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Gcm9tUHJvcGVydHlEZXNjcmlwdG9yLmpzPzViMmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWZyb21wcm9wZXJ0eWRlc2NyaXB0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKERlc2MpIHtcblx0aWYgKHR5cGVvZiBEZXNjID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBEZXNjO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHR2YXIgb2JqID0ge307XG5cdGlmICgnW1tWYWx1ZV1dJyBpbiBEZXNjKSB7XG5cdFx0b2JqLnZhbHVlID0gRGVzY1snW1tWYWx1ZV1dJ107XG5cdH1cblx0aWYgKCdbW1dyaXRhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmoud3JpdGFibGUgPSBEZXNjWydbW1dyaXRhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbR2V0XV0nIGluIERlc2MpIHtcblx0XHRvYmouZ2V0ID0gRGVzY1snW1tHZXRdXSddO1xuXHR9XG5cdGlmICgnW1tTZXRdXScgaW4gRGVzYykge1xuXHRcdG9iai5zZXQgPSBEZXNjWydbW1NldF1dJ107XG5cdH1cblx0aWYgKCdbW0VudW1lcmFibGVdXScgaW4gRGVzYykge1xuXHRcdG9iai5lbnVtZXJhYmxlID0gRGVzY1snW1tFbnVtZXJhYmxlXV0nXTtcblx0fVxuXHRpZiAoJ1tbQ29uZmlndXJhYmxlXV0nIGluIERlc2MpIHtcblx0XHRvYmouY29uZmlndXJhYmxlID0gRGVzY1snW1tDb25maWd1cmFibGVdXSddO1xuXHR9XG5cdHJldHVybiBvYmo7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8334\n")},1391:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = __webpack_require__(631);\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar Type = __webpack_require__(3633);\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTM5MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxjQUFjLG1CQUFPLENBQUMsR0FBZ0I7O0FBRXRDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0dldC5qcz9mOTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8qKlxuICogNy4zLjEgR2V0IChPLCBQKSAtIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1nZXQtby1wXG4gKiAxLiBBc3NlcnQ6IFR5cGUoTykgaXMgT2JqZWN0LlxuICogMi4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAzLiBSZXR1cm4gTy5bW0dldF1dKFAsIE8pLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0KE8sIFApIHtcblx0Ly8gNy4zLjEuMVxuXHRpZiAoVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogVHlwZShPKSBpcyBub3QgT2JqZWN0Jyk7XG5cdH1cblx0Ly8gNy4zLjEuMlxuXHRpZiAoIUlzUHJvcGVydHlLZXkoUCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogSXNQcm9wZXJ0eUtleShQKSBpcyBub3QgdHJ1ZSwgZ290ICcgKyBpbnNwZWN0KFApKTtcblx0fVxuXHQvLyA3LjMuMS4zXG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1391\n")},7364:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar GetV = __webpack_require__(8509);\nvar IsCallable = __webpack_require__(1787);\nvar IsPropertyKey = __webpack_require__(4305);\n\n/**\n * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let func be GetV(O, P).\n * 3. ReturnIfAbrupt(func).\n * 4. If func is either undefined or null, return undefined.\n * 5. If IsCallable(func) is false, throw a TypeError exception.\n * 6. Return func.\n */\n\nmodule.exports = function GetMethod(O, P) {\n\t// 7.3.9.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.9.2\n\tvar func = GetV(O, P);\n\n\t// 7.3.9.4\n\tif (func == null) {\n\t\treturn void 0;\n\t}\n\n\t// 7.3.9.5\n\tif (!IsCallable(func)) {\n\t\tthrow new $TypeError(P + 'is not a function');\n\t}\n\n\t// 7.3.9.6\n\treturn func;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzM2NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxXQUFXLG1CQUFPLENBQUMsSUFBUTtBQUMzQixpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjO0FBQ3ZDLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRNZXRob2QuanM/NjQ3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgR2V0ViA9IHJlcXVpcmUoJy4vR2V0VicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcbnZhciBJc1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi9Jc1Byb3BlcnR5S2V5Jyk7XG5cbi8qKlxuICogNy4zLjkgLSBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtZ2V0bWV0aG9kXG4gKiAxLiBBc3NlcnQ6IElzUHJvcGVydHlLZXkoUCkgaXMgdHJ1ZS5cbiAqIDIuIExldCBmdW5jIGJlIEdldFYoTywgUCkuXG4gKiAzLiBSZXR1cm5JZkFicnVwdChmdW5jKS5cbiAqIDQuIElmIGZ1bmMgaXMgZWl0aGVyIHVuZGVmaW5lZCBvciBudWxsLCByZXR1cm4gdW5kZWZpbmVkLlxuICogNS4gSWYgSXNDYWxsYWJsZShmdW5jKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLlxuICogNi4gUmV0dXJuIGZ1bmMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRNZXRob2QoTywgUCkge1xuXHQvLyA3LjMuOS4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuOS4yXG5cdHZhciBmdW5jID0gR2V0VihPLCBQKTtcblxuXHQvLyA3LjMuOS40XG5cdGlmIChmdW5jID09IG51bGwpIHtcblx0XHRyZXR1cm4gdm9pZCAwO1xuXHR9XG5cblx0Ly8gNy4zLjkuNVxuXHRpZiAoIUlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihQICsgJ2lzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHQvLyA3LjMuOS42XG5cdHJldHVybiBmdW5jO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7364\n")},8509:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar ToObject = __webpack_require__(821);\n\n/**\n * 7.3.2 GetV (V, P)\n * 1. Assert: IsPropertyKey(P) is true.\n * 2. Let O be ToObject(V).\n * 3. ReturnIfAbrupt(O).\n * 4. Return O.[[Get]](P, V).\n */\n\nmodule.exports = function GetV(V, P) {\n\t// 7.3.2.1\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\t// 7.3.2.2-3\n\tvar O = ToObject(V);\n\n\t// 7.3.2.4\n\treturn O[P];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODUwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxvQkFBb0IsbUJBQU8sQ0FBQyxJQUFpQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsR0FBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9HZXRWLmpzPzBkNjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuL0lzUHJvcGVydHlLZXknKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJy4vVG9PYmplY3QnKTtcblxuLyoqXG4gKiA3LjMuMiBHZXRWIChWLCBQKVxuICogMS4gQXNzZXJ0OiBJc1Byb3BlcnR5S2V5KFApIGlzIHRydWUuXG4gKiAyLiBMZXQgTyBiZSBUb09iamVjdChWKS5cbiAqIDMuIFJldHVybklmQWJydXB0KE8pLlxuICogNC4gUmV0dXJuIE8uW1tHZXRdXShQLCBWKS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldFYoViwgUCkge1xuXHQvLyA3LjMuMi4xXG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBJc1Byb3BlcnR5S2V5KFApIGlzIG5vdCB0cnVlJyk7XG5cdH1cblxuXHQvLyA3LjMuMi4yLTNcblx0dmFyIE8gPSBUb09iamVjdChWKTtcblxuXHQvLyA3LjMuMi40XG5cdHJldHVybiBPW1BdO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8509\n")},9527:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUyNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0FjY2Vzc29yRGVzY3JpcHRvci5qcz85YjBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgYXNzZXJ0UmVjb3JkID0gcmVxdWlyZSgnLi4vaGVscGVycy9hc3NlcnRSZWNvcmQnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYWNjZXNzb3JkZXNjcmlwdG9yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tHZXRdXScpICYmICFoYXMoRGVzYywgJ1tbU2V0XV0nKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9527\n")},6975:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && __webpack_require__(1924)('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjk3NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBLCtCQUErQixtQkFBTyxDQUFDLElBQXFCOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNBcnJheS5qcz9kM2M0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRBcnJheSA9IEdldEludHJpbnNpYygnJUFycmF5JScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbnZhciB0b1N0ciA9ICEkQXJyYXkuaXNBcnJheSAmJiByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJykoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzYXJyYXlcblxubW9kdWxlLmV4cG9ydHMgPSAkQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBJc0FycmF5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0b1N0cihhcmd1bWVudCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6975\n")},1787:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = __webpack_require__(5320);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTc4Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcz9iNzM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1787\n")},1974:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(4445);\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = __webpack_require__(3950);\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk3NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxJQUFvQjs7QUFFL0M7O0FBRUEsNEJBQTRCLG1CQUFPLENBQUMsSUFBeUI7QUFDN0Q7QUFDQSx5QkFBeUIsUUFBUSwyQkFBMkI7QUFDNUQsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL0lzQ29uc3RydWN0b3IuanM/ZjExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCcuLi9HZXRJbnRyaW5zaWMuanMnKTtcblxudmFyICRjb25zdHJ1Y3QgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmNvbnN0cnVjdCUnLCB0cnVlKTtcblxudmFyIERlZmluZVByb3BlcnR5T3JUaHJvdyA9IHJlcXVpcmUoJy4vRGVmaW5lUHJvcGVydHlPclRocm93Jyk7XG50cnkge1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coe30sICcnLCB7ICdbW0dldF1dJzogZnVuY3Rpb24gKCkge30gfSk7XG59IGNhdGNoIChlKSB7XG5cdC8vIEFjY2Vzc29yIHByb3BlcnRpZXMgYXJlbid0IHN1cHBvcnRlZFxuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3cgPSBudWxsO1xufVxuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNjb25zdHJ1Y3RvclxuXG5pZiAoRGVmaW5lUHJvcGVydHlPclRocm93ICYmICRjb25zdHJ1Y3QpIHtcblx0dmFyIGlzQ29uc3RydWN0b3JNYXJrZXIgPSB7fTtcblx0dmFyIGJhZEFycmF5TGlrZSA9IHt9O1xuXHREZWZpbmVQcm9wZXJ0eU9yVGhyb3coYmFkQXJyYXlMaWtlLCAnbGVuZ3RoJywge1xuXHRcdCdbW0dldF1dJzogZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhyb3cgaXNDb25zdHJ1Y3Rvck1hcmtlcjtcblx0XHR9LFxuXHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWVcblx0fSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgaW52b2tlcyBgSXNDb25zdHJ1Y3Rvcih0YXJnZXQpYCBiZWZvcmUgYEdldChhcmdzLCAnbGVuZ3RoJylgOlxuXHRcdFx0JGNvbnN0cnVjdChhcmd1bWVudCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHJldHVybiBlcnIgPT09IGlzQ29uc3RydWN0b3JNYXJrZXI7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG5cdFx0Ly8gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIHdheSB0byB0cnVseSBjaGVjayB0aGlzIHdpdGhvdXQgdHJ5L2NhdGNoIGBuZXcgYXJndW1lbnRgIGluIG9sZCBlbnZpcm9ubWVudHNcblx0XHRyZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nICYmICEhYXJndW1lbnQucHJvdG90eXBlO1xuXHR9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1974\n")},3746:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar assertRecord = __webpack_require__(2188);\n\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsSUFBeUI7O0FBRXBELFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0RhdGFEZXNjcmlwdG9yLmpzP2ZhODQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBhc3NlcnRSZWNvcmQgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2Fzc2VydFJlY29yZCcpO1xuXG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtaXNkYXRhZGVzY3JpcHRvclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzRGF0YURlc2NyaXB0b3IoRGVzYykge1xuXHRpZiAodHlwZW9mIERlc2MgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXNzZXJ0UmVjb3JkKFR5cGUsICdQcm9wZXJ0eSBEZXNjcmlwdG9yJywgJ0Rlc2MnLCBEZXNjKTtcblxuXHRpZiAoIWhhcyhEZXNjLCAnW1tWYWx1ZV1dJykgJiYgIWhhcyhEZXNjLCAnW1tXcml0YWJsZV1dJykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3746\n")},7312:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(4908);\nvar floor = __webpack_require__(375);\nvar Type = __webpack_require__(3633);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\n\n// https://tc39.es/ecma262/#sec-isintegralnumber\n\nmodule.exports = function IsIntegralNumber(argument) {\n\tif (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzMxMi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBTztBQUN6QixZQUFZLG1CQUFPLENBQUMsR0FBUztBQUM3QixXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsYUFBYSxtQkFBTyxDQUFDLElBQWtCO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLElBQXFCOztBQUU3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc0ludGVncmFsTnVtYmVyLmpzPzk0YWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYWJzID0gcmVxdWlyZSgnLi9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJy4vZmxvb3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc0ludGVncmFsTnVtYmVyKGFyZ3VtZW50KSB7XG5cdGlmIChUeXBlKGFyZ3VtZW50KSAhPT0gJ051bWJlcicgfHwgJGlzTmFOKGFyZ3VtZW50KSB8fCAhJGlzRmluaXRlKGFyZ3VtZW50KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWJzVmFsdWUgPSBhYnMoYXJndW1lbnQpO1xuXHRyZXR1cm4gZmxvb3IoYWJzVmFsdWUpID09PSBhYnNWYWx1ZTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7312\n")},4305:function(module){"use strict";eval("\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNQcm9wZXJ0eUtleS5qcz9lZDZmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcHJvcGVydHlrZXlcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG5cdHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4305\n")},840:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = __webpack_require__(8420);\n\nvar ToBoolean = __webpack_require__(9731);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODQwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLHVCQUF1QixtQkFBTyxDQUFDLElBQVU7O0FBRXpDLGdCQUFnQixtQkFBTyxDQUFDLElBQWE7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Jc1JlZ0V4cC5qcz81NjQzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRtYXRjaCA9IEdldEludHJpbnNpYygnJVN5bWJvbC5tYXRjaCUnLCB0cnVlKTtcblxudmFyIGhhc1JlZ0V4cE1hdGNoZXIgPSByZXF1aXJlKCdpcy1yZWdleCcpO1xuXG52YXIgVG9Cb29sZWFuID0gcmVxdWlyZSgnLi9Ub0Jvb2xlYW4nKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWlzcmVnZXhwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gSXNSZWdFeHAoYXJndW1lbnQpIHtcblx0aWYgKCFhcmd1bWVudCB8fCB0eXBlb2YgYXJndW1lbnQgIT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICgkbWF0Y2gpIHtcblx0XHR2YXIgaXNSZWdFeHAgPSBhcmd1bWVudFskbWF0Y2hdO1xuXHRcdGlmICh0eXBlb2YgaXNSZWdFeHAgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gVG9Cb29sZWFuKGlzUmVnRXhwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGhhc1JlZ0V4cE1hdGNoZXIoYXJndW1lbnQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///840\n")},953:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $ObjectCreate = GetIntrinsic('%Object.create%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar IsArray = __webpack_require__(6975);\nvar Type = __webpack_require__(3633);\n\nvar hasProto = !({ __proto__: null } instanceof Object);\n\n// https://262.ecma-international.org/6.0/#sec-objectcreate\n\nmodule.exports = function OrdinaryObjectCreate(proto) {\n\tif (proto !== null && Type(proto) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `proto` must be null or an object');\n\t}\n\tvar additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];\n\tif (!IsArray(additionalInternalSlotsList)) {\n\t\tthrow new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');\n\t}\n\t// var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];\n\tif (additionalInternalSlotsList.length > 0) {\n\t\tthrow new $SyntaxError('es-abstract does not yet support internal slots');\n\t\t// internalSlotsList.push(...additionalInternalSlotsList);\n\t}\n\t// var O = MakeBasicObject(internalSlotsList);\n\t// setProto(O, proto);\n\t// return O;\n\n\tif ($ObjectCreate) {\n\t\treturn $ObjectCreate(proto);\n\t}\n\tif (hasProto) {\n\t\treturn { __proto__: proto };\n\t}\n\n\tif (proto === null) {\n\t\tthrow new $SyntaxError('native Object.create support is required to create null objects');\n\t}\n\tvar T = function T() {};\n\tT.prototype = proto;\n\treturn new T();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTUzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsSUFBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0IsbUJBQW1CLGtCQUFrQjs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvT3JkaW5hcnlPYmplY3RDcmVhdGUuanM/YzVkNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkT2JqZWN0Q3JlYXRlID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmNyZWF0ZSUnLCB0cnVlKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgSXNBcnJheSA9IHJlcXVpcmUoJy4vSXNBcnJheScpO1xudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcblxudmFyIGhhc1Byb3RvID0gISh7IF9fcHJvdG9fXzogbnVsbCB9IGluc3RhbmNlb2YgT2JqZWN0KTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy82LjAvI3NlYy1vYmplY3RjcmVhdGVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBPcmRpbmFyeU9iamVjdENyZWF0ZShwcm90bykge1xuXHRpZiAocHJvdG8gIT09IG51bGwgJiYgVHlwZShwcm90bykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBwcm90b2AgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCcpO1xuXHR9XG5cdHZhciBhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFtdIDogYXJndW1lbnRzWzFdO1xuXHRpZiAoIUlzQXJyYXkoYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0KSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgYWRkaXRpb25hbEludGVybmFsU2xvdHNMaXN0YCBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cdH1cblx0Ly8gdmFyIGludGVybmFsU2xvdHNMaXN0ID0gWydbW1Byb3RvdHlwZV1dJywgJ1tbRXh0ZW5zaWJsZV1dJ107XG5cdGlmIChhZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QubGVuZ3RoID4gMCkge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2VzLWFic3RyYWN0IGRvZXMgbm90IHlldCBzdXBwb3J0IGludGVybmFsIHNsb3RzJyk7XG5cdFx0Ly8gaW50ZXJuYWxTbG90c0xpc3QucHVzaCguLi5hZGRpdGlvbmFsSW50ZXJuYWxTbG90c0xpc3QpO1xuXHR9XG5cdC8vIHZhciBPID0gTWFrZUJhc2ljT2JqZWN0KGludGVybmFsU2xvdHNMaXN0KTtcblx0Ly8gc2V0UHJvdG8oTywgcHJvdG8pO1xuXHQvLyByZXR1cm4gTztcblxuXHRpZiAoJE9iamVjdENyZWF0ZSkge1xuXHRcdHJldHVybiAkT2JqZWN0Q3JlYXRlKHByb3RvKTtcblx0fVxuXHRpZiAoaGFzUHJvdG8pIHtcblx0XHRyZXR1cm4geyBfX3Byb3RvX186IHByb3RvIH07XG5cdH1cblxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCduYXRpdmUgT2JqZWN0LmNyZWF0ZSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBudWxsIG9iamVjdHMnKTtcblx0fVxuXHR2YXIgVCA9IGZ1bmN0aW9uIFQoKSB7fTtcblx0VC5wcm90b3R5cGUgPSBwcm90bztcblx0cmV0dXJuIG5ldyBUKCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///953\n")},6258:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar regexExec = __webpack_require__(1924)('RegExp.prototype.exec');\n\nvar Call = __webpack_require__(581);\nvar Get = __webpack_require__(1391);\nvar IsCallable = __webpack_require__(1787);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec\n\nmodule.exports = function RegExpExec(R, S) {\n\tif (Type(R) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `R` must be an Object');\n\t}\n\tif (Type(S) !== 'String') {\n\t\tthrow new $TypeError('Assertion failed: `S` must be a String');\n\t}\n\tvar exec = Get(R, 'exec');\n\tif (IsCallable(exec)) {\n\t\tvar result = Call(exec, R, [S]);\n\t\tif (result === null || Type(result) === 'Object') {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new $TypeError('\"exec\" method must return `null` or an Object');\n\t}\n\treturn regexExec(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjI1OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0MsV0FBVyxtQkFBTyxDQUFDLEdBQVE7QUFDM0IsVUFBVSxtQkFBTyxDQUFDLElBQU87QUFDekIsaUJBQWlCLG1CQUFPLENBQUMsSUFBYztBQUN2QyxXQUFXLG1CQUFPLENBQUMsSUFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZWdFeHBFeGVjLmpzPzgzNzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIHJlZ2V4RXhlYyA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKSgnUmVnRXhwLnByb3RvdHlwZS5leGVjJyk7XG5cbnZhciBDYWxsID0gcmVxdWlyZSgnLi9DYWxsJyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnLi9HZXQnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnLi9Jc0NhbGxhYmxlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtcmVnZXhwZXhlY1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFJlZ0V4cEV4ZWMoUiwgUykge1xuXHRpZiAoVHlwZShSKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYFJgIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG5cdH1cblx0aWYgKFR5cGUoUykgIT09ICdTdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBTYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG5cdH1cblx0dmFyIGV4ZWMgPSBHZXQoUiwgJ2V4ZWMnKTtcblx0aWYgKElzQ2FsbGFibGUoZXhlYykpIHtcblx0XHR2YXIgcmVzdWx0ID0gQ2FsbChleGVjLCBSLCBbU10pO1xuXHRcdGlmIChyZXN1bHQgPT09IG51bGwgfHwgVHlwZShyZXN1bHQpID09PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiZXhlY1wiIG1ldGhvZCBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gT2JqZWN0Jyk7XG5cdH1cblx0cmV0dXJuIHJlZ2V4RXhlYyhSLCBTKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6258\n")},9619:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nmodule.exports = __webpack_require__(4559);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTYxOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQ0FBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZS5qcz85MDQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi81L0NoZWNrT2JqZWN0Q29lcmNpYmxlJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///9619\n")},484:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar $isNaN = __webpack_require__(9086);\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxJQUFrQjs7QUFFdkM7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZS5qcz83ZjQ5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNOYU4nKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTYW1lVmFsdWUoeCwgeSkge1xuXHRpZiAoeCA9PT0geSkgeyAvLyAwID09PSAtMCwgYnV0IHRoZXkgYXJlIG5vdCBpZGVudGljYWwuXG5cdFx0aWYgKHggPT09IDApIHsgcmV0dXJuIDEgLyB4ID09PSAxIC8geTsgfVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiAkaXNOYU4oeCkgJiYgJGlzTmFOKHkpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///484\n")},105:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = __webpack_require__(4305);\nvar SameValue = __webpack_require__(484);\nvar Type = __webpack_require__(3633);\n\n// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated\nvar noThrowOnStrictViolation = (function () {\n\ttry {\n\t\tdelete [].length;\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}());\n\n// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw\n\nmodule.exports = function Set(O, P, V, Throw) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\tif (Type(Throw) !== 'Boolean') {\n\t\tthrow new $TypeError('Assertion failed: `Throw` must be a Boolean');\n\t}\n\tif (Throw) {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\tif (noThrowOnStrictViolation && !SameValue(O[P], V)) {\n\t\t\tthrow new $TypeError('Attempted to assign to readonly property.');\n\t\t}\n\t\treturn true;\n\t}\n\ttry {\n\t\tO[P] = V; // eslint-disable-line no-param-reassign\n\t\treturn noThrowOnStrictViolation ? SameValue(O[P], V) : true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsV0FBVyxtQkFBTyxDQUFDLElBQVE7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9TZXQuanM/ZGExMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG52YXIgSXNQcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4vSXNQcm9wZXJ0eUtleScpO1xudmFyIFNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vU2FtZVZhbHVlJyk7XG52YXIgVHlwZSA9IHJlcXVpcmUoJy4vVHlwZScpO1xuXG4vLyBJRSA5IGRvZXMgbm90IHRocm93IGluIHN0cmljdCBtb2RlIHdoZW4gd3JpdGFiaWxpdHkvY29uZmlndXJhYmlsaXR5L2V4dGVuc2liaWxpdHkgaXMgdmlvbGF0ZWRcbnZhciBub1Rocm93T25TdHJpY3RWaW9sYXRpb24gPSAoZnVuY3Rpb24gKCkge1xuXHR0cnkge1xuXHRcdGRlbGV0ZSBbXS5sZW5ndGg7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0oKSk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zZXQtby1wLXYtdGhyb3dcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTZXQoTywgUCwgViwgVGhyb3cpIHtcblx0aWYgKFR5cGUoTykgIT09ICdPYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBPYCBtdXN0IGJlIGFuIE9iamVjdCcpO1xuXHR9XG5cdGlmICghSXNQcm9wZXJ0eUtleShQKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBgUGAgbXVzdCBiZSBhIFByb3BlcnR5IEtleScpO1xuXHR9XG5cdGlmIChUeXBlKFRocm93KSAhPT0gJ0Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Fzc2VydGlvbiBmYWlsZWQ6IGBUaHJvd2AgbXVzdCBiZSBhIEJvb2xlYW4nKTtcblx0fVxuXHRpZiAoVGhyb3cpIHtcblx0XHRPW1BdID0gVjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdGlmIChub1Rocm93T25TdHJpY3RWaW9sYXRpb24gJiYgIVNhbWVWYWx1ZShPW1BdLCBWKSkge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuJyk7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHRyeSB7XG5cdFx0T1tQXSA9IFY7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRyZXR1cm4gbm9UaHJvd09uU3RyaWN0VmlvbGF0aW9uID8gU2FtZVZhbHVlKE9bUF0sIFYpIDogdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///105\n")},9655:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsConstructor = __webpack_require__(1974);\nvar Type = __webpack_require__(3633);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor\n\nmodule.exports = function SpeciesConstructor(O, defaultConstructor) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tvar C = O.constructor;\n\tif (typeof C === 'undefined') {\n\t\treturn defaultConstructor;\n\t}\n\tif (Type(C) !== 'Object') {\n\t\tthrow new $TypeError('O.constructor is not an Object');\n\t}\n\tvar S = $species ? C[$species] : void 0;\n\tif (S == null) {\n\t\treturn defaultConstructor;\n\t}\n\tif (IsConstructor(S)) {\n\t\treturn S;\n\t}\n\tthrow new $TypeError('no constructor found');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTY1NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLG9CQUFvQixtQkFBTyxDQUFDLElBQWlCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyxJQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1NwZWNpZXNDb25zdHJ1Y3Rvci5qcz8yOGY5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRzcGVjaWVzID0gR2V0SW50cmluc2ljKCclU3ltYm9sLnNwZWNpZXMlJywgdHJ1ZSk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIElzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL0lzQ29uc3RydWN0b3InKTtcbnZhciBUeXBlID0gcmVxdWlyZSgnLi9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1zcGVjaWVzY29uc3RydWN0b3JcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG5cdGlmIChUeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdBc3NlcnRpb24gZmFpbGVkOiBUeXBlKE8pIGlzIG5vdCBPYmplY3QnKTtcblx0fVxuXHR2YXIgQyA9IE8uY29uc3RydWN0b3I7XG5cdGlmICh0eXBlb2YgQyA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChUeXBlKEMpICE9PSAnT2JqZWN0Jykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdPLmNvbnN0cnVjdG9yIGlzIG5vdCBhbiBPYmplY3QnKTtcblx0fVxuXHR2YXIgUyA9ICRzcGVjaWVzID8gQ1skc3BlY2llc10gOiB2b2lkIDA7XG5cdGlmIChTID09IG51bGwpIHtcblx0XHRyZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yO1xuXHR9XG5cdGlmIChJc0NvbnN0cnVjdG9yKFMpKSB7XG5cdFx0cmV0dXJuIFM7XG5cdH1cblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ25vIGNvbnN0cnVjdG9yIGZvdW5kJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9655\n")},9731:function(module){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTczMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9Cb29sZWFuLmpzPzEzZDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9Cb29sZWFuKHZhbHVlKSB7IHJldHVybiAhIXZhbHVlOyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9731\n")},751:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5ToInteger = __webpack_require__(775);\n\nvar ToNumber = __webpack_require__(5631);\n\n// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzUxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWdCOztBQUUzQyxlQUFlLG1CQUFPLENBQUMsSUFBWTs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eS5qcz81ZDI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///751\n")},8305:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar MAX_SAFE_INTEGER = __webpack_require__(1645);\n\nvar ToIntegerOrInfinity = __webpack_require__(751);\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToIntegerOrInfinity(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODMwNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxJQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMsR0FBdUI7O0FBRXpEO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QiwrQkFBK0I7QUFDL0I7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aC5qcz9hMTNlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8305\n")},5631:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = __webpack_require__(1924);\nvar regexTester = __webpack_require__(823);\nvar isPrimitive = __webpack_require__(4790);\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = __webpack_require__(4607);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'bigint') {\n\t\tthrow new $TypeError('Conversion from \\'BigInt\\' to \\'number\\' is not allowed.');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t}\n\t\tvar trimmed = $trim(value);\n\t\tif (trimmed !== value) {\n\t\t\treturn ToNumber(trimmed);\n\t\t}\n\n\t}\n\treturn $Number(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYzMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLElBQWU7O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub051bWJlci5qcz80MmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5631\n")},821:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = __webpack_require__(9619);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIxLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLDZCQUE2QixtQkFBTyxDQUFDLElBQTBCOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdC5qcz8zNTE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///821\n")},4607:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar toPrimitive = __webpack_require__(1503);\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYwNy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUF3Qjs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvUHJpbWl0aXZlLmpzP2ZkOWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4607\n")},9916:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar has = __webpack_require__(7642);\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = __webpack_require__(3633);\nvar ToBoolean = __webpack_require__(9731);\nvar IsCallable = __webpack_require__(1787);\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTkxNi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixVQUFVLG1CQUFPLENBQUMsSUFBSzs7QUFFdkIsbUJBQW1CLG1CQUFPLENBQUMsR0FBZTs7QUFFMUM7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLElBQVE7QUFDM0IsZ0JBQWdCLG1CQUFPLENBQUMsSUFBYTtBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxJQUFjOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1Byb3BlcnR5RGVzY3JpcHRvci5qcz9iZTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGhhcyA9IHJlcXVpcmUoJ2hhcycpO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxudmFyIFR5cGUgPSByZXF1aXJlKCcuL1R5cGUnKTtcbnZhciBUb0Jvb2xlYW4gPSByZXF1aXJlKCcuL1RvQm9vbGVhbicpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCcuL0lzQ2FsbGFibGUnKTtcblxuLy8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy04LjEwLjVcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1Byb3BlcnR5RGVzY3JpcHRvcihPYmopIHtcblx0aWYgKFR5cGUoT2JqKSAhPT0gJ09iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignVG9Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgYW4gb2JqZWN0Jyk7XG5cdH1cblxuXHR2YXIgZGVzYyA9IHt9O1xuXHRpZiAoaGFzKE9iaiwgJ2VudW1lcmFibGUnKSkge1xuXHRcdGRlc2NbJ1tbRW51bWVyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmVudW1lcmFibGUpO1xuXHR9XG5cdGlmIChoYXMoT2JqLCAnY29uZmlndXJhYmxlJykpIHtcblx0XHRkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLmNvbmZpZ3VyYWJsZSk7XG5cdH1cblx0aWYgKGhhcyhPYmosICd2YWx1ZScpKSB7XG5cdFx0ZGVzY1snW1tWYWx1ZV1dJ10gPSBPYmoudmFsdWU7XG5cdH1cblx0aWYgKGhhcyhPYmosICd3cml0YWJsZScpKSB7XG5cdFx0ZGVzY1snW1tXcml0YWJsZV1dJ10gPSBUb0Jvb2xlYW4oT2JqLndyaXRhYmxlKTtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ2dldCcpKSB7XG5cdFx0dmFyIGdldHRlciA9IE9iai5nZXQ7XG5cdFx0aWYgKHR5cGVvZiBnZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKGdldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdnZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbR2V0XV0nXSA9IGdldHRlcjtcblx0fVxuXHRpZiAoaGFzKE9iaiwgJ3NldCcpKSB7XG5cdFx0dmFyIHNldHRlciA9IE9iai5zZXQ7XG5cdFx0aWYgKHR5cGVvZiBzZXR0ZXIgIT09ICd1bmRlZmluZWQnICYmICFJc0NhbGxhYmxlKHNldHRlcikpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdzZXR0ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdGRlc2NbJ1tbU2V0XV0nXSA9IHNldHRlcjtcblx0fVxuXG5cdGlmICgoaGFzKGRlc2MsICdbW0dldF1dJykgfHwgaGFzKGRlc2MsICdbW1NldF1dJykpICYmIChoYXMoZGVzYywgJ1tbVmFsdWVdXScpIHx8IGhhcyhkZXNjLCAnW1tXcml0YWJsZV1dJykpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0ludmFsaWQgcHJvcGVydHkgZGVzY3JpcHRvci4gQ2Fubm90IGJvdGggc3BlY2lmeSBhY2Nlc3NvcnMgYW5kIGEgdmFsdWUgb3Igd3JpdGFibGUgYXR0cmlidXRlJyk7XG5cdH1cblx0cmV0dXJuIGRlc2M7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9916\n")},6846:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjg0Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9Ub1N0cmluZy5qcz8zMjgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRTdHJpbmcgPSBHZXRJbnRyaW5zaWMoJyVTdHJpbmclJyk7XG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvc3RyaW5nXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9TdHJpbmcoYXJndW1lbnQpIHtcblx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcblx0fVxuXHRyZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6846\n")},3633:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ES5Type = __webpack_require__(3951);\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsSUFBVzs7QUFFakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1R5cGUuanM/ZjRmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBFUzVUeXBlID0gcmVxdWlyZSgnLi4vNS9UeXBlJyk7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvMTEuMC8jc2VjLWVjbWFzY3JpcHQtZGF0YS10eXBlcy1hbmQtdmFsdWVzXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVHlwZSh4KSB7XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N5bWJvbCcpIHtcblx0XHRyZXR1cm4gJ1N5bWJvbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYmlnaW50Jykge1xuXHRcdHJldHVybiAnQmlnSW50Jztcblx0fVxuXHRyZXR1cm4gRVM1VHlwZSh4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3633\n")},4857:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $fromCharCode = GetIntrinsic('%String.fromCharCode%');\n\nvar isLeadingSurrogate = __webpack_require__(9544);\nvar isTrailingSurrogate = __webpack_require__(5424);\n\n// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair\n\nmodule.exports = function UTF16DecodeSurrogatePair(lead, trail) {\n\tif (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {\n\t\tthrow new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');\n\t}\n\t// var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n\treturn $fromCharCode(lead) + $fromCharCode(trail);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg1Ny5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLHlCQUF5QixtQkFBTyxDQUFDLElBQStCO0FBQ2hFLDBCQUEwQixtQkFBTyxDQUFDLElBQWdDOztBQUVsRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9VVEYxNlN1cnJvZ2F0ZVBhaXJUb0NvZGVQb2ludC5qcz84MzgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJGZyb21DaGFyQ29kZSA9IEdldEludHJpbnNpYygnJVN0cmluZy5mcm9tQ2hhckNvZGUlJyk7XG5cbnZhciBpc0xlYWRpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTGVhZGluZ1N1cnJvZ2F0ZScpO1xudmFyIGlzVHJhaWxpbmdTdXJyb2dhdGUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzVHJhaWxpbmdTdXJyb2dhdGUnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvMjAyMC8jc2VjLXV0ZjE2ZGVjb2Rlc3Vycm9nYXRlcGFpclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFVURjE2RGVjb2RlU3Vycm9nYXRlUGFpcihsZWFkLCB0cmFpbCkge1xuXHRpZiAoIWlzTGVhZGluZ1N1cnJvZ2F0ZShsZWFkKSB8fCAhaXNUcmFpbGluZ1N1cnJvZ2F0ZSh0cmFpbCkpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQXNzZXJ0aW9uIGZhaWxlZDogYGxlYWRgIG11c3QgYmUgYSBsZWFkaW5nIHN1cnJvZ2F0ZSBjaGFyIGNvZGUsIGFuZCBgdHJhaWxgIG11c3QgYmUgYSB0cmFpbGluZyBzdXJyb2dhdGUgY2hhciBjb2RlJyk7XG5cdH1cblx0Ly8gdmFyIGNwID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcblx0cmV0dXJuICRmcm9tQ2hhckNvZGUobGVhZCkgKyAkZnJvbUNoYXJDb2RlKHRyYWlsKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4857\n")},4908:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkwOC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvYWJzLmpzPzk2MDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4908\n")},375:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvZmxvb3IuanM/ZmMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIHZhciBtb2R1bG8gPSByZXF1aXJlKCcuL21vZHVsbycpO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy01LjJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbG9vcih4KSB7XG5cdC8vIHJldHVybiB4IC0gbW9kdWxvKHgsIDEpO1xuXHRyZXR1cm4gJGZsb29yKHgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///375\n")},4559:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDU1OS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanM/YzYzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENoZWNrT2JqZWN0Q29lcmNpYmxlKHZhbHVlLCBvcHRNZXNzYWdlKSB7XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3Iob3B0TWVzc2FnZSB8fCAoJ0Nhbm5vdCBjYWxsIG1ldGhvZCBvbiAnICsgdmFsdWUpKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4559\n")},775:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar abs = __webpack_require__(7890);\nvar floor = __webpack_require__(2748);\nvar ToNumber = __webpack_require__(7709);\n\nvar $isNaN = __webpack_require__(9086);\nvar $isFinite = __webpack_require__(2633);\nvar $sign = __webpack_require__(8111);\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzc1LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFVBQVUsbUJBQU8sQ0FBQyxJQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxJQUFTO0FBQzdCLGVBQWUsbUJBQU8sQ0FBQyxJQUFZOztBQUVuQyxhQUFhLG1CQUFPLENBQUMsSUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsSUFBcUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLElBQWlCOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDJDQUEyQztBQUMzQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvSW50ZWdlci5qcz81ZGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///775\n")},7709:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar ToPrimitive = __webpack_require__(1950);\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzcwOS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxJQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9OdW1iZXIuanM/Y2RmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuM1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKHZhbHVlKSB7XG5cdHZhciBwcmltID0gVG9QcmltaXRpdmUodmFsdWUsIE51bWJlcik7XG5cdGlmICh0eXBlb2YgcHJpbSAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gK3ByaW07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cdHZhciB0cmltbWVkID0gcHJpbS5yZXBsYWNlKC9eWyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdK3xbIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rJC9nLCAnJyk7XG5cdGlmICgoL14wW29iXXxeWystXTB4LykudGVzdCh0cmltbWVkKSkge1xuXHRcdHJldHVybiBOYU47XG5cdH1cblxuXHRyZXR1cm4gK3RyaW1tZWQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW1wbGljaXQtY29lcmNpb25cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7709\n")},1950:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = __webpack_require__(2116);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTk1MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSwwQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9QcmltaXRpdmUuanM/NDBjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXM1Jyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1950\n")},3951:function(module){"use strict";eval("\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzk1MS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1R5cGUuanM/ODFmMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFR5cGUoeCkge1xuXHRpZiAoeCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiAnTnVsbCc7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAnVW5kZWZpbmVkJztcblx0fVxuXHRpZiAodHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG5cdFx0cmV0dXJuICdPYmplY3QnO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcblx0XHRyZXR1cm4gJ051bWJlcic7XG5cdH1cblx0aWYgKHR5cGVvZiB4ID09PSAnYm9vbGVhbicpIHtcblx0XHRyZXR1cm4gJ0Jvb2xlYW4nO1xuXHR9XG5cdGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gJ1N0cmluZyc7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3951\n")},7890:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNzg5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvYWJzLmpzPzZiYmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///7890\n")},2748:function(module){"use strict";eval("\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc0OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Zsb29yLmpzPzIzODIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2748\n")},4445:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\n// TODO: remove, semver-major\n\nmodule.exports = __webpack_require__(210);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L0dldEludHJpbnNpYy5qcz9jYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gVE9ETzogcmVtb3ZlLCBzZW12ZXItbWFqb3JcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4445\n")},3682:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\n// node v0.6 has a bug where array lengths can be Set but not Defined\nvar hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;\n\n// eslint-disable-next-line global-require\nvar isArray = hasArrayLengthDefineBug && __webpack_require__(7912); // this does not depend on any other AOs.\n\nvar callBound = __webpack_require__(1924);\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\tif (\n\t\thasArrayLengthDefineBug\n\t\t&& P === 'length'\n\t\t&& '[[Value]]' in desc\n\t\t&& isArray(O)\n\t\t&& O.length !== desc['[[Value]]']\n\t) {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO.length = desc['[[Value]]'];\n\t\treturn O.length === desc['[[Value]]'];\n\t}\n\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzY4Mi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVTtBQUN2QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2RkFBNkYsVUFBVTs7QUFFdkc7QUFDQSx5Q0FBeUMsbUJBQU8sQ0FBQyxJQUFpQixHQUFHOztBQUVyRSxnQkFBZ0IsbUJBQU8sQ0FBQyxJQUFxQjs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL0RlZmluZU93blByb3BlcnR5LmpzPzQ5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxuLy8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG52YXIgaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggPT09IDA7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxudmFyIGlzQXJyYXkgPSBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyAmJiByZXF1aXJlKCcuLi8yMDIwL0lzQXJyYXknKTsgLy8gdGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gYW55IG90aGVyIEFPcy5cblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gRGVmaW5lT3duUHJvcGVydHkoSXNEYXRhRGVzY3JpcHRvciwgU2FtZVZhbHVlLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yLCBPLCBQLCBkZXNjKSB7XG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0aWYgKCFJc0RhdGFEZXNjcmlwdG9yKGRlc2MpKSB7XG5cdFx0XHQvLyBFUzMgZG9lcyBub3Qgc3VwcG9ydCBnZXR0ZXJzL3NldHRlcnNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFkZXNjWydbW0NvbmZpZ3VyYWJsZV1dJ10gfHwgIWRlc2NbJ1tbV3JpdGFibGVdXSddKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gZmFsbGJhY2sgZm9yIEVTM1xuXHRcdGlmIChQIGluIE8gJiYgJGlzRW51bWVyYWJsZShPLCBQKSAhPT0gISFkZXNjWydbW0VudW1lcmFibGVdXSddKSB7XG5cdFx0XHQvLyBhIG5vbi1lbnVtZXJhYmxlIGV4aXN0aW5nIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gcHJvcGVydHkgZG9lcyBub3QgZXhpc3QgYXQgYWxsLCBvciBleGlzdHMgYnV0IGlzIGVudW1lcmFibGVcblx0XHR2YXIgViA9IGRlc2NbJ1tbVmFsdWVdXSddO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE9bUF0gPSBWOyAvLyB3aWxsIHVzZSBbW0RlZmluZV1dXG5cdFx0cmV0dXJuIFNhbWVWYWx1ZShPW1BdLCBWKTtcblx0fVxuXHRpZiAoXG5cdFx0aGFzQXJyYXlMZW5ndGhEZWZpbmVCdWdcblx0XHQmJiBQID09PSAnbGVuZ3RoJ1xuXHRcdCYmICdbW1ZhbHVlXV0nIGluIGRlc2Ncblx0XHQmJiBpc0FycmF5KE8pXG5cdFx0JiYgTy5sZW5ndGggIT09IGRlc2NbJ1tbVmFsdWVdXSddXG5cdCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdE8ubGVuZ3RoID0gZGVzY1snW1tWYWx1ZV1dJ107XG5cdFx0cmV0dXJuIE8ubGVuZ3RoID09PSBkZXNjWydbW1ZhbHVlXV0nXTtcblx0fVxuXG5cdCRkZWZpbmVQcm9wZXJ0eShPLCBQLCBGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGRlc2MpKTtcblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3682\n")},2188:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = __webpack_require__(7642);\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjE4OC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBLFVBQVUsbUJBQU8sQ0FBQyxJQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9hc3NlcnRSZWNvcmQuanM/NTI5MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICRTeW50YXhFcnJvciA9IEdldEludHJpbnNpYygnJVN5bnRheEVycm9yJScpO1xuXG52YXIgaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBwcmVkaWNhdGVzID0ge1xuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzYuMC8jc2VjLXByb3BlcnR5LWRlc2NyaXB0b3Itc3BlY2lmaWNhdGlvbi10eXBlXG5cdCdQcm9wZXJ0eSBEZXNjcmlwdG9yJzogZnVuY3Rpb24gaXNQcm9wZXJ0eURlc2NyaXB0b3IoVHlwZSwgRGVzYykge1xuXHRcdGlmIChUeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR2YXIgYWxsb3dlZCA9IHtcblx0XHRcdCdbW0NvbmZpZ3VyYWJsZV1dJzogdHJ1ZSxcblx0XHRcdCdbW0VudW1lcmFibGVdXSc6IHRydWUsXG5cdFx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tTZXRdXSc6IHRydWUsXG5cdFx0XHQnW1tWYWx1ZV1dJzogdHJ1ZSxcblx0XHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdFx0fTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBEZXNjKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0XHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaXNEYXRhID0gaGFzKERlc2MsICdbW1ZhbHVlXV0nKTtcblx0XHR2YXIgSXNBY2Nlc3NvciA9IGhhcyhEZXNjLCAnW1tHZXRdXScpIHx8IGhhcyhEZXNjLCAnW1tTZXRdXScpO1xuXHRcdGlmIChpc0RhdGEgJiYgSXNBY2Nlc3Nvcikge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1Byb3BlcnR5IERlc2NyaXB0b3JzIG1heSBub3QgYmUgYm90aCBhY2Nlc3NvciBhbmQgZGF0YSBkZXNjcmlwdG9ycycpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBhc3NlcnRSZWNvcmQoVHlwZSwgcmVjb3JkVHlwZSwgYXJndW1lbnROYW1lLCB2YWx1ZSkge1xuXHR2YXIgcHJlZGljYXRlID0gcHJlZGljYXRlc1tyZWNvcmRUeXBlXTtcblx0aWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCd1bmtub3duIHJlY29yZCB0eXBlOiAnICsgcmVjb3JkVHlwZSk7XG5cdH1cblx0aWYgKCFwcmVkaWNhdGUoVHlwZSwgdmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoYXJndW1lbnROYW1lICsgJyBtdXN0IGJlIGEgJyArIHJlY29yZFR5cGUpO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2188\n")},2633:function(module){"use strict";eval("\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYzMy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiw0Q0FBNEM7O0FBRTVDLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL3JlYWRpdW0tanMvLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcz85NjNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRpc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAoYSkgeyByZXR1cm4gYSAhPT0gYTsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiAhJGlzTmFOKHgpICYmIHggIT09IEluZmluaXR5ICYmIHggIT09IC1JbmZpbml0eTsgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2633\n")},9544:function(module){"use strict";eval("\n\nmodule.exports = function isLeadingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xD800 && charCode <= 0xDBFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTU0NC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNMZWFkaW5nU3Vycm9nYXRlLmpzPzQzNzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzTGVhZGluZ1N1cnJvZ2F0ZShjaGFyQ29kZSkge1xuXHRyZXR1cm4gdHlwZW9mIGNoYXJDb2RlID09PSAnbnVtYmVyJyAmJiBjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9544\n")},9086:function(module){"use strict";eval("\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTA4Ni5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4uanM/YmNlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9086\n")},4790:function(module){"use strict";eval("\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDc5MC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcmltaXRpdmUuanM/YTk1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///4790\n")},2435:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar has = __webpack_require__(7642);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQzNS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQyxVQUFVLG1CQUFPLENBQUMsSUFBSztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNQcm9wZXJ0eURlc2NyaXB0b3IuanM/MDU2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBoYXMgPSByZXF1aXJlKCdoYXMnKTtcbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIElzUHJvcGVydHlEZXNjcmlwdG9yKEVTLCBEZXNjKSB7XG5cdGlmIChFUy5UeXBlKERlc2MpICE9PSAnT2JqZWN0Jykge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgYWxsb3dlZCA9IHtcblx0XHQnW1tDb25maWd1cmFibGVdXSc6IHRydWUsXG5cdFx0J1tbRW51bWVyYWJsZV1dJzogdHJ1ZSxcblx0XHQnW1tHZXRdXSc6IHRydWUsXG5cdFx0J1tbU2V0XV0nOiB0cnVlLFxuXHRcdCdbW1ZhbHVlXV0nOiB0cnVlLFxuXHRcdCdbW1dyaXRhYmxlXV0nOiB0cnVlXG5cdH07XG5cblx0Zm9yICh2YXIga2V5IGluIERlc2MpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGlmIChoYXMoRGVzYywga2V5KSAmJiAhYWxsb3dlZFtrZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aWYgKEVTLklzRGF0YURlc2NyaXB0b3IoRGVzYykgJiYgRVMuSXNBY2Nlc3NvckRlc2NyaXB0b3IoRGVzYykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignUHJvcGVydHkgRGVzY3JpcHRvcnMgbWF5IG5vdCBiZSBib3RoIGFjY2Vzc29yIGFuZCBkYXRhIGRlc2NyaXB0b3JzJyk7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2435\n")},5424:function(module){"use strict";eval("\n\nmodule.exports = function isTrailingSurrogate(charCode) {\n\treturn typeof charCode === 'number' && charCode >= 0xDC00 && charCode <= 0xDFFF;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQyNC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvaXNUcmFpbGluZ1N1cnJvZ2F0ZS5qcz9mNmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1RyYWlsaW5nU3Vycm9nYXRlKGNoYXJDb2RlKSB7XG5cdHJldHVybiB0eXBlb2YgY2hhckNvZGUgPT09ICdudW1iZXInICYmIGNoYXJDb2RlID49IDB4REMwMCAmJiBjaGFyQ29kZSA8PSAweERGRkY7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5424\n")},1645:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTY0NS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyxHQUFlOztBQUUxQztBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcmVhZGl1bS1qcy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC9oZWxwZXJzL21heFNhZmVJbnRlZ2VyLmpzP2I1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE1hdGggPSBHZXRJbnRyaW5zaWMoJyVNYXRoJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gJE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8ICRNYXRoLnBvdygyLCA1MykgLSAxO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1645\n")},823:function(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(210);\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = __webpack_require__(5559);\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODIzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyxJQUFXOztBQUVsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvcmVnZXhUZXN0ZXIuanM/YWU5NiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///823\n")},8111:function(module){"use strict";eval("\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODExMS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFkaXVtLWpzLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0L2hlbHBlcnMvc2lnbi5qcz8xZjIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///8111\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var t=__webpack_module_cache__[Q];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q](n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(Q){var t=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(Q,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(Q,n)&&Object.defineProperty(Q,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(Q,t){return Object.prototype.hasOwnProperty.call(Q,t)};var __webpack_exports__=__webpack_require__(5232)})(); \ No newline at end of file diff --git a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt index 9ffbe7177a..b3ec3cbc87 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Flow.kt @@ -20,11 +20,16 @@ import kotlin.time.Duration /** * Collects safely the [Flow] as a [State] when the local lifecycle is started. + * + * See https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda */ @Composable -fun Flow.asStateWhenStarted(initialValue: T): State = - flowWithLocalLifecycle() - .collectAsState(initial = initialValue) +fun Flow.asStateWhenStarted(initialValue: T): State { + val owner = LocalLifecycleOwner.current + return remember(this, owner) { + flowWithLifecycle(owner.lifecycle) + }.collectAsState(initial = initialValue) +} /** * Collects safely the [StateFlow] as a [State] when the local lifecycle is started. @@ -36,33 +41,19 @@ fun StateFlow.asStateWhenStarted(): State = /** * Collects safely the [StateFlow] as a [State] when the local lifecycle is started, transforming the * value first. - */ -@Composable -fun StateFlow.asStateWhenStarted(transform: (T) -> R): State = - map(transform) - .flowWithLocalLifecycle() - .collectAsState(initial = transform(value)) - -/** - * Creates a [Flow] emitting values only when the local lifecycle is started. * * See https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda */ @Composable -fun Flow.flowWithLocalLifecycle(minActiveState: Lifecycle.State = Lifecycle.State.STARTED): Flow { - val lifecycleOwner = LocalLifecycleOwner.current - return remember(this, lifecycleOwner) { - this.flowWithLifecycle(lifecycleOwner.lifecycle, minActiveState) - } -} - -@Composable -fun StateFlow.flowWithLocalLifecycle(minActiveState: Lifecycle.State = Lifecycle.State.STARTED): StateFlow { - val lifecycleOwner = LocalLifecycleOwner.current - return remember(this, lifecycleOwner) { - this.flowWithLifecycle(lifecycleOwner.lifecycle, minActiveState) - .stateIn(lifecycleOwner.lifecycleScope, SharingStarted.WhileSubscribed(), initialValue = value) - } +// This warning is to prevent people from accessing the `value` directly which will not observe +// changes. In this case we're using it for the `initial` value, so it's fine. +@Suppress("StateFlowValueCalledInComposition") +fun StateFlow.asStateWhenStarted(transform: (T) -> R): State { + val owner = LocalLifecycleOwner.current + return remember(this, owner) { + map(transform) + .flowWithLifecycle(owner.lifecycle) + }.collectAsState(initial = transform(value)) } /** From 03edb96971be258e47269d82c55b0ed08c1b7da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 4 Jul 2022 19:32:11 +0200 Subject: [PATCH 38/59] Fix tests --- .../r2/shared/util/tokenizer/TextTokenizer.kt | 36 ++++-- .../services/content/IcuTokenizerTest.kt | 107 ------------------ .../content/NaiveUnitTextContentTokenizer.kt | 101 ----------------- .../util/tokenizer/IcuTextTokenizerTest.kt | 65 +++++++++++ .../util/tokenizer/NaiveTextTokenizerTest.kt | 62 ++++++++++ 5 files changed, 154 insertions(+), 217 deletions(-) delete mode 100644 readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/IcuTokenizerTest.kt delete mode 100644 readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/NaiveUnitTextContentTokenizer.kt create mode 100644 readium/shared/src/test/java/org/readium/r2/shared/util/tokenizer/IcuTextTokenizerTest.kt create mode 100644 readium/shared/src/test/java/org/readium/r2/shared/util/tokenizer/NaiveTextTokenizerTest.kt diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt index 63416f762a..c7938416e8 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/TextTokenizer.kt @@ -33,9 +33,9 @@ class DefaultTextContentTokenizer private constructor( ) : TextTokenizer by tokenizer { constructor(unit: TextUnit, language: Language?) : this( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - IcuTokenizer(language = language, unit = unit) + IcuTextTokenizer(language = language, unit = unit) else - NaiveTokenizer(unit = unit) + NaiveTextTokenizer(unit = unit) ) } @@ -45,7 +45,7 @@ class DefaultTextContentTokenizer private constructor( */ @ExperimentalReadiumApi @RequiresApi(Build.VERSION_CODES.N) -class IcuTokenizer(language: Language?, unit: TextUnit) : TextTokenizer { +class IcuTextTokenizer(language: Language?, unit: TextUnit) : TextTokenizer { private val iterator: BreakIterator @@ -54,7 +54,7 @@ class IcuTokenizer(language: Language?, unit: TextUnit) : TextTokenizer { iterator = when (unit) { TextUnit.Word -> BreakIterator.getWordInstance(loc) TextUnit.Sentence -> BreakIterator.getSentenceInstance(loc) - TextUnit.Paragraph -> throw IllegalArgumentException("IcuUnitTextContentTokenizer does not handle TextContentUnit.Paragraph") + TextUnit.Paragraph -> throw IllegalArgumentException("IcuTextTokenizer does not handle TextContentUnit.Paragraph") } } @@ -64,7 +64,9 @@ class IcuTokenizer(language: Language?, unit: TextUnit) : TextTokenizer { var end: Int = iterator.next() return buildList { while (end != BreakIterator.DONE) { - add(start until end) + data.sanitizeRange(start, end) + ?.let { add(it) } + start = end end = iterator.next() } @@ -74,14 +76,15 @@ class IcuTokenizer(language: Language?, unit: TextUnit) : TextTokenizer { /** * A naive [Tokenizer] relying on java.text.BreakIterator to split the content. - * Use [IcuTokenizer] for better results. + * + * Use [IcuTextTokenizer] for better results. */ @ExperimentalReadiumApi -class NaiveTokenizer(unit: TextUnit) : TextTokenizer { +class NaiveTextTokenizer(unit: TextUnit) : TextTokenizer { private val iterator: java.text.BreakIterator = when (unit) { TextUnit.Word -> java.text.BreakIterator.getWordInstance() TextUnit.Sentence -> java.text.BreakIterator.getSentenceInstance() - TextUnit.Paragraph -> throw IllegalArgumentException("NaiveUnitTextContentTokenizer does not handle TextContentUnit.Paragraph") + TextUnit.Paragraph -> throw IllegalArgumentException("NaiveTextTokenizer does not handle TextContentUnit.Paragraph") } override fun tokenize(data: String): List { @@ -90,10 +93,25 @@ class NaiveTokenizer(unit: TextUnit) : TextTokenizer { var end: Int = iterator.next() return buildList { while (end != java.text.BreakIterator.DONE) { - add(start until end) + data.sanitizeRange(start, end) + ?.let { add(it) } + start = end end = iterator.next() } } } } + +/** + * Returns a substring range from the given [start] and [end] indices, after checking that + * the token is not blank and trimming trailing whitespaces. + */ +private fun String.sanitizeRange(start: Int, end: Int): IntRange? { + val token = substring(start, end) + val trimmedToken = token.trimEnd() + if (!trimmedToken.any { it.isLetterOrDigit() }) { + return null + } + return start until (start + trimmedToken.length) +} diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/IcuTokenizerTest.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/IcuTokenizerTest.kt deleted file mode 100644 index 022442760e..0000000000 --- a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/IcuTokenizerTest.kt +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.shared.publication.services.content - -import kotlinx.coroutines.runBlocking -import org.junit.Test -import org.junit.runner.RunWith -import org.readium.r2.shared.publication.Locator -import org.robolectric.RobolectricTestRunner -import java.util.* -import kotlin.test.assertContentEquals -import kotlin.test.assertEquals - -@RunWith(RobolectricTestRunner::class) -class IcuTokenizerTest { - - @Test - fun tokenizeEmptyContent() = runBlocking { - val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Sentence, contextLength = 5) - assertEquals(emptyList(), tokenizer.tokenize("").getOrThrow()) - } - - @Test - fun tokenizeByCharacters() = runBlocking { - val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Character, contextLength = 2) - val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() - assertContentEquals( - listOf( - Locator.Text(before = "", highlight = "H", after = "e "), - Locator.Text(before = "H", highlight = "e", after = " s"), - Locator.Text(before = "He", highlight = " ", after = "sa"), - Locator.Text(before = "e ", highlight = "s", after = "ai"), - Locator.Text(before = " s", highlight = "a", after = "id"), - Locator.Text(before = "sa", highlight = "i", after = "d:"), - Locator.Text(before = "ai", highlight = "d", after = ": "), - Locator.Text(before = "id", highlight = ":", after = " \n"), - Locator.Text(before = "d:", highlight = " ", after = "\n\""), - Locator.Text(before = ": ", highlight = "\n", after = "\"W"), - Locator.Text(before = " \n", highlight = "\"", after = "Wh"), - Locator.Text(before = "\n\"", highlight = "W", after = "ha"), - Locator.Text(before = "\"W", highlight = "h", after = "at"), - Locator.Text(before = "Wh", highlight = "a", after = "t?"), - Locator.Text(before = "ha", highlight = "t", after = "?\""), - Locator.Text(before = "at", highlight = "?", after = "\""), - Locator.Text(before = "t?", highlight = "\"", after = ""), - ), - result - ) - } - - @Test - fun tokenizeByWords() = runBlocking { - val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Word, contextLength = 2) - val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() - assertContentEquals( - listOf( - Locator.Text(before = "", highlight = "He", after = " s"), - Locator.Text(before = "e ", highlight = "said", after = ": "), - Locator.Text(before = "\n\"", highlight = "What", after = "?\""), - ), - result - ) - } - - @Test - fun tokenizeBySentences() = runBlocking { - val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Sentence, contextLength = 5) - val result = tokenizer.tokenize(""" - Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble - In the end, she went ahead. - """.trimIndent()).getOrThrow() - assertContentEquals( - listOf( - Locator.Text( - before = "", - highlight = "Alice said, looking above: \"and what is the use of a book?\".", - after = " So sh" - ), - Locator.Text( - before = "k?\". ", - highlight = "So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble", - after = "\nIn th" - ), - Locator.Text( - before = "uble\n", - highlight = "In the end, she went ahead.", - after = "" - ) - ), - result - ) - } - - @Test - fun tokenizeByParagraphIsNotSupported() = runBlocking { - val tokenizer = IcuTokenizer(locale = Locale.ENGLISH, unit = TextUnit.Paragraph, contextLength = 5) - val result = tokenizer.tokenize(""" - Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble - In the end, she went ahead. - """.trimIndent()) - assertEquals("IcuUnitTextContentTokenizer does not handle TextContentUnit.Paragraph", result.exceptionOrNull()?.message) - } -} diff --git a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/NaiveUnitTextContentTokenizer.kt b/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/NaiveUnitTextContentTokenizer.kt deleted file mode 100644 index 991a97fc6b..0000000000 --- a/readium/shared/src/test/java/org/readium/r2/shared/publication/services/content/NaiveUnitTextContentTokenizer.kt +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.shared.publication.services.content - -import kotlinx.coroutines.runBlocking -import org.junit.Test -import org.junit.runner.RunWith -import org.readium.r2.shared.publication.Locator -import org.robolectric.RobolectricTestRunner -import kotlin.test.assertContentEquals -import kotlin.test.assertEquals - -@RunWith(RobolectricTestRunner::class) -class NaiveTokenizerTest { - - @Test - fun tokenizeEmptyContent() = runBlocking { - val tokenizer = NaiveTokenizer(unit = TextUnit.Sentence, contextLength = 5) - assertEquals(emptyList(), tokenizer.tokenize("").getOrThrow()) - } - - @Test - fun tokenizeByCharacters() = runBlocking { - val tokenizer = NaiveTokenizer(unit = TextUnit.Character, contextLength = 2) - val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() - assertContentEquals( - listOf( - Locator.Text(before = "", highlight = "H", after = "e "), - Locator.Text(before = "H", highlight = "e", after = " s"), - Locator.Text(before = "He", highlight = " ", after = "sa"), - Locator.Text(before = "e ", highlight = "s", after = "ai"), - Locator.Text(before = " s", highlight = "a", after = "id"), - Locator.Text(before = "sa", highlight = "i", after = "d:"), - Locator.Text(before = "ai", highlight = "d", after = ": "), - Locator.Text(before = "id", highlight = ":", after = " \n"), - Locator.Text(before = "d:", highlight = " ", after = "\n\""), - Locator.Text(before = ": ", highlight = "\n", after = "\"W"), - Locator.Text(before = " \n", highlight = "\"", after = "Wh"), - Locator.Text(before = "\n\"", highlight = "W", after = "ha"), - Locator.Text(before = "\"W", highlight = "h", after = "at"), - Locator.Text(before = "Wh", highlight = "a", after = "t?"), - Locator.Text(before = "ha", highlight = "t", after = "?\""), - Locator.Text(before = "at", highlight = "?", after = "\""), - Locator.Text(before = "t?", highlight = "\"", after = ""), - ), - result - ) - } - - @Test - fun tokenizeByWords() = runBlocking { - val tokenizer = NaiveTokenizer(unit = TextUnit.Word, contextLength = 2) - val result = tokenizer.tokenize("He said: \n\"What?\"").getOrThrow() - assertContentEquals( - listOf( - Locator.Text(before = "", highlight = "He", after = " s"), - Locator.Text(before = "e ", highlight = "said", after = ": "), - Locator.Text(before = "\n\"", highlight = "What", after = "?\""), - ), - result - ) - } - - @Test - fun tokenizeBySentences() = runBlocking { - val tokenizer = NaiveTokenizer(unit = TextUnit.Sentence, contextLength = 5) - val result = tokenizer.tokenize(""" - Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble - In the end, she went ahead. - """.trimIndent()).getOrThrow() - assertContentEquals( - listOf( - Locator.Text( - before = "", - highlight = "Alice said, looking above: \"and what is the use of a book?\".", - after = " So sh" - ), - Locator.Text( - before = "k?\". ", - highlight = "So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble\nIn the end, she went ahead.", - after = "" - ), - ), - result - ) - } - - @Test - fun tokenizeByParagraphIsNotSupported() = runBlocking { - val tokenizer = NaiveTokenizer(unit = TextUnit.Paragraph, contextLength = 5) - val result = tokenizer.tokenize(""" - Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble - In the end, she went ahead. - """.trimIndent()) - assertEquals("NaiveUnitTextContentTokenizer does not handle TextContentUnit.Paragraph", result.exceptionOrNull()?.message) - } -} diff --git a/readium/shared/src/test/java/org/readium/r2/shared/util/tokenizer/IcuTextTokenizerTest.kt b/readium/shared/src/test/java/org/readium/r2/shared/util/tokenizer/IcuTextTokenizerTest.kt new file mode 100644 index 0000000000..4c2405c832 --- /dev/null +++ b/readium/shared/src/test/java/org/readium/r2/shared/util/tokenizer/IcuTextTokenizerTest.kt @@ -0,0 +1,65 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.util.tokenizer + +import kotlinx.coroutines.runBlocking +import org.junit.Test +import org.junit.runner.RunWith +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.util.Language +import org.robolectric.RobolectricTestRunner +import java.util.* +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals +import kotlin.test.assertFails + +@OptIn(ExperimentalReadiumApi::class) +@RunWith(RobolectricTestRunner::class) +class IcuTokenizerTest { + + @Test + fun tokenizeEmptyContent() = runBlocking { + val tokenizer = IcuTextTokenizer(language = Language(Locale.ENGLISH), unit = TextUnit.Sentence) + assertEquals(emptyList(), tokenizer.tokenize("")) + } + + @Test + fun tokenizeByWords() = runBlocking { + val tokenizer = IcuTextTokenizer(language = Language(Locale.ENGLISH), unit = TextUnit.Word) + val source = "He said: \n\"What?\"" + assertContentEquals( + listOf("He", "said", "What"), + tokenizer.tokenize(source) + .map { source.substring(it) } + ) + } + + @Test + fun tokenizeBySentences() = runBlocking { + val tokenizer = IcuTextTokenizer(language = Language(Locale.ENGLISH), unit = TextUnit.Sentence) + val source = """ + Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble + In the end, she went ahead. + """.trimIndent() + assertContentEquals( + listOf( + "Alice said, looking above: \"and what is the use of a book?\".", + "So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble", + "In the end, she went ahead.", + ), + tokenizer.tokenize(source) + .map { source.substring(it) } + ) + } + + @Test + fun tokenizeByParagraphIsNotSupported(): Unit = runBlocking { + assertFails("IcuTextTokenizer does not handle TextContentUnit.Paragraph") { + IcuTextTokenizer(language = Language(Locale.ENGLISH), unit = TextUnit.Paragraph) + } + } +} \ No newline at end of file diff --git a/readium/shared/src/test/java/org/readium/r2/shared/util/tokenizer/NaiveTextTokenizerTest.kt b/readium/shared/src/test/java/org/readium/r2/shared/util/tokenizer/NaiveTextTokenizerTest.kt new file mode 100644 index 0000000000..2b899fc8ae --- /dev/null +++ b/readium/shared/src/test/java/org/readium/r2/shared/util/tokenizer/NaiveTextTokenizerTest.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.util.tokenizer + +import kotlinx.coroutines.runBlocking +import org.junit.Test +import org.junit.runner.RunWith +import org.readium.r2.shared.ExperimentalReadiumApi +import org.robolectric.RobolectricTestRunner +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals +import kotlin.test.assertFails + +@OptIn(ExperimentalReadiumApi::class) +@RunWith(RobolectricTestRunner::class) +class NaiveTokenizerTest { + + @Test + fun tokenizeEmptyContent() = runBlocking { + val tokenizer = NaiveTextTokenizer(unit = TextUnit.Sentence) + assertEquals(emptyList(), tokenizer.tokenize("")) + } + + @Test + fun tokenizeByWords() = runBlocking { + val tokenizer = NaiveTextTokenizer(unit = TextUnit.Word) + val source = "He said: \n\"What?\"" + assertContentEquals( + listOf("He", "said", "What"), + tokenizer.tokenize(source) + .map { source.substring(it) } + ) + } + + @Test + fun tokenizeBySentences() = runBlocking { + val tokenizer = NaiveTextTokenizer(unit = TextUnit.Sentence) + val source = """ + Alice said, looking above: "and what is the use of a book?". So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble + In the end, she went ahead. + """.trimIndent() + assertContentEquals( + listOf( + "Alice said, looking above: \"and what is the use of a book?\".", + "So she was considering (as well as she could), whether making a daisy-chain would be worth the trouble\nIn the end, she went ahead.", + ), + tokenizer.tokenize(source) + .map { source.substring(it) } + ) + } + + @Test + fun tokenizeByParagraphIsNotSupported(): Unit = runBlocking { + assertFails("NaiveTextTokenizer does not handle TextContentUnit.Paragraph") { + NaiveTextTokenizer(unit = TextUnit.Paragraph) + } + } +} From 6b10acc14ea3eb003ed57f9fbe68af45b5bc9082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 4 Jul 2022 19:39:01 +0200 Subject: [PATCH 39/59] Toggle TTS --- .../org/readium/r2/testapp/reader/VisualReaderFragment.kt | 2 +- .../org/readium/r2/testapp/reader/tts/TtsViewModel.kt | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index cc3962134a..e98f78e6e4 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -258,7 +258,7 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.tts -> { - checkNotNull(model.tts).start(navigator) + checkNotNull(model.tts).toggleStart(navigator) } else -> return super.onOptionsItemSelected(item) } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 1c77f8085e..fa47bb97eb 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -166,6 +166,14 @@ class TtsViewModel private constructor( } } + fun toggleStart(navigator: Navigator) { + if (state.value.showControls) { + stop() + } else { + start(navigator) + } + } + /** * Begins the TTS playback in the given [navigator]. */ From 41da132daf143fd5ffebe9ed4c0a844203848776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 5 Jul 2022 09:32:14 +0200 Subject: [PATCH 40/59] Clean up --- .../tts/{TtsController.kt => TtsDirector.kt} | 52 ++++------------ .../org/readium/r2/navigator/tts/TtsEngine.kt | 40 ++++++++++-- .../org/readium/r2/shared/util/CursorList.kt | 45 ++++++++++++++ .../r2/testapp/reader/tts/TtsControls.kt | 2 +- .../r2/testapp/reader/tts/TtsViewModel.kt | 61 +++++++++---------- 5 files changed, 124 insertions(+), 76 deletions(-) rename readium/navigator/src/main/java/org/readium/r2/navigator/tts/{TtsController.kt => TtsDirector.kt} (91%) create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/util/CursorList.kt diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt similarity index 91% rename from readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt rename to readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt index 06f76c9589..3794a45b29 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsController.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt @@ -23,9 +23,7 @@ import org.readium.r2.shared.publication.services.content.Content import org.readium.r2.shared.publication.services.content.ContentIterator import org.readium.r2.shared.publication.services.content.contentIterator import org.readium.r2.shared.publication.services.content.isContentIterable -import org.readium.r2.shared.util.Either -import org.readium.r2.shared.util.Language -import org.readium.r2.shared.util.SuspendingCloseable +import org.readium.r2.shared.util.* import org.readium.r2.shared.util.tokenizer.ContentTokenizer import org.readium.r2.shared.util.tokenizer.TextContentTokenizer import org.readium.r2.shared.util.tokenizer.TextUnit @@ -41,38 +39,9 @@ fun interface TtsTokenizerFactory { fun create(defaultLanguage: Language?): ContentTokenizer } -class CursorList( - private val list: List = emptyList(), - private val startIndex: Int = 0 -) : List by list { - private var index: Int? = null - - fun current(): E? = - moveAndGet(index ?: startIndex) - - fun previous(): E? = - moveAndGet(index - ?.let { it - 1} - ?: startIndex - ) - - fun next(): E? = - moveAndGet(index?.let { it + 1} - ?: startIndex - ) - - private fun moveAndGet(index: Int): E? { - if (!list.indices.contains(index)) { - return null - } - this.index = index - return get(index) - } -} - @OptIn(DelicateReadiumApi::class) @ExperimentalReadiumApi -class TtsController private constructor( +class TtsDirector private constructor( private val publication: Publication, config: Configuration, engineFactory: TtsEngineFactory, @@ -89,12 +58,14 @@ class TtsController private constructor( : Exception(error.message, error) } + @ExperimentalReadiumApi data class Configuration( val defaultLanguage: Language? = null, val voice: TtsEngine.Voice? = null, val rate: Double = 1.0, ) + @ExperimentalReadiumApi data class Utterance( val text: String, val locator: Locator, @@ -103,6 +74,7 @@ class TtsController private constructor( internal val id: String, ) + @ExperimentalReadiumApi interface Listener { /** * Notifies an [error] occurred while speaking [utterance]. @@ -123,7 +95,7 @@ class TtsController private constructor( publication: Publication, config: Configuration = Configuration(), tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory - ): TtsController? = invoke( + ): TtsDirector? = invoke( publication, config = config, engineFactory = { listener -> AndroidTtsEngine(context, listener) }, @@ -135,10 +107,10 @@ class TtsController private constructor( config: Configuration = Configuration(), engineFactory: TtsEngineFactory, tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory - ): TtsController? { + ): TtsDirector? { if (!canSpeak(publication)) return null - return TtsController(publication, config, engineFactory, tokenizerFactory) + return TtsDirector(publication, config, engineFactory, tokenizerFactory) } fun canSpeak(publication: Publication): Boolean = @@ -170,7 +142,7 @@ class TtsController private constructor( * Underlying [TtsEngine] instance. * * WARNING: Don't control the playback or set the config directly with the engine. Use the - * [TtsController] APIs instead. This property is used to access engine-specific APIs such as + * [TtsDirector] APIs instead. This property is used to access engine-specific APIs such as * [AndroidTtsEngine.requestInstallMissingVoice], */ @DelicateReadiumApi @@ -185,8 +157,10 @@ class TtsController private constructor( override suspend fun close() { tryOrLog { - engine.close() scope.cancel() + if (::engine.isLazyInitialized) { + engine.close() + } } } @@ -287,7 +261,7 @@ class TtsController private constructor( } private fun Utterance.voiceOrLanguage(): Either { - // User selected voice, if it's compatible with the given language. + // User selected voice, if it's compatible with the utterance language. config.value.voice ?.takeIf { language == null || it.language.removeRegion() == language.removeRegion() } ?.let { return Either.Left(it) } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index 934dae74ee..a446e806f3 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -12,9 +12,9 @@ import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.SuspendingCloseable /** - * A text-to-speech engine plays text utterances (e.g. sentence) to the user. + * A text-to-speech engine synthesizes text utterances (e.g. sentence). * - * Implement this interface to support third-party eniines with [TtsController]. + * Implement this interface to support third-party engines with [TtsDirector]. */ @ExperimentalReadiumApi interface TtsEngine : SuspendingCloseable { @@ -28,15 +28,19 @@ interface TtsEngine : SuspendingCloseable { class InitializationFailed(cause: Throwable? = null) : Exception("The TTS engine failed to initialize", cause) + /** Tried to synthesize an utterance with an unsupported language. */ class LanguageNotSupported(val language: Language, cause: Throwable? = null) : Exception("The language ${language.code} is not supported by the TTS engine", cause) + /** The selected language is missing downloadable data. */ class LanguageSupportIncomplete(val language: Language, cause: Throwable? = null) : Exception("The language ${language.code} requires additional files by the TTS engine", cause) + /** Error during network calls. */ class Network(cause: Throwable? = null) : Exception("A network error occurred", cause) + /** Other engine-specific errors. */ class Other(override val cause: Throwable) : Exception(cause.message ?: "An unknown error occurred", cause) @@ -48,22 +52,47 @@ interface TtsEngine : SuspendingCloseable { } } + /** + * TTS engine callbacks. + */ @ExperimentalReadiumApi interface Listener { + /** + * Called when the engine speaks a portion of an utterance (e.g. a word). + */ fun onSpeakRange(utteranceId: String, range: IntRange) + + /** + * Called when an utterance was successfully synthesized. + * + * This won't be called if the utterance was cancelled or an error occured. + */ fun onDone(utteranceId: String) + /** + * Called when a general engine error occurred. + */ fun onEngineError(error: Exception) + + /** + * Called when an error occurred while synthesizing an utterance. + */ fun onUtteranceError(utteranceId: String, error: Exception) + /** + * Called when the list of available voices is updated. + */ fun onAvailableVoicesChange(voices: List) } /** - * An utterance is a short text that can be synthesized by the TTS engine. + * An utterance is an arbitrary text (e.g. sentence) that can be synthesized by the TTS engine. * * @param id Unique identifier for this utterance, in the context of the caller. * @param text Text to be spoken. + * @param rate Speed of the voice. + * @param voiceOrLanguage Either an explicit voice or the language of the text. If a language + * is provided, the default voice for this language will be used. */ @ExperimentalReadiumApi data class Utterance( @@ -77,7 +106,7 @@ interface TtsEngine : SuspendingCloseable { * Represents a voice provided by the TTS engine which can speak an utterance. * * @param id Unique and stable identifier for this voice. Can be used to store and retrieve the - * voice in the user preferences. + * voice from the user preferences. * @param name Human-friendly name for this voice, when available. * @param language Language (and region) this voice belongs to. * @param quality Voice quality. @@ -109,6 +138,9 @@ interface TtsEngine : SuspendingCloseable { val rateRange: ClosedRange val availableVoices: List + /** + * Returns the voice with given identifier, if it exists. + */ fun voiceWithId(id: String): Voice? = availableVoices.firstOrNull { it.id == id } } \ No newline at end of file diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/CursorList.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/CursorList.kt new file mode 100644 index 0000000000..2142691589 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/CursorList.kt @@ -0,0 +1,45 @@ +package org.readium.r2.shared.util + +import org.readium.r2.shared.InternalReadiumApi + +/** + * A [List] with a mutable cursor index. + */ +@InternalReadiumApi +class CursorList( + private val list: List = emptyList(), + private val startIndex: Int = 0 +) : List by list { + private var index: Int? = null + + /** + * Returns the current element. + */ + fun current(): E? = + moveAndGet(index ?: startIndex) + + /** + * Moves the cursor backward and returns the element, or null when reaching the beginning. + */ + fun previous(): E? = + moveAndGet(index + ?.let { it - 1} + ?: startIndex + ) + + /** + * Moves the cursor forward and returns the element, or null when reaching the end. + */ + fun next(): E? = + moveAndGet(index?.let { it + 1} + ?: startIndex + ) + + private fun moveAndGet(index: Int): E? { + if (!list.indices.contains(index)) { + return null + } + this.index = index + return get(index) + } +} diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index af12d28fcc..8c3de2cd06 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import org.readium.r2.navigator.tts.TtsController.Configuration +import org.readium.r2.navigator.tts.TtsDirector.Configuration import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.util.Language diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index fa47bb97eb..7a62de6a74 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -7,18 +7,15 @@ package org.readium.r2.testapp.reader.tts import android.content.Context -import android.graphics.Color import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -import org.readium.r2.navigator.Decoration -import org.readium.r2.navigator.ExperimentalDecorator import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.tts.AndroidTtsEngine -import org.readium.r2.navigator.tts.TtsController -import org.readium.r2.navigator.tts.TtsController.Configuration +import org.readium.r2.navigator.tts.TtsDirector +import org.readium.r2.navigator.tts.TtsDirector.Configuration import org.readium.r2.navigator.tts.TtsEngine import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.DelicateReadiumApi @@ -28,14 +25,14 @@ import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R -import org.readium.r2.navigator.tts.TtsController.State as TtsState +import org.readium.r2.navigator.tts.TtsDirector.State as TtsState /** - * View model driving the text to speech controller. + * View model holding the text to speech director. */ -@OptIn(ExperimentalReadiumApi::class, ExperimentalDecorator::class) +@OptIn(ExperimentalReadiumApi::class) class TtsViewModel private constructor( - private val controller: TtsController, + private val director: TtsDirector, private val scope: CoroutineScope ) { @@ -49,7 +46,7 @@ class TtsViewModel private constructor( publication: Publication, scope: CoroutineScope ): TtsViewModel? = - TtsController(context, publication) + TtsDirector(context, publication) ?.let { TtsViewModel(it, scope) } } @@ -83,7 +80,7 @@ class TtsViewModel private constructor( sealed class Event { /** - * Emitted when the [TtsController] fails with an error. + * Emitted when the [TtsDirector] fails with an error. */ class OnError(val error: UserException) : Event() @@ -108,10 +105,10 @@ class TtsViewModel private constructor( private val isStarted = MutableStateFlow(false) init { - controller.listener = ControllerListener() + director.listener = ControllerListener() val voicesByLanguage: Flow>> = - controller.availableVoices + director.availableVoices .map { voices -> voices.groupBy { it.language } } val languages: Flow> = voicesByLanguage @@ -121,7 +118,7 @@ class TtsViewModel private constructor( val voicesForSelectedLanguage: Flow> = combine( - controller.config.map { it.defaultLanguage }, + director.config.map { it.defaultLanguage }, voicesByLanguage, ) { language, voices -> language @@ -131,13 +128,13 @@ class TtsViewModel private constructor( } val settings: Flow = combine( - controller.config, + director.config, languages, voicesForSelectedLanguage, ) { config, langs, voices -> Settings( config = config, - rateRange = controller.rateRange, + rateRange = director.rateRange, availableLanguages = langs, availableVoices = voices ) @@ -145,7 +142,7 @@ class TtsViewModel private constructor( state = combine( isStarted, - controller.state, + director.state, settings ) { isStarted, state, currentSettings -> val playing = (state as? TtsState.Playing) @@ -162,7 +159,7 @@ class TtsViewModel private constructor( fun onCleared() { runBlocking { - controller.close() + director.close() } } @@ -178,44 +175,44 @@ class TtsViewModel private constructor( * Begins the TTS playback in the given [navigator]. */ fun start(navigator: Navigator) = scope.launch { - controller.start(fromLocator = navigator.firstVisibleElementLocator()) + director.start(fromLocator = navigator.firstVisibleElementLocator()) isStarted.value = true } fun stop() { - controller.stop() + director.stop() isStarted.value = false } fun resumeOrPause() { - controller.resumeOrPause() + director.resumeOrPause() } fun pause() { - controller.pause() + director.pause() } fun previous() { - controller.previous() + director.previous() } fun next() { - controller.next() + director.next() } fun setConfig(config: Configuration) { - controller.setConfig(config) + director.setConfig(config) } @OptIn(DelicateReadiumApi::class) fun requestInstallVoice(context: Context) { - controller.engine.requestInstallMissingVoice(context) + director.engine.requestInstallMissingVoice(context) } - private inner class ControllerListener : TtsController.Listener { + private inner class ControllerListener : TtsDirector.Listener { override fun onUtteranceError( - utterance: TtsController.Utterance, - error: TtsController.Exception + utterance: TtsDirector.Utterance, + error: TtsDirector.Exception ) { scope.launch { val shouldContinuePlayback = handleTtsException(error) @@ -227,7 +224,7 @@ class TtsViewModel private constructor( } - override fun onError(error: TtsController.Exception) { + override fun onError(error: TtsDirector.Exception) { scope.launch { handleTtsException(error) } @@ -236,9 +233,9 @@ class TtsViewModel private constructor( /** * Handles the given error and returns whether the playback should continue. */ - private suspend fun handleTtsException(error: TtsController.Exception): Boolean = + private suspend fun handleTtsException(error: TtsDirector.Exception): Boolean = when (error) { - is TtsController.Exception.Engine -> when (val err = error.error) { + is TtsDirector.Exception.Engine -> when (val err = error.error) { // The `LanguageSupportIncomplete` exception is a special case. We can recover from // it by asking the user to download the missing voice data. is TtsEngine.Exception.LanguageSupportIncomplete -> { From 4e65684caa0cc2a22b488b6c195f75302721705c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Tue, 5 Jul 2022 17:06:32 +0200 Subject: [PATCH 41/59] Refactoring and documentation --- .../r2/navigator/tts/AndroidTtsEngine.kt | 244 +++++---- .../readium/r2/navigator/tts/TtsDirector.kt | 486 +++++++++++------- .../org/readium/r2/navigator/tts/TtsEngine.kt | 53 +- .../shared/util/tokenizer/ContentTokenizer.kt | 7 +- .../r2/testapp/reader/VisualReaderFragment.kt | 4 +- .../r2/testapp/reader/tts/TtsControls.kt | 2 +- .../r2/testapp/reader/tts/TtsViewModel.kt | 55 +- 7 files changed, 527 insertions(+), 324 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index 1560a1fa4f..a2b7543af2 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -11,14 +11,17 @@ import android.content.Intent import android.speech.tts.TextToSpeech import android.speech.tts.UtteranceProgressListener import kotlinx.coroutines.* -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.channels.onFailure import org.readium.r2.navigator.tts.TtsEngine.* import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.MapWithDefaultCompanion +import org.readium.r2.shared.util.Try +import java.util.* import kotlin.Exception +import kotlin.coroutines.resume import android.speech.tts.Voice as AndroidVoice /** @@ -62,12 +65,53 @@ class AndroidTtsEngine( private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) - private val engineListener = EngineListener() + /** + * Utterances to be synthesized, in order of [speak] calls. + */ + private val tasks = Channel(Channel.BUFFERED) - private val engine = TextToSpeech(context, engineListener).apply { - setOnUtteranceProgressListener(engineListener) + init { + scope.launch { + init.await() + + for (task in tasks) { + ensureActive() + task.run() + } + } } + override val rateRange: ClosedRange = 0.1..4.0 + + override var availableVoices: List = emptyList() + private set(value) { + field = value + listener.onAvailableVoicesChange(value) + } + + override suspend fun close() { + scope.cancel() + tasks.cancel() + engine.shutdown() + } + + override suspend fun speak( + utterance: Utterance, + onSpeakRange: (IntRange) -> Unit + ): TtsTry = + suspendCancellableCoroutine { cont -> + val result = tasks.trySend(UtteranceTask( + utterance = utterance, + continuation = cont, + onSpeakRange = onSpeakRange + )) + + result.onFailure { + listener.onEngineError( + TtsEngine.Exception.Other(IllegalStateException("Failed to schedule a new utterance task"))) + } + } + /** * Start the activity to install additional language data. * To be called if you receive a [TtsEngine.Exception.LanguageSupportIncomplete] error. @@ -89,122 +133,128 @@ class AndroidTtsEngine( return true } - override val rateRange: ClosedRange = 0.1..3.0 - override var availableVoices: List = emptyList() - private set + // Engine - private var speakJob: Job? = null - private val mutex = Mutex() + /** Future completed when the [engine] is fully initialized. */ + private val init = CompletableDeferred() - override fun speak(utterance: Utterance) { - cancel() - speakJob = scope.launch { - init.await() + /** Underlying Android [TextToSpeech] engine. */ + private val engine = TextToSpeech(context, EngineInitListener()) - mutex.withLock { - speakSync(utterance) + private inner class EngineInitListener : TextToSpeech.OnInitListener { + override fun onInit(status: Int) { + if (status == TextToSpeech.SUCCESS) { + scope.launch { + availableVoices = engine.voices.map { it.toVoice() } + init.complete(Unit) + } + } else { + listener.onEngineError(TtsEngine.Exception.InitializationFailed()) } } } - private fun speakSync(utterance: Utterance) { - try { - engine.setupFor(utterance) - engine.speak(utterance.text, TextToSpeech.QUEUE_FLUSH, null, utterance.id) - - } catch (e: kotlin.Exception) { - listener.onUtteranceError(utterance.id, TtsEngine.Exception.wrap(e)) - } - } - - private fun TextToSpeech.setupFor(utterance: Utterance) { - setSpeechRate(utterance.rate.toFloat()) - - utterance.voiceOrLanguage - .onLeft { voice -> - // Setup the user selected voice. - engine.voice = engine.voices - .firstOrNull { it.name == voice.id } - ?: throw IllegalStateException("Unknown Android voice ${voice.id}") - } - .onRight { language -> - // Or fallback on the language. - val localeResult = engine.setLanguage(language.locale) - if (localeResult < TextToSpeech.LANG_AVAILABLE) { - if (localeResult == TextToSpeech.LANG_MISSING_DATA) - throw TtsEngine.Exception.LanguageSupportIncomplete(language) - else - throw TtsEngine.Exception.LanguageNotSupported(language) + /** + * Holds a single utterance to be synthesized and the continuation for the [speak] call. + */ + private inner class UtteranceTask( + val utterance: Utterance, + val continuation: CancellableContinuation>, + val onSpeakRange: (IntRange) -> Unit, + ) { + fun run() { + if (!continuation.isActive) return + + // Interrupt the engine when the task is cancelled. + continuation.invokeOnCancellation { + tryOrLog { + engine.stop() + engine.setOnUtteranceProgressListener(null) } } - } - - override fun cancel() { - speakJob?.cancel() - speakJob = null - if (init.isCompleted) { - tryOrLog { - engine.stop() + try { + val id = UUID.randomUUID().toString() + engine.setup() + engine.setOnUtteranceProgressListener(Listener(id)) + engine.speak(utterance.text, TextToSpeech.QUEUE_FLUSH, null, id) + } catch (e: kotlin.Exception) { + finish(TtsEngine.Exception.wrap(e)) } } - } - override suspend fun close() { - cancel() - engine.shutdown() - scope.cancel() - } - - // Engine - - private val init = CompletableDeferred() + /** + * Terminates this task. + */ + private fun finish(error: TtsEngine.Exception? = null) { + continuation.resume( + error?.let { Try.failure(error) } + ?: Try.success(Unit) + ) + } - private inner class EngineListener : TextToSpeech.OnInitListener, UtteranceProgressListener() { - override fun onInit(status: Int) { - if (status == TextToSpeech.SUCCESS) { - scope.launch { - updateVoices() - init.complete(Unit) + /** + * Setups the [engine] using the [utterance]'s configuration. + */ + private fun TextToSpeech.setup() { + setSpeechRate(utterance.rate.toFloat()) + + utterance.voiceOrLanguage + .onLeft { voice -> + // Setup the user selected voice. + engine.voice = engine.voices + .firstOrNull { it.name == voice.id } + ?: throw IllegalStateException("Unknown Android voice: ${voice.id}") + } + .onRight { language -> + // Or fallback on the language. + val localeResult = engine.setLanguage(language.locale) + if (localeResult < TextToSpeech.LANG_AVAILABLE) { + if (localeResult == TextToSpeech.LANG_MISSING_DATA) + throw TtsEngine.Exception.LanguageSupportIncomplete(language) + else + throw TtsEngine.Exception.LanguageNotSupported(language) + } } - } else { - listener.onEngineError(TtsEngine.Exception.InitializationFailed()) - } } - override fun onStart(utteranceId: String?) {} + inner class Listener(val id: String) : UtteranceProgressListener() { + override fun onStart(utteranceId: String?) {} - override fun onStop(utteranceId: String?, interrupted: Boolean) {} + override fun onStop(utteranceId: String?, interrupted: Boolean) { + require(utteranceId == id) + finish() + } - override fun onDone(utteranceId: String?) { - utteranceId ?: return - listener.onDone(utteranceId) - } + override fun onDone(utteranceId: String?) { + require(utteranceId == id) + finish() + } - @Deprecated("Deprecated in the interface", ReplaceWith("onError(utteranceId, -1)")) - override fun onError(utteranceId: String?) { - onError(utteranceId, -1) - } + @Deprecated("Deprecated in the interface", ReplaceWith("onError(utteranceId, -1)")) + override fun onError(utteranceId: String?) { + onError(utteranceId, -1) + } - override fun onError(utteranceId: String?, errorCode: Int) { - utteranceId ?: return - val error = EngineException(errorCode) - listener.onUtteranceError(utteranceId, when (error.error) { - EngineError.Network, EngineError.NetworkTimeout -> TtsEngine.Exception.Network(error) - else -> TtsEngine.Exception.Other(error) - }) - } + override fun onError(utteranceId: String?, errorCode: Int) { + require(utteranceId == id) + + val error = EngineException(errorCode) + finish(when (error.error) { + EngineError.Network, EngineError.NetworkTimeout -> + TtsEngine.Exception.Network(error) + EngineError.NotInstalledYet -> + TtsEngine.Exception.LanguageSupportIncomplete(utterance.language, cause = error) + else -> TtsEngine.Exception.Other(error) + }) + } - override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { - utteranceId ?: return - listener.onSpeakRange(utteranceId, start until end) + override fun onRangeStart(utteranceId: String?, start: Int, end: Int, frame: Int) { + require(utteranceId == id) + onSpeakRange(start until end) + } } } - - private fun updateVoices() { - availableVoices = engine.voices.map { it.toVoice() } - listener.onAvailableVoicesChange(availableVoices) - } } @OptIn(ExperimentalReadiumApi::class) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt index 3794a45b29..2c06227d3c 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt @@ -8,12 +8,7 @@ package org.readium.r2.navigator.tts import android.content.Context import kotlinx.coroutines.* -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.updateAndGet -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.flow.* import org.readium.r2.shared.DelicateReadiumApi import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrLog @@ -29,132 +24,186 @@ import org.readium.r2.shared.util.tokenizer.TextContentTokenizer import org.readium.r2.shared.util.tokenizer.TextUnit import java.util.* -@ExperimentalReadiumApi -fun interface TtsEngineFactory { - fun create(listener: TtsEngine.Listener): E -} - -@ExperimentalReadiumApi -fun interface TtsTokenizerFactory { - fun create(defaultLanguage: Language?): ContentTokenizer -} - +/** + * A text-to-speech director will iterate through the content of a [publication] and synthesize it + * using a [TtsEngine]. + * + * Don't forget to call [close] when you are done with this [TtsDirector]. + */ @OptIn(DelicateReadiumApi::class) @ExperimentalReadiumApi class TtsDirector private constructor( private val publication: Publication, config: Configuration, - engineFactory: TtsEngineFactory, - private val tokenizerFactory: TtsTokenizerFactory, + engineFactory: (listener: TtsEngine.Listener) -> E, + private val tokenizerFactory: (defaultLanguage: Language?) -> ContentTokenizer, var listener: Listener? = null, ) : SuspendingCloseable { - @ExperimentalReadiumApi - sealed class Exception private constructor( - override val message: String, - cause: Throwable? = null - ) : kotlin.Exception(message, cause) { - class Engine(val error: TtsEngine.Exception) - : Exception(error.message, error) - } - - @ExperimentalReadiumApi - data class Configuration( - val defaultLanguage: Language? = null, - val voice: TtsEngine.Voice? = null, - val rate: Double = 1.0, - ) - - @ExperimentalReadiumApi - data class Utterance( - val text: String, - val locator: Locator, - - internal val language: Language?, - internal val id: String, - ) - - @ExperimentalReadiumApi - interface Listener { - /** - * Notifies an [error] occurred while speaking [utterance]. - */ - fun onUtteranceError(utterance: Utterance, error: Exception) + companion object { /** - * Notifies a global [error] occurred. + * Creates a [TtsDirector] using the default native [AndroidTtsEngine]. + * + * @param publication Publication which will be iterated through and synthesized. + * @param config Initial TTS configuration. + * @param tokenizerFactory Factory to create a [ContentTokenizer] which will be used to + * split each [Content] item into smaller chunks. Splits by sentences by default. + * @param listener Optional callbacks listener. */ - fun onError(error: Exception) - } - - companion object { - val defaultTokenizerFactory: TtsTokenizerFactory = TtsTokenizerFactory { language -> TextContentTokenizer(unit = TextUnit.Sentence, defaultLanguage = language) } - operator fun invoke( context: Context, publication: Publication, config: Configuration = Configuration(), - tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory + tokenizerFactory: (defaultLanguage: Language?) -> ContentTokenizer = defaultTokenizerFactory, + listener: Listener? = null, ): TtsDirector? = invoke( publication, config = config, - engineFactory = { listener -> AndroidTtsEngine(context, listener) }, - tokenizerFactory = tokenizerFactory + engineFactory = { AndroidTtsEngine(context, listener = it) }, + tokenizerFactory = tokenizerFactory, + listener = listener ) + /** + * Creates a [TtsDirector] using a custom [TtsEngine]. + * + * @param publication Publication which will be iterated through and synthesized. + * @param config Initial TTS configuration. + * @param engineFactory Factory to create an instance of [TtsEngine]. + * @param tokenizerFactory Factory to create a [ContentTokenizer] which will be used to + * split each [Content] item into smaller chunks. Splits by sentences by default. + * @param listener Optional callbacks listener. + */ operator fun invoke( publication: Publication, config: Configuration = Configuration(), - engineFactory: TtsEngineFactory, - tokenizerFactory: TtsTokenizerFactory = defaultTokenizerFactory + engineFactory: (TtsEngine.Listener) -> E, + tokenizerFactory: (defaultLanguage: Language?) -> ContentTokenizer = defaultTokenizerFactory, + listener: Listener? = null, ): TtsDirector? { if (!canSpeak(publication)) return null - return TtsDirector(publication, config, engineFactory, tokenizerFactory) + return TtsDirector(publication, config, engineFactory, tokenizerFactory, listener) } + /** + * The default content tokenizer will split the [Content] items into individual sentences. + */ + val defaultTokenizerFactory: (Language?) -> ContentTokenizer = { language -> + TextContentTokenizer( + unit = TextUnit.Sentence, + defaultLanguage = language + ) + } + + /** + * Returns whether the [publication] can be played with a [TtsDirector]. + */ fun canSpeak(publication: Publication): Boolean = publication.isContentIterable } + @ExperimentalReadiumApi + interface Listener { + /** Called when an [error] occurs while speaking [utterance]. */ + fun onUtteranceError(utterance: Utterance, error: Exception) + + /** Called when a global [error] occurs. */ + fun onError(error: Exception) + } + + @ExperimentalReadiumApi + sealed class Exception private constructor( + override val message: String, + cause: Throwable? = null + ) : kotlin.Exception(message, cause) { + + /** Underlying [TtsEngine] error. */ + class Engine(val error: TtsEngine.Exception) + : Exception(error.message, error) + } + + /** + * An utterance is an arbitrary text (e.g. sentence) extracted from the [publication], that can + * be synthesized by the TTS [engine]. + * + * @param text Text to be spoken. + * @param locator Locator to the utterance in the [publication]. + * @param language Language of this utterance, if it differs from the default publication + * language. + */ + @ExperimentalReadiumApi + data class Utterance( + val text: String, + val locator: Locator, + val language: Language?, + ) + + /** + * Represents a state of the [TtsDirector]. + */ sealed class State { + /** The [TtsDirector] is completely stopped and must be (re)started from a given locator. */ object Stopped : State() - object Paused : State() - class Playing(val utterance: Utterance, val range: Locator? = null) : State() - class Failure(val error: Exception) : State() + + /** The [TtsDirector] is paused at the given utterance. */ + data class Paused(val utterance: Utterance) : State() + + /** + * The TTS engine is synthesizing [utterance]. + * + * [range] will be regularly updated while the [utterance] is being played. + */ + data class Playing(val utterance: Utterance, val range: Locator? = null) : State() + + /** + * The [TtsDirector] was stopped by a critical [error]. + */ + data class Failure(val error: Exception) : State() } private val _state = MutableStateFlow(State.Stopped) + + /** + * Current state of the [TtsDirector]. + */ val state: StateFlow = _state.asStateFlow() - var publicationIterator: ContentIterator? = null - set(value) { - field?.let { - scope.launch { it.close() } - } - field = value - utterances = CursorList() - } + private val scope = MainScope() - var utterances: CursorList = CursorList() + init { + require(canSpeak(publication)) { + "The content of the publication cannot be synthesized, as it is not iterable" + } + } /** * Underlying [TtsEngine] instance. * * WARNING: Don't control the playback or set the config directly with the engine. Use the * [TtsDirector] APIs instead. This property is used to access engine-specific APIs such as - * [AndroidTtsEngine.requestInstallMissingVoice], + * [AndroidTtsEngine.requestInstallMissingVoice]. */ @DelicateReadiumApi - val engine: E by lazy { engineFactory.create(EngineListener()) } - - private val scope = MainScope() - private val mutex = Mutex() + val engine: E by lazy { + engineFactory(object : TtsEngine.Listener { + override fun onEngineError(error: TtsEngine.Exception) { + replacePlaybackJob { + listener?.onError(Exception.Engine(error)) + _state.value = State.Failure(Exception.Engine(error)) + } + } - init { - require(canSpeak(publication)) { "The publication cannot be spoken with TtsController, as its content is not iterable" } + override fun onAvailableVoicesChange(voices: List) { + _availableVoices.value = voices + } + }) } + /** + * Interrupts the [TtsEngine] and closes this [TtsDirector]. + */ override suspend fun close() { tryOrLog { scope.cancel() @@ -164,25 +213,65 @@ class TtsDirector private constructor( } } + /** + * User configuration for the text-to-speech engine. + * + * @param defaultLanguage Language overriding the publication one. + * @param voice Voice used to speak the utterances. + * @param rate Speech rate (speed) of the voice. Normal is 1.0. See [rateRange] for the + * range of values supported by the [TtsEngine]. + */ + @ExperimentalReadiumApi + data class Configuration( + val defaultLanguage: Language? = null, + val voice: TtsEngine.Voice? = null, + val rate: Double = 1.0, + // FIXME: val extras: JsonObject + ) + private val _config = MutableStateFlow(config) + + /** + * Current user configuration. + */ val config: StateFlow = _config.asStateFlow() - fun setConfig(config: Configuration): Configuration = - _config.updateAndGet { - config.copy( - rate = config.rate.coerceIn(engine.rateRange), - ) - } + /** + * Updates the user configuration. + * + * The change is not immediate, it will be applied for the next utterance. + */ + fun setConfig(config: Configuration) { + _config.value = config.copy( + rate = config.rate.coerceIn(engine.rateRange), + ) + } + /** + * Range for the speech rate. Normal is 1.0. + */ val rateRange: ClosedRange get() = engine.rateRange private val _availableVoices = MutableStateFlow>(emptyList()) + + /** + * List of synthesizer voices supported by the TTS [engine]. + */ val availableVoices: StateFlow> = _availableVoices.asStateFlow() + /** + * Returns the first voice with the given [id] supported by the TTS [engine]. + * + * This can be used to restore the user selected voice after storing it in the shared + * preferences. + */ fun voiceWithId(id: String): TtsEngine.Voice? = engine.voiceWithId(id) + /** + * (Re)starts the TTS from the given locator or the beginning of the publication. + */ fun start(fromLocator: Locator? = null) { replacePlaybackJob { publicationIterator = publication.contentIterator(fromLocator) @@ -190,33 +279,49 @@ class TtsDirector private constructor( } } + /** + * Stops the synthesizer. + * + * Use [start] to restart it. + */ fun stop() { replacePlaybackJob { _state.value = State.Stopped publicationIterator = null - engine.cancel() } } + /** + * Interrupts a played utterance. + * + * Use [resume] to restart the playback from the same utterance. + */ fun pause() { replacePlaybackJob { - if (state.value is State.Playing) { - _state.value = State.Paused - engine.cancel() + _state.update { state -> + when (state) { + is State.Playing -> State.Paused(state.utterance) + else -> state + } } } } + /** + * Resumes an utterance interrupted with [pause]. + */ fun resume() { replacePlaybackJob { - if (state.value is State.Paused) { - utterances.current() - ?.let(::play) + (state.value as? State.Paused)?.let { paused -> + play(paused.utterance) } } } - fun resumeOrPause() { + /** + * Pauses or resumes the playback of the current utterance. + */ + fun pauseOrResume() { when (state.value) { is State.Failure, State.Stopped -> return is State.Playing -> pause() @@ -224,101 +329,167 @@ class TtsDirector private constructor( } } + /** + * Skips to the previous utterance. + */ fun previous() { replacePlaybackJob { playNextUtterance(Direction.Backward) } } + /** + * Skips to the next utterance. + */ fun next() { replacePlaybackJob { playNextUtterance(Direction.Forward) } } - private enum class Direction { - Forward, Backward; - } + /** + * [ContentIterator] used to iterate through the [publication]. + */ + private var publicationIterator: ContentIterator? = null + set(value) { + field?.let { + scope.launch { it.close() } + } + field = value + utterances = CursorList() + } + /** + * Utterances for the current publication [Content] item. + */ + private var utterances: CursorList = CursorList() + + /** + * Plays the next utterance in the given [direction]. + */ private suspend fun playNextUtterance(direction: Direction) { val utterance = nextUtterance(direction) - if (utterance != null) { - play(utterance) - } else { + if (utterance == null) { _state.value = State.Stopped + return } + play(utterance) } - private fun play(utterance: Utterance) { + /** + * Plays the given [utterance] with the TTS [engine]. + */ + private suspend fun play(utterance: Utterance) { _state.value = State.Playing(utterance) - engine.speak(TtsEngine.Utterance( - id = utterance.id, - text = utterance.text, - rate = config.value.rate, - voiceOrLanguage = utterance.voiceOrLanguage() - )) + engine + .speak( + utterance = TtsEngine.Utterance( + text = utterance.text, + rate = config.value.rate, + voiceOrLanguage = utterance.voiceOrLanguage() + ), + onSpeakRange = { range -> + _state.value = State.Playing( + utterance = utterance, + range = utterance.locator.copy( + text = utterance.locator.text.substring(range) + ) + ) + } + ) + .onSuccess { + playNextUtterance(Direction.Forward) + } + .onFailure { + _state.value = State.Paused(utterance) + listener?.onUtteranceError(utterance, Exception.Engine(it)) + } } + /** + * Returns the user selected voice if it's compatible with the utterance language. Otherwise, + * falls back on the languages. + */ private fun Utterance.voiceOrLanguage(): Either { // User selected voice, if it's compatible with the utterance language. - config.value.voice + // Or fallback on the languages. + val voice = config.value.voice ?.takeIf { language == null || it.language.removeRegion() == language.removeRegion() } - ?.let { return Either.Left(it) } - // Or fallback on the languages. - return Either.Right( - language - ?.takeIf { it != publication.metadata.language } + return ( + if (voice != null) Either.Left(voice) + else Either.Right(language ?: config.value.defaultLanguage ?: publication.metadata.language ?: Language(Locale.getDefault()) + ) ) } - private suspend fun nextUtterance(direction: Direction): Utterance? = - utterances.nextIn(direction) - ?: ( - if (loadUtterances(direction)) nextUtterance(direction) - else null - ) + /** + * Gets the next utterance in the given [direction], or null when reaching the beginning or the + * end. + */ + private suspend fun nextUtterance(direction: Direction): Utterance? { + val utterance = utterances.nextIn(direction) + if (utterance == null && loadNextUtterances(direction)) { + return nextUtterance(direction) + } + return utterance + } + /** + * Loads the utterances for the next publication [Content] item in the given [direction]. + */ + private suspend fun loadNextUtterances(direction: Direction): Boolean { + val content = publicationIterator?.nextIn(direction) + ?: return false - private suspend fun loadUtterances(direction: Direction): Boolean { - val utterancesList = publicationIterator - ?.nextIn(direction) - ?.tokenize() - ?.flatMap { it.utterances() } - ?.let { CursorList(it) } - ?: CursorList() + val nextUtterances = content + .tokenize() + .flatMap { it.utterances() } - utterances = cursorList(utterancesList, direction) - return utterances.isNotEmpty() - } + if (nextUtterances.isEmpty()) { + return loadNextUtterances(direction) + } - private fun cursorList(list: List, direction: Direction): CursorList = - CursorList( - list = list, + utterances = CursorList( + list = nextUtterances, startIndex = when (direction) { Direction.Forward -> 0 - Direction.Backward -> list.size - 1 + Direction.Backward -> nextUtterances.size - 1 } ) + return true + } + + /** + * Splits a publication [Content] item into smaller chunks using the provided tokenizer. + * + * This is used to split a paragraph into sentences, for example. + */ private fun Content.tokenize(): List = - tokenizerFactory.create(config.value.defaultLanguage) + tokenizerFactory(config.value.defaultLanguage ?: publication.metadata.language) .tokenize(this) + /** + * Splits a publication [Content] item into the utterances to be spoken. + */ private fun Content.utterances(): List { fun utterance(text: String, locator: Locator, language: Language? = null): Utterance? { if (!text.any { it.isLetterOrDigit() }) return null return Utterance( - id = UUID.randomUUID().toString(), text = text, locator = locator, language = language + // If the language is the same as the one declared globally in the publication, + // we omit it. This way, the app can customize the default language used in the + // configuration. + ?.takeIf { it != publication.metadata.language } ) } @@ -345,56 +516,25 @@ class TtsDirector private constructor( } } - private var playbackJob: Job? = null - /** * Cancels the previous playback-related job and starts a new one with the given suspending * [block]. + * + * This is used to interrupt on-going commands. */ private fun replacePlaybackJob(block: suspend CoroutineScope.() -> Unit) { scope.launch { playbackJob?.cancelAndJoin() playbackJob = launch { - mutex.withLock { - block() - } + block() } } } - private inner class EngineListener : TtsEngine.Listener { - - override fun onSpeakRange(utteranceId: String, range: IntRange) { - val utterance = utterances.current()?.takeIf { it.id == utteranceId } ?: return - _state.value = State.Playing( - utterance = utterance, - range = utterance.locator.copy( - text = utterance.locator.text.substring(range) - ) - ) - } - - override fun onDone(utteranceId: String) { - if (state.value is State.Playing) { - next() - } - } - - override fun onEngineError(error: TtsEngine.Exception) { - listener?.onError(Exception.Engine(error)) - _state.value = State.Failure(Exception.Engine(error)) - } - - override fun onUtteranceError(utteranceId: String, error: TtsEngine.Exception) { - val utterance = utterances.current()?.takeIf { it.id == utteranceId } ?: return - - listener?.onUtteranceError(utterance, Exception.Engine(error)) - _state.value = State.Paused - } + private var playbackJob: Job? = null - override fun onAvailableVoicesChange(voices: List) { - _availableVoices.value = voices - } + private enum class Direction { + Forward, Backward; } private fun CursorList.nextIn(direction: Direction): E? = diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index a446e806f3..cae5a63808 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -10,6 +10,10 @@ import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.util.Either import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.SuspendingCloseable +import org.readium.r2.shared.util.Try + +@ExperimentalReadiumApi +typealias TtsTry = Try /** * A text-to-speech engine synthesizes text utterances (e.g. sentence). @@ -57,28 +61,11 @@ interface TtsEngine : SuspendingCloseable { */ @ExperimentalReadiumApi interface Listener { - /** - * Called when the engine speaks a portion of an utterance (e.g. a word). - */ - fun onSpeakRange(utteranceId: String, range: IntRange) - - /** - * Called when an utterance was successfully synthesized. - * - * This won't be called if the utterance was cancelled or an error occured. - */ - fun onDone(utteranceId: String) - /** * Called when a general engine error occurred. */ fun onEngineError(error: Exception) - /** - * Called when an error occurred while synthesizing an utterance. - */ - fun onUtteranceError(utteranceId: String, error: Exception) - /** * Called when the list of available voices is updated. */ @@ -88,7 +75,6 @@ interface TtsEngine : SuspendingCloseable { /** * An utterance is an arbitrary text (e.g. sentence) that can be synthesized by the TTS engine. * - * @param id Unique identifier for this utterance, in the context of the caller. * @param text Text to be spoken. * @param rate Speed of the voice. * @param voiceOrLanguage Either an explicit voice or the language of the text. If a language @@ -96,11 +82,16 @@ interface TtsEngine : SuspendingCloseable { */ @ExperimentalReadiumApi data class Utterance( - val id: String, val text: String, val rate: Double, val voiceOrLanguage: Either - ) + ) { + val language: Language = + when (val vl = voiceOrLanguage) { + is Either.Left -> vl.left.language + is Either.Right -> vl.right + } + } /** * Represents a voice provided by the TTS engine which can speak an utterance. @@ -126,16 +117,28 @@ interface TtsEngine : SuspendingCloseable { } /** - * Requests to speak the given utterance. + * Synthesizes the given [utterance] and returns its status. + * + * [onSpeakRange] is called repeatedly while the engine plays portions (e.g. words) of the + * utterance. + * + * To interrupt the utterance, cancel the parent coroutine job. */ - fun speak(utterance: Utterance) + suspend fun speak( + utterance: Utterance, + onSpeakRange: (IntRange) -> Unit = { _ -> } + ): TtsTry /** - * Cancels the currently spoken utterance. + * Supported range for the speech rate. */ - fun cancel() - val rateRange: ClosedRange + + /** + * List of available synthesizer voices. + * + * Implement [Listener.onAvailableVoicesChange] to be aware of changes in the available voices. + */ val availableVoices: List /** diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt index 084a43ba4e..12ad2561f1 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt @@ -11,12 +11,17 @@ import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.services.content.Content import org.readium.r2.shared.publication.services.content.Content.Data import org.readium.r2.shared.util.Language -import java.util.* /** A tokenizer splitting a [Content] into smaller pieces. */ @ExperimentalReadiumApi fun interface ContentTokenizer : Tokenizer +/** A passthrough tokenizer which does not modify its input. */ +@ExperimentalReadiumApi +object IdentityContentTokenizer : ContentTokenizer { + override fun tokenize(data: Content): List = listOf(data) +} + /** * A [ContentTokenizer] using a [TextTokenizer] to split the text of the [Content]. */ diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index e98f78e6e4..6725356336 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -257,9 +257,7 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.tts -> { - checkNotNull(model.tts).toggleStart(navigator) - } + R.id.tts -> checkNotNull(model.tts).start(navigator) else -> return super.onOptionsItemSelected(item) } return true diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index 8c3de2cd06..18a37263f0 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -41,7 +41,7 @@ fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { availableVoices = settings.availableVoices, config = settings.config, onConfigChange = model::setConfig, - onPlayPause = model::resumeOrPause, + onPlayPause = model::pauseOrResume, onStop = model::stop, onPrevious = model::previous, onNext = model::next, diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 7a62de6a74..978acdca28 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -28,7 +28,7 @@ import org.readium.r2.testapp.R import org.readium.r2.navigator.tts.TtsDirector.State as TtsState /** - * View model holding the text to speech director. + * View model controlling the text-to-speech director. */ @OptIn(ExperimentalReadiumApi::class) class TtsViewModel private constructor( @@ -105,17 +105,20 @@ class TtsViewModel private constructor( private val isStarted = MutableStateFlow(false) init { - director.listener = ControllerListener() + director.listener = DirectorListener() + // Supported voices grouped by their language. val voicesByLanguage: Flow>> = director.availableVoices .map { voices -> voices.groupBy { it.language } } + // All supported languages. val languages: Flow> = voicesByLanguage .map { voices -> voices.keys.sortedBy { it.locale.displayName } } + // Supported voices for the language selected in the [TtsDirector.Configuration]. val voicesForSelectedLanguage: Flow> = combine( director.config.map { it.defaultLanguage }, @@ -127,6 +130,7 @@ class TtsViewModel private constructor( ?: emptyList() } + // Settings model for the current configuration. val settings: Flow = combine( director.config, languages, @@ -140,18 +144,20 @@ class TtsViewModel private constructor( ) } + // Current view model state. state = combine( isStarted, director.state, settings ) { isStarted, state, currentSettings -> val playing = (state as? TtsState.Playing) + val paused = (state as? TtsState.Paused) State( showControls = isStarted, isPlaying = (playing != null), playingWordRange = playing?.range, - playingUtterance = playing?.utterance?.locator, + playingUtterance = (playing?.utterance ?: paused?.utterance)?.locator, settings = currentSettings ) }.stateIn(scope, SharingStarted.Eagerly, initialValue = State()) @@ -163,29 +169,26 @@ class TtsViewModel private constructor( } } - fun toggleStart(navigator: Navigator) { - if (state.value.showControls) { - stop() - } else { - start(navigator) - } - } - /** - * Begins the TTS playback in the given [navigator]. + * Starts the TTS using the first visible locator in the given [navigator]. */ - fun start(navigator: Navigator) = scope.launch { - director.start(fromLocator = navigator.firstVisibleElementLocator()) + fun start(navigator: Navigator) { + if (isStarted.value) return isStarted.value = true + + scope.launch { + director.start(fromLocator = navigator.firstVisibleElementLocator()) + } } fun stop() { - director.stop() + if (!isStarted.value) return isStarted.value = false + director.stop() } - fun resumeOrPause() { - director.resumeOrPause() + fun pauseOrResume() { + director.pauseOrResume() } fun pause() { @@ -204,24 +207,28 @@ class TtsViewModel private constructor( director.setConfig(config) } + /** + * Starts the activity to install additional voice data. + */ @OptIn(DelicateReadiumApi::class) fun requestInstallVoice(context: Context) { director.engine.requestInstallMissingVoice(context) } - private inner class ControllerListener : TtsDirector.Listener { + private inner class DirectorListener : TtsDirector.Listener { override fun onUtteranceError( utterance: TtsDirector.Utterance, error: TtsDirector.Exception ) { scope.launch { - val shouldContinuePlayback = handleTtsException(error) - + // The [TtsDirector] is paused when encountering an error while playing an + // utterance. Here we will skip to the next utterance unless the exception is + // recoverable. + val shouldContinuePlayback = !handleTtsException(error) if (shouldContinuePlayback) { next() } } - } override fun onError(error: TtsDirector.Exception) { @@ -231,7 +238,7 @@ class TtsViewModel private constructor( } /** - * Handles the given error and returns whether the playback should continue. + * Handles the given error and returns whether it was recovered from. */ private suspend fun handleTtsException(error: TtsDirector.Exception): Boolean = when (error) { @@ -240,12 +247,12 @@ class TtsViewModel private constructor( // it by asking the user to download the missing voice data. is TtsEngine.Exception.LanguageSupportIncomplete -> { _events.send(Event.OnMissingVoiceData(err.language)) - false + true } else -> { _events.send(Event.OnError(err.toUserException())) - true + false } } } From ef39264a5715603cd18bc36163592077eb6ae898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 6 Jul 2022 11:24:06 +0200 Subject: [PATCH 42/59] Doc comments and renames --- .../readium/r2/navigator/tts/TtsDirector.kt | 33 ++-- .../r2/shared/publication/Publication.kt | 2 +- .../publication/services/content/Content.kt | 163 ++++++++++++++++++ .../content/ContentIterationService.kt | 28 +++ .../services/content/ContentIterator.kt | 55 ------ .../services/content}/ContentTokenizer.kt | 32 ++-- .../content/PublicationContentIterator.kt | 116 ------------- .../content/iterators/ContentIterator.kt | 28 +++ .../HtmlResourceContentIterator.kt | 105 +++++++---- .../iterators/PublicationContentIterator.kt | 141 +++++++++++++++ .../r2/streamer/parser/epub/EpubParser.kt | 5 +- 11 files changed, 467 insertions(+), 241 deletions(-) create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt delete mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt rename readium/shared/src/main/java/org/readium/r2/shared/{util/tokenizer => publication/services/content}/ContentTokenizer.kt (60%) delete mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/PublicationContentIterator.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/ContentIterator.kt rename readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/{ => iterators}/HtmlResourceContentIterator.kt (74%) create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt index 2c06227d3c..bdb3080557 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt @@ -15,12 +15,12 @@ import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.services.content.Content -import org.readium.r2.shared.publication.services.content.ContentIterator import org.readium.r2.shared.publication.services.content.contentIterator import org.readium.r2.shared.publication.services.content.isContentIterable import org.readium.r2.shared.util.* -import org.readium.r2.shared.util.tokenizer.ContentTokenizer -import org.readium.r2.shared.util.tokenizer.TextContentTokenizer +import org.readium.r2.shared.publication.services.content.ContentTokenizer +import org.readium.r2.shared.publication.services.content.TextContentTokenizer +import org.readium.r2.shared.publication.services.content.iterators.ContentIterator import org.readium.r2.shared.util.tokenizer.TextUnit import java.util.* @@ -220,13 +220,14 @@ class TtsDirector private constructor( * @param voice Voice used to speak the utterances. * @param rate Speech rate (speed) of the voice. Normal is 1.0. See [rateRange] for the * range of values supported by the [TtsEngine]. + * @param extras Extensibility for custom TTS engines. */ @ExperimentalReadiumApi data class Configuration( val defaultLanguage: Language? = null, val voice: TtsEngine.Voice? = null, val rate: Double = 1.0, - // FIXME: val extras: JsonObject + val extras: Any? = null ) private val _config = MutableStateFlow(config) @@ -494,24 +495,24 @@ class TtsDirector private constructor( } return when (val data = data) { - is Content.Data.Image -> { + is Content.Text -> { + data.segments.mapNotNull { segment -> + utterance( + text = segment.text, + locator = segment.locator, + language = segment.language + ) + } + } + + is Content.TextualData -> { listOfNotNull( - data.description + data.text ?.takeIf { it.isNotBlank() } ?.let { utterance(text = it, locator = locator) } ) } - is Content.Data.Text -> { - data.spans.mapNotNull { span -> - utterance( - text = span.text, - locator = span.locator, - language = span.language - ) - } - } - else -> emptyList() } } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt index f4aef1b9fe..86a2e2fed6 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt @@ -354,7 +354,7 @@ class Publication( */ class ServicesBuilder private constructor(private val serviceFactories: MutableMap) { - @OptIn(Search::class) + @OptIn(Search::class, ExperimentalReadiumApi::class) @Suppress("UNCHECKED_CAST") constructor( cache: ServiceFactory? = null, diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt new file mode 100644 index 0000000000..fdc734a3f2 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt @@ -0,0 +1,163 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.publication.services.content + +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.publication.Link +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.util.Language +import java.net.URL + +/** + * Represents a single semantic content element part of a publication. + * + * @param locator Locator targeting this element in the Publication. + * @param data Data associated with this element. + * @param extras Additional metadata for extensions. + */ +@ExperimentalReadiumApi +data class Content( + val locator: Locator, + val data: Data, + val extras: Map = emptyMap() +) { + /** A marker interface for a [Content] associated data. */ + interface Data + + /** A piece of data which can be represented as human-readable text. */ + interface TextualData : Data { + /** Human-readable text representation for this data. */ + val text: String? + } + + /** A piece of data referencing an embedded external resource. */ + interface EmbeddedData : Data { + val link: Link + } + + /** An audio clip. */ + data class Audio( + override val link: Link + ) : EmbeddedData + + /** + * A bitmap image. + * + * @param caption Short piece of text associated with the image. + * @param description Accessibility label. + */ + data class Image( + override val link: Link, + val caption: String?, + val description: String? + ) : EmbeddedData, TextualData { + override val text: String? + get() = caption?.takeIf { it.isNotBlank() } + ?: description + } + + /** + * A text element. + * + * @param role Purpose of this element in the broader context of the document. + * @param segments Ranged portions of text with associated attributes. + */ + data class Text( + val role: Role, + val segments: List + ) : TextualData { + + override val text: String + get() = segments.joinToString { it.text } + + /** + * Represents a purpose of an element in the broader context of the document. + */ + interface Role { + /** + * Title of a section. + * + * @param level Heading importance, 1 being the highest. + */ + data class Heading(val level: Int) : Role + + /** + * Normal body of content. + */ + object Body : Role + + /** + * A footnote at the bottom of a document. + */ + object Footnote : Role + + /** + * A quotation. + * + * @param referenceUrl URL to the source for this quote. + * @param referenceTitle Name of the source for this quote. + */ + data class Quote( + val referenceUrl: URL?, + val referenceTitle: String? + ) : Role + } + + /** + * Ranged portion of text with associated attributes. + * + * @param locator Locator to the segment of text. + * @param text Text in the segment. + * @param attributes Attributes associated with this segment, e.g. language. + */ + data class Segment( + val locator: Locator, + val text: String, + val attributes: List>, + ) { + /** + * Language of the text, if any. + */ + val language: Language? + get() = attribute(AttributeKey.LANGUAGE) + + /** + * An attribute is an arbitrary key-value pair. + */ + data class Attribute( + val key: AttributeKey, + val value: V + ) + + /** + * An attribute key identifies uniquely an attribute. + * + * The [V] phantom type is there to perform static type checking when requesting an + * attribute. + */ + data class AttributeKey(val id: String) { + companion object { + val LANGUAGE = AttributeKey("language") + val LINK = AttributeKey("link") + } + } + + /** + * Gets the first attribute with the given [key]. + */ + @Suppress("UNCHECKED_CAST") + fun attribute(key: AttributeKey): V? = + attributes.firstOrNull { it.key == key }?.value as V + + @Suppress("UNCHECKED_CAST") + fun attributes(key: AttributeKey): List = + attributes + .filter { it.key == key } + .map { it.value as V } + } + } +} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt index 4eabbd3d29..b802afff92 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt @@ -6,29 +6,57 @@ package org.readium.r2.shared.publication.services.content +import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.ServiceFactory +import org.readium.r2.shared.publication.services.content.iterators.ContentIterator +import org.readium.r2.shared.publication.services.content.iterators.PublicationContentIterator +import org.readium.r2.shared.publication.services.content.iterators.ResourceContentIteratorFactory import org.readium.r2.shared.util.Ref +/** + * Provides [ContentIterator] instances to crawl the content of a [Publication]. + */ +@ExperimentalReadiumApi interface ContentIterationService : Publication.Service { + /** + * Creates a [ContentIterator] starting from the given [start] location. + * + * Returns null if no iterator can be created, for example because no resources are iterable. + */ suspend fun iterator(start: Locator?): ContentIterator? } +/** + * Returns whether this [Publication] can be iterated on. + */ +@ExperimentalReadiumApi val Publication.isContentIterable: Boolean get() = contentIterationService != null +/** + * Creates a [ContentIterator] starting from the given location. + */ +@ExperimentalReadiumApi suspend fun Publication.contentIterator(start: Locator?): ContentIterator? = contentIterationService?.iterator(start) +@ExperimentalReadiumApi private val Publication.contentIterationService: ContentIterationService? get() = findService(ContentIterationService::class) /** Factory to build a [ContentIterationService] */ +@ExperimentalReadiumApi var Publication.ServicesBuilder.contentIterationServiceFactory: ServiceFactory? get() = get(ContentIterationService::class) set(value) = set(ContentIterationService::class, value) +/** + * This [ContentIterationService] takes a list of [ResourceContentIteratorFactory] and returns + * instances of [PublicationContentIterator]. + */ +@ExperimentalReadiumApi class DefaultContentIterationService( private val publication: Ref, private val resourceContentIteratorFactories: List diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt deleted file mode 100644 index 4bf6a6fc18..0000000000 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterator.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.shared.publication.services.content - -import org.readium.r2.shared.publication.Link -import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.util.Language -import org.readium.r2.shared.util.SuspendingCloseable -import java.util.* - -data class Content( - val locator: Locator, - val data: Data, - val extras: Map = emptyMap() -) { - interface Data { - data class Audio( - val link: Link - ) : Data - - data class Image( - val link: Link, - val description: String? - ) : Data - - data class Text( - val role: Role, - val spans: List - ) : Data { - interface Role { - data class Heading(val level: Int) : Role - object Body : Role - object Caption : Role - object Footnote : Role - object Quote : Role - } - - data class Span( - val locator: Locator, - val language: Language?, - val text: String, - val extras: Map = emptyMap() - ) - } - } -} - -interface ContentIterator : SuspendingCloseable { - suspend fun previous(): Content? - suspend fun next(): Content? -} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt similarity index 60% rename from readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt rename to readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt index 12ad2561f1..ea07a3a8cc 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/ContentTokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt @@ -4,13 +4,15 @@ * available in the top-level LICENSE file of the project. */ -package org.readium.r2.shared.util.tokenizer +package org.readium.r2.shared.publication.services.content import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.services.content.Content -import org.readium.r2.shared.publication.services.content.Content.Data import org.readium.r2.shared.util.Language +import org.readium.r2.shared.util.tokenizer.DefaultTextContentTokenizer +import org.readium.r2.shared.util.tokenizer.TextTokenizer +import org.readium.r2.shared.util.tokenizer.TextUnit +import org.readium.r2.shared.util.tokenizer.Tokenizer /** A tokenizer splitting a [Content] into smaller pieces. */ @ExperimentalReadiumApi @@ -23,11 +25,15 @@ object IdentityContentTokenizer : ContentTokenizer { } /** - * A [ContentTokenizer] using a [TextTokenizer] to split the text of the [Content]. + * A [ContentTokenizer] using a [TextTokenizer] to split the text of the [Content] into smaller + * portions. + * + * @param contextSnippetLength Length of `before` and `after` snippets in the produced [Locator]s. */ @ExperimentalReadiumApi class TextContentTokenizer( private val defaultLanguage: Language?, + private val contextSnippetLength: Int = 50, private val textTokenizerFactory: (Language?) -> TextTokenizer ) : ContentTokenizer { @@ -40,10 +46,10 @@ class TextContentTokenizer( ) override fun tokenize(data: Content): List = listOf( - if (data.data is Data.Text) { + if (data.data is Content.Text) { data.copy( data = data.data.copy( - spans = data.data.spans.flatMap { tokenize(it) } + segments = data.data.segments.flatMap { tokenize(it) } ) ) } else { @@ -51,18 +57,18 @@ class TextContentTokenizer( } ) - private fun tokenize(span: Data.Text.Span): List = - textTokenizerFactory(span.language ?: defaultLanguage).tokenize(span.text) + private fun tokenize(segment: Content.Text.Segment): List = + textTokenizerFactory(segment.language ?: defaultLanguage).tokenize(segment.text) .map { range -> - span.copy( - locator = span.locator.copy(text = extractTextContextIn(span.text, range)), - text = span.text.substring(range) + segment.copy( + locator = segment.locator.copy(text = extractTextContextIn(segment.text, range)), + text = segment.text.substring(range) ) } private fun extractTextContextIn(string: String, range: IntRange): Locator.Text { - val after = string.substring(range.last, (range.last + 50).coerceAtMost(string.length)) - val before = string.substring((range.first - 50).coerceAtLeast(0), range.first) + val after = string.substring(range.last, (range.last + contextSnippetLength).coerceAtMost(string.length)) + val before = string.substring((range.first - contextSnippetLength).coerceAtLeast(0), range.first) return Locator.Text( after = after.takeIf { it.isNotEmpty() }, before = before.takeIf { it.isNotEmpty() }, diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/PublicationContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/PublicationContentIterator.kt deleted file mode 100644 index fa74ba7c1a..0000000000 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/PublicationContentIterator.kt +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.shared.publication.services.content - -import org.readium.r2.shared.fetcher.Resource -import org.readium.r2.shared.publication.Link -import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.publication.indexOfFirstWithHref -import org.readium.r2.shared.util.Try - -/** - * Creates a [ContentIterator] instance for the given [resource]. - * - * Return null if the resource format is not supported. - */ -typealias ResourceContentIteratorFactory = suspend (resource: Resource, locator: Locator) -> ContentIterator? - -class PublicationContentIterator( - private val publication: Publication, - private var startLocator: Locator?, - private val resourceContentIteratorFactories: List -) : ContentIterator { - - private var startIndex: Int? = - startLocator?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } - ?: 0 - - private var currentIndex: Int = 0 - private var currentIterator: ContentIterator? = null - - override suspend fun close() { - currentIterator?.close() - currentIterator = null - } - - override suspend fun previous(): Content? { - val iterator = iteratorBy(-1) ?: return null - - val content = iterator.previous() - if (content == null) { - currentIterator = null - return previous() - } - return content - } - - override suspend fun next(): Content? { - val iterator = iteratorBy(1) ?: return null - - val content = iterator.next() - if (content == null) { - currentIterator = null - return next() - } - return content - } - - private suspend fun iteratorBy(delta: Int): ContentIterator? { - currentIterator?.let { return it } - - // For the first requested iterator, we don't want to move by the given delta. - var newDelta = delta - startIndex?.let { - currentIndex = it - startIndex = null - newDelta = 0 - } - - val nextIterator = loadIteratorBy(newDelta, fromIndex = currentIndex) - ?: return null - - currentIndex = nextIterator.index - currentIterator = nextIterator.iterator - return currentIterator - } - - private data class IndexedIterator( - val index: Int, - val iterator: ContentIterator - ) - - private suspend fun loadIteratorBy(delta: Int, fromIndex: Int): IndexedIterator? { - val index = fromIndex + delta - val link = publication.readingOrder.getOrNull(index) ?: return null - var locator = publication.locatorFromLink(link) ?: return null - - val start = startLocator - startLocator = null - if (start != null) { - locator = locator.copy( - locations = start.locations, - text = start.text - ) - } else if (delta < 0) { - locator = locator.copyWithLocations(progression = 1.0) - } - - val iterator = loadIteratorAt(link, locator) - ?: return loadIteratorBy(delta, fromIndex = index) - - return IndexedIterator(index, iterator) - } - - private suspend fun loadIteratorAt(link: Link, locator: Locator): ContentIterator? { - val resource = publication.get(link) - return resourceContentIteratorFactories - .firstNotNullOfOrNull { factory -> - factory(resource, locator) - } - } -} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/ContentIterator.kt new file mode 100644 index 0000000000..a42bcf6870 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/ContentIterator.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.publication.services.content.iterators + +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.publication.services.content.Content +import org.readium.r2.shared.util.SuspendingCloseable + +/** + * Iterates through a list of [Content] items asynchronously. + */ +@ExperimentalReadiumApi +interface ContentIterator : SuspendingCloseable { + + /** + * Goes back to the previous item and returns it, or null if we reached the beginning. + */ + suspend fun previous(): Content? + + /** + * Advances to the next item and returns it, or null if we reached the end. + */ + suspend fun next(): Content? +} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt similarity index 74% rename from readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt rename to readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt index 58f8f89ecc..dd2e1464ba 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/HtmlResourceContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt @@ -4,7 +4,7 @@ * available in the top-level LICENSE file of the project. */ -package org.readium.r2.shared.publication.services.content +package org.readium.r2.shared.publication.services.content.iterators import org.jsoup.Jsoup import org.jsoup.internal.StringUtil @@ -14,20 +14,39 @@ import org.jsoup.nodes.TextNode import org.jsoup.parser.Parser import org.jsoup.select.NodeTraversor import org.jsoup.select.NodeVisitor +import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrNull import org.readium.r2.shared.fetcher.Resource import org.readium.r2.shared.publication.Link import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.html.cssSelector -import org.readium.r2.shared.publication.services.content.Content.Data +import org.readium.r2.shared.publication.services.content.Content +import org.readium.r2.shared.publication.services.content.Content.Text import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.mediatype.MediaType import org.readium.r2.shared.util.use -class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) : ContentIterator { +// FIXME: Support custom skipped elements + +/** + * Iterates an HTML [resource], starting from the given [locator]. + * + * If you want to start mid-resource, the [locator] must contain a `cssSelector` key in its + * [Locator.Locations] object. + * + * If you want to start from the end of the resource, the [locator] must have a `progression` of 1.0. + */ +@ExperimentalReadiumApi +class HtmlResourceContentIterator( + private val resource: Resource, + private val locator: Locator +) : ContentIterator { + companion object { - // FIXME: Custom skipped elements + /** + * Creates a new factory for [HtmlResourceContentIterator]. + */ fun createFactory(): ResourceContentIteratorFactory = { res, locator -> if (res.link().mediaType.matchesAny(MediaType.HTML, MediaType.XHTML)) HtmlResourceContentIterator(res, locator) @@ -75,7 +94,16 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) return contentParser.result() } - data class ParsedElements(val elements: List, val startIndex: Int) + /** + * Holds the result of parsing the HTML resource into a list of [Content]. + * + * The [startIndex] will be calculated from the element matched by the base [locator], if + * possible. Defaults to 0. + */ + data class ParsedElements( + val elements: List, + val startIndex: Int, + ) private class ContentParser( private val baseLocator: Locator, @@ -92,7 +120,7 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) private var startIndex = 0 private var currentElement: Element? = null - private val spansAcc = mutableListOf() + private val segmentsAcc = mutableListOf() private var textAcc = StringBuilder() private var wholeRawTextAcc: String = "" private var elementRawTextAcc: String = "" @@ -135,8 +163,9 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) } ) ), - data = Data.Image( + data = Content.Image( link = Link(href = href), + caption = null, // FIXME: Get the caption from figcaption description = node.attr("alt").takeIf { it.isNotBlank() }, ) ) @@ -144,7 +173,7 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) } } node.isBlock -> { - spansAcc.clear() + segmentsAcc.clear() textAcc.clear() rawTextAcc = "" currentCssSelector = node.cssSelector() @@ -161,7 +190,7 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) if (node is TextNode) { val language = node.language if (currentLanguage != language) { - flushSpan() + flushSegment() currentLanguage = language } @@ -184,8 +213,8 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) textAcc.lastOrNull() == ' ' private fun flushText() { - flushSpan() - if (spansAcc.isEmpty()) return + flushSegment() + if (segmentsAcc.isEmpty()) return if (startElement != null && currentElement == startElement) { startIndex = elements.size @@ -201,21 +230,21 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) ), text = Locator.Text(highlight = elementRawTextAcc) ), - data = Data.Text( - role = Data.Text.Role.Body, - spans = spansAcc.toList() + data = Text( + role = Text.Role.Body, + segments = segmentsAcc.toList() ) )) elementRawTextAcc = "" - spansAcc.clear() + segmentsAcc.clear() } - private fun flushSpan() { + private fun flushSegment() { var text = textAcc.toString() val trimmedText = text.trim() if (text.isNotBlank()) { - if (spansAcc.isEmpty()) { + if (segmentsAcc.isEmpty()) { text = text.trimStart() val whitespaceSuffix = text.lastOrNull() @@ -225,23 +254,29 @@ class HtmlResourceContentIterator(val resource: Resource, val locator: Locator) text = trimmedText + whitespaceSuffix } - spansAcc.add(Data.Text.Span( - locator = baseLocator.copy( - locations = Locator.Locations( - otherLocations = buildMap { - currentCssSelector?.let { - put("cssSelector", it as Any) + segmentsAcc.add( + Text.Segment( + locator = baseLocator.copy( + locations = Locator.Locations( + otherLocations = buildMap { + currentCssSelector?.let { + put("cssSelector", it as Any) + } } - } + ), + text = Locator.Text( + highlight = rawTextAcc, + before = wholeRawTextAcc.takeLast(50) // FIXME: custom length + ) ), - text = Locator.Text( - highlight = rawTextAcc, - before = wholeRawTextAcc.takeLast(50) // FIXME: custom length - ) - ), - language = currentLanguage?.let { Language(it) }, - text = text - )) + text = text, + attributes = buildList { + currentLanguage?.let { + add(Text.Segment.Attribute(Text.Segment.AttributeKey.LANGUAGE, Language(it))) + } + }, + ) + ) } wholeRawTextAcc += rawTextAcc @@ -259,9 +294,3 @@ private val Node.language: String? get() = attr("xml:lang").takeUnless { it.isBlank() } ?: attr("lang").takeUnless { it.isBlank() } ?: parent()?.language - -private fun Node.parentElement(): Element? = - parent()?.let { parent -> - (parent as? Element) - ?: parent.parentElement() - } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt new file mode 100644 index 0000000000..ad9d4e771c --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt @@ -0,0 +1,141 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.publication.services.content.iterators + +import kotlinx.coroutines.CompletableDeferred +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.fetcher.Resource +import org.readium.r2.shared.publication.Link +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.indexOfFirstWithHref +import org.readium.r2.shared.publication.services.content.Content + +/** + * Creates a [ContentIterator] instance for the [Resource], starting from the given [Locator]. + * + * Returns null if the resource media type is not supported. + */ +@ExperimentalReadiumApi +typealias ResourceContentIteratorFactory = + suspend (resource: Resource, locator: Locator) -> ContentIterator? + +/** + * A composite [ContentIterator] which iterates through a whole [publication] and delegates the + * iteration inside a given resource to media type-specific iterators. + * + * @param publication The [Publication] which will be iterated through. + * @param startLocator Starting [Locator] in the publication. + * @param resourceContentIteratorFactories List of [ResourceContentIteratorFactory] which will be + * used to create the iterator for each resource. The factories are tried in order until there's a + * match. + */ +@ExperimentalReadiumApi +class PublicationContentIterator( + private val publication: Publication, + private var startLocator: Locator?, + private val resourceContentIteratorFactories: List +) : ContentIterator { + + /** + * Current index in the reading order. + */ + private var currentIndex: Int = + startLocator?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } ?: 0 + + /** + * [ContentIterator] for the current [Resource] in the reading order. + */ + private var currentIterator: ContentIterator? = null + + override suspend fun close() { + currentIterator?.close() + currentIterator = null + } + + override suspend fun previous(): Content? = + nextIn(Direction.Backward) + + override suspend fun next(): Content? = + nextIn(Direction.Forward) + + private suspend fun nextIn(direction: Direction): Content? { + val iterator = currentIterator + ?: initialIterator() + ?: nextIteratorIn(direction) + ?: return null + + val content = iterator.nextIn(direction) + if (content == null) { + currentIterator = null + return nextIn(direction) + } + return content + } + + private var isInitialized = false + + private suspend fun initialIterator(): ContentIterator? { + if (isInitialized) return null + isInitialized = true + + val link = publication.readingOrder.getOrNull(currentIndex) ?: return null + currentIterator = loadIteratorAt(link) + return currentIterator + } + + private suspend fun nextIteratorIn(direction: Direction): ContentIterator? { + val nextIterator = loadIteratorIn(direction, fromIndex = currentIndex) + ?: return null + + currentIndex = nextIterator.index + currentIterator = nextIterator.iterator + return currentIterator + } + + /** + * [ContentIterator] for a resource, associated with its [index] in the reading order. + */ + private data class IndexedIterator( + val index: Int, + val iterator: ContentIterator + ) + + private suspend fun loadIteratorIn(direction: Direction, fromIndex: Int): IndexedIterator? { + val index = fromIndex + direction.delta + val link = publication.readingOrder.getOrNull(index) ?: return null + var locator = publication.locatorFromLink(link) ?: return null + + if (direction == Direction.Backward) { + locator = locator.copyWithLocations(progression = 1.0) + } + + val iterator = loadIteratorAt(link, locator) + ?: return loadIteratorIn(direction, fromIndex = index) + + return IndexedIterator(index, iterator) + } + + private suspend fun loadIteratorAt(link: Link, locator: Locator? = null): ContentIterator? { + val loc = locator ?: publication.locatorFromLink(link) ?: return null + val resource = publication.get(link) + return resourceContentIteratorFactories + .firstNotNullOfOrNull { factory -> + factory(resource, loc) + } + } + + private enum class Direction(val delta: Int) { + Forward(+1), Backward(-1) + } + + private suspend fun ContentIterator.nextIn(direction: Direction): Content? = + when (direction) { + Direction.Forward -> next() + Direction.Backward -> previous() + } +} diff --git a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt index ae2360d311..b16e70b2c9 100644 --- a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt +++ b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt @@ -10,6 +10,7 @@ package org.readium.r2.streamer.parser.epub import kotlinx.coroutines.runBlocking +import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.ReadiumCSSName import org.readium.r2.shared.Search import org.readium.r2.shared.drm.DRM @@ -22,7 +23,7 @@ import org.readium.r2.shared.publication.asset.FileAsset import org.readium.r2.shared.publication.asset.PublicationAsset import org.readium.r2.shared.publication.encryption.Encryption import org.readium.r2.shared.publication.services.content.DefaultContentIterationService -import org.readium.r2.shared.publication.services.content.HtmlResourceContentIterator +import org.readium.r2.shared.publication.services.content.iterators.HtmlResourceContentIterator import org.readium.r2.shared.publication.services.search.StringSearchService import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.logging.WarningLogger @@ -91,7 +92,7 @@ class EpubParser( override suspend fun parse(asset: PublicationAsset, fetcher: Fetcher, warnings: WarningLogger?): Publication.Builder? = _parse(asset, fetcher, asset.name) - @OptIn(Search::class) + @OptIn(Search::class, ExperimentalReadiumApi::class) suspend fun _parse(asset: PublicationAsset, fetcher: Fetcher, fallbackTitle: String): Publication.Builder? { if (asset.mediaType() != MediaType.EPUB) From 30c3ff2a1c26f7ade4f73077ef4fec588d843a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 6 Jul 2022 12:49:15 +0200 Subject: [PATCH 43/59] Fix `PublicationContentIterator` --- .../org/readium/r2/navigator/tts/TtsEngine.kt | 4 +- .../iterators/PublicationContentIterator.kt | 129 +++++++++++------- .../java/org/readium/r2/shared/util/Either.kt | 14 +- .../r2/testapp/reader/VisualReaderFragment.kt | 8 ++ .../r2/testapp/reader/tts/TtsViewModel.kt | 22 +-- 5 files changed, 109 insertions(+), 68 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index cae5a63808..e9f915398e 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -88,8 +88,8 @@ interface TtsEngine : SuspendingCloseable { ) { val language: Language = when (val vl = voiceOrLanguage) { - is Either.Left -> vl.left.language - is Either.Right -> vl.right + is Either.Left -> vl.value.language + is Either.Right -> vl.value } } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt index ad9d4e771c..3b9d48ecae 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt @@ -6,7 +6,6 @@ package org.readium.r2.shared.publication.services.content.iterators -import kotlinx.coroutines.CompletableDeferred import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.fetcher.Resource import org.readium.r2.shared.publication.Link @@ -14,6 +13,7 @@ import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.indexOfFirstWithHref import org.readium.r2.shared.publication.services.content.Content +import org.readium.r2.shared.util.Either /** * Creates a [ContentIterator] instance for the [Resource], starting from the given [Locator]. @@ -37,24 +37,36 @@ typealias ResourceContentIteratorFactory = @ExperimentalReadiumApi class PublicationContentIterator( private val publication: Publication, - private var startLocator: Locator?, + private val startLocator: Locator?, private val resourceContentIteratorFactories: List ) : ContentIterator { /** - * Current index in the reading order. + * [ContentIterator] for a resource, associated with its [index] in the reading order. */ - private var currentIndex: Int = - startLocator?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } ?: 0 + private data class IndexedIterator( + val index: Int, + val iterator: ContentIterator + ) + + private var _currentIterator: IndexedIterator? = null /** - * [ContentIterator] for the current [Resource] in the reading order. + * Returns the [ContentIterator] for the current [Resource] in the reading order. */ - private var currentIterator: ContentIterator? = null + private suspend fun currentIterator(): IndexedIterator? { + if (_currentIterator == null) { + _currentIterator = initialIterator() + } + return _currentIterator + } + + private var isClosed = false override suspend fun close() { - currentIterator?.close() - currentIterator = null + isClosed = true + _currentIterator?.iterator?.close() + _currentIterator = null } override suspend fun previous(): Content? = @@ -64,78 +76,91 @@ class PublicationContentIterator( nextIn(Direction.Forward) private suspend fun nextIn(direction: Direction): Content? { - val iterator = currentIterator - ?: initialIterator() - ?: nextIteratorIn(direction) - ?: return null + check(!isClosed) { "The iterator is closed and cannot be used" } - val content = iterator.nextIn(direction) + val iterator = currentIterator() ?: return null + + val content = iterator.nextContentIn(direction) if (content == null) { - currentIterator = null + _currentIterator = nextIteratorIn(direction, fromIndex = iterator.index) + ?: return null return nextIn(direction) } return content } - private var isInitialized = false - - private suspend fun initialIterator(): ContentIterator? { - if (isInitialized) return null - isInitialized = true - - val link = publication.readingOrder.getOrNull(currentIndex) ?: return null - currentIterator = loadIteratorAt(link) - return currentIterator - } + /** + * Returns the first iterator starting at [startLocator] or the beginning of the publication. + */ + private suspend fun initialIterator(): IndexedIterator? { + val index: Int = + startLocator?.let { publication.readingOrder.indexOfFirstWithHref(it.href) } + ?: 0 - private suspend fun nextIteratorIn(direction: Direction): ContentIterator? { - val nextIterator = loadIteratorIn(direction, fromIndex = currentIndex) - ?: return null + val locations = startLocator.orProgression(0.0) - currentIndex = nextIterator.index - currentIterator = nextIterator.iterator - return currentIterator + return loadIteratorAt(index, locations) + ?: nextIteratorIn(Direction.Forward, fromIndex = index) } /** - * [ContentIterator] for a resource, associated with its [index] in the reading order. + * Returns the next resource iterator in the given [direction], starting from [fromIndex]. */ - private data class IndexedIterator( - val index: Int, - val iterator: ContentIterator - ) - - private suspend fun loadIteratorIn(direction: Direction, fromIndex: Int): IndexedIterator? { + private suspend fun nextIteratorIn(direction: Direction, fromIndex: Int): IndexedIterator? { val index = fromIndex + direction.delta - val link = publication.readingOrder.getOrNull(index) ?: return null - var locator = publication.locatorFromLink(link) ?: return null - - if (direction == Direction.Backward) { - locator = locator.copyWithLocations(progression = 1.0) + if (!publication.readingOrder.indices.contains(index)) { + return null } - val iterator = loadIteratorAt(link, locator) - ?: return loadIteratorIn(direction, fromIndex = index) + val progression = when (direction) { + Direction.Forward -> 0.0 + Direction.Backward -> 1.0 + } - return IndexedIterator(index, iterator) + return loadIteratorAt(index, location = Either.Right(progression)) + ?: nextIteratorIn(direction, fromIndex = index) } - private suspend fun loadIteratorAt(link: Link, locator: Locator? = null): ContentIterator? { - val loc = locator ?: publication.locatorFromLink(link) ?: return null + /** + * Loads the iterator at the given [index] in the reading order. + * + * The [location] will be used to compute the starting [Locator] for the iterator. + */ + private suspend fun loadIteratorAt(index: Int, location: LocatorOrProgression): IndexedIterator? { + val link = publication.readingOrder[index] + val locator = location.toLocator(link) ?: return null val resource = publication.get(link) + return resourceContentIteratorFactories .firstNotNullOfOrNull { factory -> - factory(resource, loc) + factory(resource, locator) } + ?.let { IndexedIterator(index, it) } } private enum class Direction(val delta: Int) { Forward(+1), Backward(-1) } - private suspend fun ContentIterator.nextIn(direction: Direction): Content? = + private suspend fun IndexedIterator.nextContentIn(direction: Direction): Content? = when (direction) { - Direction.Forward -> next() - Direction.Backward -> previous() + Direction.Forward -> iterator.next() + Direction.Backward -> iterator.previous() } + + private fun LocatorOrProgression.toLocator(link: Link): Locator? = + left + ?: publication.locatorFromLink(link)?.copyWithLocations(progression = right) } + +/** + * Represents either an full [Locator], or a progression percentage in a resource. + */ +private typealias LocatorOrProgression = Either + +/** + * Returns this locator if not null, or the given [progression] as a fallback. + */ +private fun Locator?.orProgression(progression: Double): LocatorOrProgression = + this?.let { Either.Left(it) } + ?: Either.Right(progression) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt index ad44b00807..257d4d26db 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt @@ -1,19 +1,25 @@ package org.readium.r2.shared.util sealed class Either { - class Left(val left: A) : Either() - class Right(val right: B) : Either() + class Left(val value: A) : Either() + class Right(val value: B) : Either() + + val left: A? + get() = (this as? Left)?.value + + val right: B? + get() = (this as? Right)?.value inline fun onLeft(action: (value: A) -> Unit): Either { (this as? Left)?.let { - action(it.left) + action(it.value) } return this } inline fun onRight(action: (value: B) -> Unit): Either { (this as? Right)?.let { - action(it.right) + action(it.value) } return this } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index 6725356336..c5532a93b7 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -178,6 +178,14 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List } .launchIn(scope) + // Navigate to the currently spoken utterance. + state.map { it.playingUtterance } + .filterNotNull() + .onEach { locator -> + navigator.go(locator, animated = false) + } + .launchIn(scope) + // Navigate to the currently spoken word. // This will automatically turn pages when needed. state.map { it.playingWordRange } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 978acdca28..a2313b487b 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -99,14 +99,18 @@ class TtsViewModel private constructor( val events: Flow = _events.receiveAsFlow() /** - * Indicates whether the user enabled the TTS playback. - * It doesn't mean the TTS is actually speaking utterances at the moment. + * Indicates whether the TTS is in the Stopped state. */ - private val isStarted = MutableStateFlow(false) + private val isStopped: StateFlow init { director.listener = DirectorListener() + // Automatically close the TTS when reaching the Stopped state. + isStopped = director.state + .map { it == TtsDirector.State.Stopped } + .stateIn(scope, SharingStarted.Lazily, initialValue = true) + // Supported voices grouped by their language. val voicesByLanguage: Flow>> = director.availableVoices @@ -146,15 +150,15 @@ class TtsViewModel private constructor( // Current view model state. state = combine( - isStarted, + isStopped, director.state, settings - ) { isStarted, state, currentSettings -> + ) { isStopped, state, currentSettings -> val playing = (state as? TtsState.Playing) val paused = (state as? TtsState.Paused) State( - showControls = isStarted, + showControls = !isStopped, isPlaying = (playing != null), playingWordRange = playing?.range, playingUtterance = (playing?.utterance ?: paused?.utterance)?.locator, @@ -173,8 +177,7 @@ class TtsViewModel private constructor( * Starts the TTS using the first visible locator in the given [navigator]. */ fun start(navigator: Navigator) { - if (isStarted.value) return - isStarted.value = true + if (!isStopped.value) return scope.launch { director.start(fromLocator = navigator.firstVisibleElementLocator()) @@ -182,8 +185,7 @@ class TtsViewModel private constructor( } fun stop() { - if (!isStarted.value) return - isStarted.value = false + if (isStopped.value) return director.stop() } From 627456b75129cca7db4cf50b069c2ef55db3f469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Wed, 6 Jul 2022 14:32:29 +0200 Subject: [PATCH 44/59] Fix strings --- docs/guides/pdf.md | 2 +- .../org/readium/r2/navigator/Navigator.kt | 16 +++++++-------- .../r2/testapp/reader/tts/TtsControls.kt | 2 +- test-app/src/main/res/values/strings.xml | 20 +++++++++---------- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/docs/guides/pdf.md b/docs/guides/pdf.md index 217ddea8cc..e632c8a7b3 100644 --- a/docs/guides/pdf.md +++ b/docs/guides/pdf.md @@ -1,4 +1,4 @@ -# PDF support in Readium +# Supporting PDF documents The Readium toolkit relies on third-party PDF engines to parse and render PDF documents. diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/Navigator.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/Navigator.kt index 9de60b5efa..11bc2bf144 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/Navigator.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/Navigator.kt @@ -39,7 +39,6 @@ import kotlin.time.ExperimentalTime * interactions such as tapping/clicking the edge of the page to skip to the next one should be * implemented by the reading app, and not the navigator. */ -@OptIn(ExperimentalCoroutinesApi::class) interface Navigator { /** @@ -53,13 +52,6 @@ interface Navigator { */ val currentLocator: StateFlow - /** - * Returns the [Locator] to the first content element that begins on the current screen. - */ - @ExperimentalReadiumApi - suspend fun firstVisibleElementLocator(): Locator? = - currentLocator.value - /** * Moves to the position in the publication corresponding to the given [Locator]. */ @@ -112,11 +104,19 @@ interface NavigatorDelegate { * A navigator rendering the publication visually on-screen. */ interface VisualNavigator : Navigator { + /** * Current reading progression direction. */ val readingProgression: ReadingProgression + /** + * Returns the [Locator] to the first content element that begins on the current screen. + */ + @ExperimentalReadiumApi + suspend fun firstVisibleElementLocator(): Locator? = + currentLocator.value + interface Listener : Navigator.Listener { /** * Called when the user tapped the content, but nothing handled the event internally (eg. diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index 18a37263f0..e77a51e7f9 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -183,7 +183,7 @@ private fun TtsSettingsDialog( ) SelectorListItem( - label = stringResource(R.string.voice), + label = stringResource(R.string.tts_voice), values = availableVoices, selection = config.voice, titleForValue = { it?.name ?: it?.id ?: stringResource(R.string.auto) }, diff --git a/test-app/src/main/res/values/strings.xml b/test-app/src/main/res/values/strings.xml index 57555e5f9b..a91829dada 100644 --- a/test-app/src/main/res/values/strings.xml +++ b/test-app/src/main/res/values/strings.xml @@ -197,21 +197,19 @@ Select a font Close Language + Auto - Play - Pause - Stop - Go backward - Go forward - Speech settings - Rate Failed to initialize the TTS engine The language %s is not supported The language %s requires additional data. Do you want to download it? A networking error occurred A TTS error occurred - Auto - Voice - Voice %d - Higher quality voices (requires network) + Go forward + Pause + Play + Go backward + Rate + Speech settings + Stop + Voice From bfa97edb429e78274ec12d5fbf0721bc6b597888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 10:26:15 +0200 Subject: [PATCH 45/59] Refactor `Content` to use a more idiomatic iterator --- .../readium/r2/navigator/tts/TtsDirector.kt | 46 +-- .../org/readium/r2/shared/fetcher/Resource.kt | 11 + .../r2/shared/publication/Publication.kt | 6 +- .../publication/services/content/Content.kt | 331 +++++++++++------- .../content/ContentIterationService.kt | 82 ----- .../services/content/ContentService.kt | 87 +++++ .../services/content/ContentTokenizer.kt | 16 +- .../content/iterators/ContentIterator.kt | 28 -- .../iterators/HtmlResourceContentIterator.kt | 56 ++- .../iterators/PublicationContentIterator.kt | 73 ++-- .../r2/streamer/parser/epub/EpubParser.kt | 4 +- .../r2/testapp/reader/tts/TtsViewModel.kt | 4 +- 12 files changed, 430 insertions(+), 314 deletions(-) delete mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt create mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentService.kt delete mode 100644 readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/ContentIterator.kt diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt index bdb3080557..8e36d20efa 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt @@ -14,13 +14,8 @@ import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrLog import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.publication.services.content.Content -import org.readium.r2.shared.publication.services.content.contentIterator -import org.readium.r2.shared.publication.services.content.isContentIterable +import org.readium.r2.shared.publication.services.content.* import org.readium.r2.shared.util.* -import org.readium.r2.shared.publication.services.content.ContentTokenizer -import org.readium.r2.shared.publication.services.content.TextContentTokenizer -import org.readium.r2.shared.publication.services.content.iterators.ContentIterator import org.readium.r2.shared.util.tokenizer.TextUnit import java.util.* @@ -48,7 +43,7 @@ class TtsDirector private constructor( * @param publication Publication which will be iterated through and synthesized. * @param config Initial TTS configuration. * @param tokenizerFactory Factory to create a [ContentTokenizer] which will be used to - * split each [Content] item into smaller chunks. Splits by sentences by default. + * split each [Content.Element] item into smaller chunks. Splits by sentences by default. * @param listener Optional callbacks listener. */ operator fun invoke( @@ -72,7 +67,7 @@ class TtsDirector private constructor( * @param config Initial TTS configuration. * @param engineFactory Factory to create an instance of [TtsEngine]. * @param tokenizerFactory Factory to create a [ContentTokenizer] which will be used to - * split each [Content] item into smaller chunks. Splits by sentences by default. + * split each [Content.Element] item into smaller chunks. Splits by sentences by default. * @param listener Optional callbacks listener. */ operator fun invoke( @@ -88,7 +83,7 @@ class TtsDirector private constructor( } /** - * The default content tokenizer will split the [Content] items into individual sentences. + * The default content tokenizer will split the [Content.Element] items into individual sentences. */ val defaultTokenizerFactory: (Language?) -> ContentTokenizer = { language -> TextContentTokenizer( @@ -101,7 +96,7 @@ class TtsDirector private constructor( * Returns whether the [publication] can be played with a [TtsDirector]. */ fun canSpeak(publication: Publication): Boolean = - publication.isContentIterable + publication.hasContent } @ExperimentalReadiumApi @@ -275,7 +270,7 @@ class TtsDirector private constructor( */ fun start(fromLocator: Locator? = null) { replacePlaybackJob { - publicationIterator = publication.contentIterator(fromLocator) + publicationIterator = publication.content(fromLocator).iterator() playNextUtterance(Direction.Forward) } } @@ -349,19 +344,16 @@ class TtsDirector private constructor( } /** - * [ContentIterator] used to iterate through the [publication]. + * [Content.Iterator] used to iterate through the [publication]. */ - private var publicationIterator: ContentIterator? = null + private var publicationIterator: Content.Iterator? = null set(value) { - field?.let { - scope.launch { it.close() } - } field = value utterances = CursorList() } /** - * Utterances for the current publication [Content] item. + * Utterances for the current publication [Content.Element] item. */ private var utterances: CursorList = CursorList() @@ -441,7 +433,7 @@ class TtsDirector private constructor( } /** - * Loads the utterances for the next publication [Content] item in the given [direction]. + * Loads the utterances for the next publication [Content.Element] item in the given [direction]. */ private suspend fun loadNextUtterances(direction: Direction): Boolean { val content = publicationIterator?.nextIn(direction) @@ -467,18 +459,18 @@ class TtsDirector private constructor( } /** - * Splits a publication [Content] item into smaller chunks using the provided tokenizer. + * Splits a publication [Content.Element] item into smaller chunks using the provided tokenizer. * * This is used to split a paragraph into sentences, for example. */ - private fun Content.tokenize(): List = + private fun Content.Element.tokenize(): List = tokenizerFactory(config.value.defaultLanguage ?: publication.metadata.language) .tokenize(this) /** - * Splits a publication [Content] item into the utterances to be spoken. + * Splits a publication [Content.Element] item into the utterances to be spoken. */ - private fun Content.utterances(): List { + private fun Content.Element.utterances(): List { fun utterance(text: String, locator: Locator, language: Language? = null): Utterance? { if (!text.any { it.isLetterOrDigit() }) return null @@ -495,7 +487,7 @@ class TtsDirector private constructor( } return when (val data = data) { - is Content.Text -> { + is Content.Element.Text -> { data.segments.mapNotNull { segment -> utterance( text = segment.text, @@ -505,7 +497,7 @@ class TtsDirector private constructor( } } - is Content.TextualData -> { + is Content.Element.TextualData -> { listOfNotNull( data.text ?.takeIf { it.isNotBlank() } @@ -544,9 +536,9 @@ class TtsDirector private constructor( Direction.Backward -> previous() } - private suspend fun ContentIterator.nextIn(direction: Direction): Content? = + private suspend fun Content.Iterator.nextIn(direction: Direction): Content.Element? = when (direction) { - Direction.Forward -> next() - Direction.Backward -> previous() + Direction.Forward -> nextOrNull() + Direction.Backward -> previousOrNull() } } \ No newline at end of file diff --git a/readium/shared/src/main/java/org/readium/r2/shared/fetcher/Resource.kt b/readium/shared/src/main/java/org/readium/r2/shared/fetcher/Resource.kt index 6e3e253a2f..caf0baa6b4 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/fetcher/Resource.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/fetcher/Resource.kt @@ -9,6 +9,8 @@ package org.readium.r2.shared.fetcher +import android.graphics.Bitmap +import android.graphics.BitmapFactory import androidx.annotation.StringRes import kotlinx.coroutines.CancellationException import kotlinx.coroutines.sync.Mutex @@ -102,6 +104,15 @@ interface Resource : SuspendingCloseable { suspend fun readAsXml(): ResourceTry = read().mapCatching { XmlParser().parse(ByteArrayInputStream(it)) } + /** + * Reads the full content as a [Bitmap]. + */ + suspend fun readAsBitmap(): ResourceTry = + read().mapCatching { + BitmapFactory.decodeByteArray(it, 0, it.size) + ?: throw kotlin.Exception("Could not decode resource ${link().href} as a bitmap") + } + companion object { /** * Creates a cached resource wrapping this resource. diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt index 86a2e2fed6..bebda8db50 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Publication.kt @@ -26,7 +26,7 @@ import org.readium.r2.shared.fetcher.Resource import org.readium.r2.shared.publication.epub.listOfAudioClips import org.readium.r2.shared.publication.epub.listOfVideoClips import org.readium.r2.shared.publication.services.* -import org.readium.r2.shared.publication.services.content.ContentIterationService +import org.readium.r2.shared.publication.services.content.ContentService import org.readium.r2.shared.publication.services.search.SearchService import org.readium.r2.shared.util.Closeable import org.readium.r2.shared.util.Ref @@ -358,7 +358,7 @@ class Publication( @Suppress("UNCHECKED_CAST") constructor( cache: ServiceFactory? = null, - contentIteration: ServiceFactory? = null, + content: ServiceFactory? = null, contentProtection: ServiceFactory? = null, cover: ServiceFactory? = null, locator: ServiceFactory? = { DefaultLocatorService(it.manifest.readingOrder, it.services) }, @@ -366,7 +366,7 @@ class Publication( search: ServiceFactory? = null, ) : this(mapOf( CacheService::class.java.simpleName to cache, - ContentIterationService::class.java.simpleName to contentIteration, + ContentService::class.java.simpleName to content, ContentProtectionService::class.java.simpleName to contentProtection, CoverService::class.java.simpleName to cover, LocatorService::class.java.simpleName to locator, diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt index fdc734a3f2..4d856e07d5 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt @@ -13,151 +13,244 @@ import org.readium.r2.shared.util.Language import java.net.URL /** - * Represents a single semantic content element part of a publication. - * - * @param locator Locator targeting this element in the Publication. - * @param data Data associated with this element. - * @param extras Additional metadata for extensions. + * Provides an iterable list of content [Element]s. */ @ExperimentalReadiumApi -data class Content( - val locator: Locator, - val data: Data, - val extras: Map = emptyMap() -) { - /** A marker interface for a [Content] associated data. */ - interface Data - - /** A piece of data which can be represented as human-readable text. */ - interface TextualData : Data { - /** Human-readable text representation for this data. */ - val text: String? - } - - /** A piece of data referencing an embedded external resource. */ - interface EmbeddedData : Data { - val link: Link - } - - /** An audio clip. */ - data class Audio( - override val link: Link - ) : EmbeddedData +interface Content { /** - * A bitmap image. + * Represents a single semantic content element part of a publication. * - * @param caption Short piece of text associated with the image. - * @param description Accessibility label. + * @param locator Locator targeting this element in the Publication. + * @param data Data associated with this element. + * @param extras Additional metadata for extensions. */ - data class Image( - override val link: Link, - val caption: String?, - val description: String? - ) : EmbeddedData, TextualData { - override val text: String? - get() = caption?.takeIf { it.isNotBlank() } - ?: description - } + @ExperimentalReadiumApi + data class Element( + val locator: Locator, + val data: Data, + val extras: Map = emptyMap() + ) { + /** A marker interface for a [Element] associated data. */ + interface Data - /** - * A text element. - * - * @param role Purpose of this element in the broader context of the document. - * @param segments Ranged portions of text with associated attributes. - */ - data class Text( - val role: Role, - val segments: List - ) : TextualData { + /** A piece of data which can be represented as human-readable text. */ + interface TextualData : Data { + /** Human-readable text representation for this data. */ + val text: String? + } + + /** A piece of data referencing an embedded external resource. */ + interface EmbeddedData : Data { + val link: Link + } - override val text: String - get() = segments.joinToString { it.text } + /** An audio clip. */ + data class Audio( + override val link: Link + ) : EmbeddedData /** - * Represents a purpose of an element in the broader context of the document. + * A bitmap image. + * + * @param caption Short piece of text associated with the image. + * @param description Accessibility label. */ - interface Role { - /** - * Title of a section. - * - * @param level Heading importance, 1 being the highest. - */ - data class Heading(val level: Int) : Role - - /** - * Normal body of content. - */ - object Body : Role - - /** - * A footnote at the bottom of a document. - */ - object Footnote : Role - - /** - * A quotation. - * - * @param referenceUrl URL to the source for this quote. - * @param referenceTitle Name of the source for this quote. - */ - data class Quote( - val referenceUrl: URL?, - val referenceTitle: String? - ) : Role + data class Image( + override val link: Link, + val caption: String?, + val description: String? + ) : EmbeddedData, TextualData { + override val text: String? + get() = caption?.takeIf { it.isNotBlank() } + ?: description } /** - * Ranged portion of text with associated attributes. + * A text element. * - * @param locator Locator to the segment of text. - * @param text Text in the segment. - * @param attributes Attributes associated with this segment, e.g. language. + * @param role Purpose of this element in the broader context of the document. + * @param segments Ranged portions of text with associated attributes. */ - data class Segment( - val locator: Locator, - val text: String, - val attributes: List>, - ) { - /** - * Language of the text, if any. - */ - val language: Language? - get() = attribute(AttributeKey.LANGUAGE) + data class Text( + val role: Role, + val segments: List + ) : TextualData { + + override val text: String + get() = segments.joinToString { it.text } /** - * An attribute is an arbitrary key-value pair. + * Represents a purpose of an element in the broader context of the document. */ - data class Attribute( - val key: AttributeKey, - val value: V - ) + interface Role { + /** + * Title of a section. + * + * @param level Heading importance, 1 being the highest. + */ + data class Heading(val level: Int) : Role + + /** + * Normal body of content. + */ + object Body : Role + + /** + * A footnote at the bottom of a document. + */ + object Footnote : Role + + /** + * A quotation. + * + * @param referenceUrl URL to the source for this quote. + * @param referenceTitle Name of the source for this quote. + */ + data class Quote( + val referenceUrl: URL?, + val referenceTitle: String? + ) : Role + } /** - * An attribute key identifies uniquely an attribute. + * Ranged portion of text with associated attributes. * - * The [V] phantom type is there to perform static type checking when requesting an - * attribute. + * @param locator Locator to the segment of text. + * @param text Text in the segment. + * @param attributes Attributes associated with this segment, e.g. language. */ - data class AttributeKey(val id: String) { - companion object { - val LANGUAGE = AttributeKey("language") - val LINK = AttributeKey("link") + data class Segment( + val locator: Locator, + val text: String, + val attributes: List>, + ) { + /** + * Language of the text, if any. + */ + val language: Language? + get() = attribute(AttributeKey.LANGUAGE) + + /** + * An attribute is an arbitrary key-value pair. + */ + data class Attribute( + val key: AttributeKey, + val value: V + ) + + /** + * An attribute key identifies uniquely an attribute. + * + * The [V] phantom type is there to perform static type checking when requesting an + * attribute. + */ + data class AttributeKey(val id: String) { + companion object { + val LANGUAGE = AttributeKey("language") + val LINK = AttributeKey("link") + } } + + /** + * Gets the first attribute with the given [key]. + */ + @Suppress("UNCHECKED_CAST") + fun attribute(key: AttributeKey): V? = + attributes.firstOrNull { it.key == key }?.value as V + + @Suppress("UNCHECKED_CAST") + fun attributes(key: AttributeKey): List = + attributes + .filter { it.key == key } + .map { it.value as V } } + } + } - /** - * Gets the first attribute with the given [key]. - */ - @Suppress("UNCHECKED_CAST") - fun attribute(key: AttributeKey): V? = - attributes.firstOrNull { it.key == key }?.value as V - - @Suppress("UNCHECKED_CAST") - fun attributes(key: AttributeKey): List = - attributes - .filter { it.key == key } - .map { it.value as V } + /** + * Iterates through a list of [Element] items asynchronously. + */ + @ExperimentalReadiumApi + interface Iterator { + + /** + * Returns true if the iterator has a next element, suspending the caller while processing + * it. + */ + suspend operator fun hasNext(): Boolean + + /** + * Retrieves the element computed by a preceding call to [hasNext], or throws an + * [IllegalStateException] if [hasNext] was not invoked. This method should only be used in + * pair with [hasNext]. + */ + operator fun next(): Element + + /** + * Advances to the next item and returns it, or null if we reached the end. + */ + suspend fun nextOrNull(): Element? = + if (hasNext()) next() else null + + /** + * Returns true if the iterator has a previous element, suspending the caller while processing + * it. + */ + suspend fun hasPrevious(): Boolean + + /** + * Retrieves the element computed by a preceding call to [hasPrevious], or throws an + * [IllegalStateException] if [hasPrevious] was not invoked. This method should only be used in + * pair with [hasPrevious]. + */ + fun previous(): Element + + /** + * Advances to the previous item and returns it, or null if we reached the beginning. + */ + suspend fun previousOrNull(): Element? = + if (hasPrevious()) previous() else null + } + + /** + * Creates a new iterator for this content. + */ + operator fun iterator(): Iterator + + /** + * Returns all the elements as a list. + */ + suspend fun elements(): List = + buildList { + for (element in this@Content) { + add(element) + } } +} + +/** + * An empty [Content]. + */ +@ExperimentalReadiumApi +class EmptyContent : Content { + override fun iterator(): Content.Iterator = EmptyContentIterator() +} + +/** + * An empty [Content.Iterator]. + */ +@ExperimentalReadiumApi +class EmptyContentIterator : Content.Iterator { + override suspend fun hasNext(): Boolean = false + + override fun next(): Content.Element { + throw IllegalStateException("Called next() without a successful call to hasPrevious() first") + } + + override suspend fun hasPrevious(): Boolean = false + + override fun previous(): Content.Element { + throw IllegalStateException("Called previous() without a successful call to hasPrevious() first") } } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt deleted file mode 100644 index b802afff92..0000000000 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentIterationService.kt +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.shared.publication.services.content - -import org.readium.r2.shared.ExperimentalReadiumApi -import org.readium.r2.shared.publication.Locator -import org.readium.r2.shared.publication.Publication -import org.readium.r2.shared.publication.ServiceFactory -import org.readium.r2.shared.publication.services.content.iterators.ContentIterator -import org.readium.r2.shared.publication.services.content.iterators.PublicationContentIterator -import org.readium.r2.shared.publication.services.content.iterators.ResourceContentIteratorFactory -import org.readium.r2.shared.util.Ref - -/** - * Provides [ContentIterator] instances to crawl the content of a [Publication]. - */ -@ExperimentalReadiumApi -interface ContentIterationService : Publication.Service { - /** - * Creates a [ContentIterator] starting from the given [start] location. - * - * Returns null if no iterator can be created, for example because no resources are iterable. - */ - suspend fun iterator(start: Locator?): ContentIterator? -} - -/** - * Returns whether this [Publication] can be iterated on. - */ -@ExperimentalReadiumApi -val Publication.isContentIterable: Boolean - get() = contentIterationService != null - -/** - * Creates a [ContentIterator] starting from the given location. - */ -@ExperimentalReadiumApi -suspend fun Publication.contentIterator(start: Locator?): ContentIterator? = - contentIterationService?.iterator(start) - -@ExperimentalReadiumApi -private val Publication.contentIterationService: ContentIterationService? - get() = findService(ContentIterationService::class) - -/** Factory to build a [ContentIterationService] */ -@ExperimentalReadiumApi -var Publication.ServicesBuilder.contentIterationServiceFactory: ServiceFactory? - get() = get(ContentIterationService::class) - set(value) = set(ContentIterationService::class, value) - -/** - * This [ContentIterationService] takes a list of [ResourceContentIteratorFactory] and returns - * instances of [PublicationContentIterator]. - */ -@ExperimentalReadiumApi -class DefaultContentIterationService( - private val publication: Ref, - private val resourceContentIteratorFactories: List -) : ContentIterationService { - - companion object { - fun createFactory( - resourceContentIteratorFactories: List - ): (Publication.Service.Context) -> DefaultContentIterationService = { context -> - DefaultContentIterationService(context.publication, resourceContentIteratorFactories) - } - } - - override suspend fun iterator(start: Locator?): ContentIterator? { - val publication = publication() ?: return null - - return PublicationContentIterator( - publication = publication, - startLocator = start, - resourceContentIteratorFactories = resourceContentIteratorFactories - ) - } -} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentService.kt new file mode 100644 index 0000000000..6aea48e017 --- /dev/null +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentService.kt @@ -0,0 +1,87 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + +package org.readium.r2.shared.publication.services.content + +import org.readium.r2.shared.ExperimentalReadiumApi +import org.readium.r2.shared.publication.Locator +import org.readium.r2.shared.publication.Publication +import org.readium.r2.shared.publication.ServiceFactory +import org.readium.r2.shared.publication.services.content.iterators.PublicationContentIterator +import org.readium.r2.shared.publication.services.content.iterators.ResourceContentIteratorFactory +import org.readium.r2.shared.util.Ref + +/** + * Provides a way to extract the raw [Content] of a [Publication]. + */ +@ExperimentalReadiumApi +interface ContentService : Publication.Service { + /** + * Creates a [Content] starting from the given [start] location. + */ + suspend fun content(start: Locator?): Content +} + +/** + * Returns whether this [Publication] supports extracting its content. + */ +@ExperimentalReadiumApi +val Publication.hasContent: Boolean + get() = contentService != null + +/** + * Creates a [Content] starting from the given [start] location, or the beginning of the + * publication when missing. + */ +@ExperimentalReadiumApi +suspend fun Publication.content(start: Locator? = null): Content = + contentService?.content(start) ?: EmptyContent() + +@ExperimentalReadiumApi +private val Publication.contentService: ContentService? + get() = findService(ContentService::class) + +/** Factory to build a [ContentService] */ +@ExperimentalReadiumApi +var Publication.ServicesBuilder.contentServiceFactory: ServiceFactory? + get() = get(ContentService::class) + set(value) = set(ContentService::class, value) + +/** + * Default implementation of [DefaultContentService], delegating the content parsing to + * [ResourceContentIteratorFactory]. + */ +@ExperimentalReadiumApi +class DefaultContentService( + private val publication: Ref, + private val resourceContentIteratorFactories: List +) : ContentService { + + companion object { + fun createFactory( + resourceContentIteratorFactories: List + ): (Publication.Service.Context) -> DefaultContentService = { context -> + DefaultContentService(context.publication, resourceContentIteratorFactories) + } + } + + override suspend fun content(start: Locator?): Content { + val publication = publication() ?: return EmptyContent() + return ContentImpl(publication, start) + } + + private inner class ContentImpl( + val publication: Publication, + val start: Locator?, + ) : Content { + override fun iterator(): Content.Iterator = + PublicationContentIterator( + publication = publication, + startLocator = start, + resourceContentIteratorFactories = resourceContentIteratorFactories + ) + } +} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt index ea07a3a8cc..7c5b0825b1 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt @@ -14,18 +14,18 @@ import org.readium.r2.shared.util.tokenizer.TextTokenizer import org.readium.r2.shared.util.tokenizer.TextUnit import org.readium.r2.shared.util.tokenizer.Tokenizer -/** A tokenizer splitting a [Content] into smaller pieces. */ +/** A tokenizer splitting a [Content.Element] into smaller pieces. */ @ExperimentalReadiumApi -fun interface ContentTokenizer : Tokenizer +fun interface ContentTokenizer : Tokenizer /** A passthrough tokenizer which does not modify its input. */ @ExperimentalReadiumApi object IdentityContentTokenizer : ContentTokenizer { - override fun tokenize(data: Content): List = listOf(data) + override fun tokenize(data: Content.Element): List = listOf(data) } /** - * A [ContentTokenizer] using a [TextTokenizer] to split the text of the [Content] into smaller + * A [ContentTokenizer] using a [TextTokenizer] to split the text of the [Content.Element] into smaller * portions. * * @param contextSnippetLength Length of `before` and `after` snippets in the produced [Locator]s. @@ -38,15 +38,15 @@ class TextContentTokenizer( ) : ContentTokenizer { /** - * A [ContentTokenizer] using the default [TextTokenizer] to split the text of the [Content]. + * A [ContentTokenizer] using the default [TextTokenizer] to split the text of the [Content.Element]. */ constructor(defaultLanguage: Language?, unit: TextUnit) : this( defaultLanguage = defaultLanguage, textTokenizerFactory = { language -> DefaultTextContentTokenizer(unit, language) } ) - override fun tokenize(data: Content): List = listOf( - if (data.data is Content.Text) { + override fun tokenize(data: Content.Element): List = listOf( + if (data.data is Content.Element.Text) { data.copy( data = data.data.copy( segments = data.data.segments.flatMap { tokenize(it) } @@ -57,7 +57,7 @@ class TextContentTokenizer( } ) - private fun tokenize(segment: Content.Text.Segment): List = + private fun tokenize(segment: Content.Element.Text.Segment): List = textTokenizerFactory(segment.language ?: defaultLanguage).tokenize(segment.text) .map { range -> segment.copy( diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/ContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/ContentIterator.kt deleted file mode 100644 index a42bcf6870..0000000000 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/ContentIterator.kt +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2022 Readium Foundation. All rights reserved. - * Use of this source code is governed by the BSD-style license - * available in the top-level LICENSE file of the project. - */ - -package org.readium.r2.shared.publication.services.content.iterators - -import org.readium.r2.shared.ExperimentalReadiumApi -import org.readium.r2.shared.publication.services.content.Content -import org.readium.r2.shared.util.SuspendingCloseable - -/** - * Iterates through a list of [Content] items asynchronously. - */ -@ExperimentalReadiumApi -interface ContentIterator : SuspendingCloseable { - - /** - * Goes back to the previous item and returns it, or null if we reached the beginning. - */ - suspend fun previous(): Content? - - /** - * Advances to the next item and returns it, or null if we reached the end. - */ - suspend fun next(): Content? -} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt index dd2e1464ba..d0b4089357 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt @@ -21,7 +21,7 @@ import org.readium.r2.shared.publication.Link import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.html.cssSelector import org.readium.r2.shared.publication.services.content.Content -import org.readium.r2.shared.publication.services.content.Content.Text +import org.readium.r2.shared.publication.services.content.Content.Element.Text import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.mediatype.MediaType @@ -41,7 +41,7 @@ import org.readium.r2.shared.util.use class HtmlResourceContentIterator( private val resource: Resource, private val locator: Locator -) : ContentIterator { +) : Content.Iterator { companion object { /** @@ -54,18 +54,46 @@ class HtmlResourceContentIterator( } } - override suspend fun close() {} + /** + * [Content.Element] loaded with [hasPrevious] or [hasNext], associated with the move delta. + */ + private data class ContentWithDelta( + val element: Content.Element, + val delta: Int + ) + + private var currentElement: ContentWithDelta? = null + + override suspend fun hasPrevious(): Boolean { + currentElement = nextBy(-1) + return currentElement != null + } + + override fun previous(): Content.Element = + currentElement + ?.takeIf { it.delta == -1 }?.element + ?: throw IllegalStateException("Called previous() without a successful call to hasPrevious() first") - override suspend fun previous(): Content? = nextBy(-1) - override suspend fun next(): Content? = nextBy(1) + override suspend fun hasNext(): Boolean { + currentElement = nextBy(+1) + return currentElement != null + } - private suspend fun nextBy(delta: Int): Content? { + override fun next(): Content.Element = + currentElement + ?.takeIf { it.delta == +1 }?.element + ?: throw IllegalStateException("Called next() without a successful call to hasNext() first") + + private suspend fun nextBy(delta: Int): ContentWithDelta? { val elements = elements() val index = currentIndex?.let { it + delta } ?: elements.startIndex - return elements.elements.getOrNull(index) - ?.also { currentIndex = index } + val content = elements.elements.getOrNull(index) + ?: return null + + currentIndex = index + return ContentWithDelta(content, delta) } private var currentIndex: Int? = null @@ -95,13 +123,13 @@ class HtmlResourceContentIterator( } /** - * Holds the result of parsing the HTML resource into a list of [Content]. + * Holds the result of parsing the HTML resource into a list of [ContentElement]. * * The [startIndex] will be calculated from the element matched by the base [locator], if * possible. Defaults to 0. */ data class ParsedElements( - val elements: List, + val elements: List, val startIndex: Int, ) @@ -116,7 +144,7 @@ class HtmlResourceContentIterator( else startIndex ) - private val elements = mutableListOf() + private val elements = mutableListOf() private var startIndex = 0 private var currentElement: Element? = null @@ -155,7 +183,7 @@ class HtmlResourceContentIterator( if (href != null) { elements.add( - Content( + Content.Element( locator = baseLocator.copy( locations = Locator.Locations( otherLocations = buildMap { @@ -163,7 +191,7 @@ class HtmlResourceContentIterator( } ) ), - data = Content.Image( + data = Content.Element.Image( link = Link(href = href), caption = null, // FIXME: Get the caption from figcaption description = node.attr("alt").takeIf { it.isNotBlank() }, @@ -219,7 +247,7 @@ class HtmlResourceContentIterator( if (startElement != null && currentElement == startElement) { startIndex = elements.size } - elements.add(Content( + elements.add(Content.Element( locator = baseLocator.copy( locations = Locator.Locations( otherLocations = buildMap { diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt index 3b9d48ecae..9befcfcf5a 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/PublicationContentIterator.kt @@ -16,16 +16,16 @@ import org.readium.r2.shared.publication.services.content.Content import org.readium.r2.shared.util.Either /** - * Creates a [ContentIterator] instance for the [Resource], starting from the given [Locator]. + * Creates a [Content.Iterator] instance for the [Resource], starting from the given [Locator]. * * Returns null if the resource media type is not supported. */ @ExperimentalReadiumApi typealias ResourceContentIteratorFactory = - suspend (resource: Resource, locator: Locator) -> ContentIterator? + suspend (resource: Resource, locator: Locator) -> Content.Iterator? /** - * A composite [ContentIterator] which iterates through a whole [publication] and delegates the + * A composite [Content.Iterator] which iterates through a whole [publication] and delegates the * iteration inside a given resource to media type-specific iterators. * * @param publication The [Publication] which will be iterated through. @@ -39,45 +39,48 @@ class PublicationContentIterator( private val publication: Publication, private val startLocator: Locator?, private val resourceContentIteratorFactories: List -) : ContentIterator { +) : Content.Iterator { /** - * [ContentIterator] for a resource, associated with its [index] in the reading order. + * [Content.Iterator] for a resource, associated with its [index] in the reading order. */ private data class IndexedIterator( val index: Int, - val iterator: ContentIterator + val iterator: Content.Iterator ) - private var _currentIterator: IndexedIterator? = null - /** - * Returns the [ContentIterator] for the current [Resource] in the reading order. + * [Content.Element] loaded with [hasPrevious] or [hasNext], associated with the move direction. */ - private suspend fun currentIterator(): IndexedIterator? { - if (_currentIterator == null) { - _currentIterator = initialIterator() - } - return _currentIterator - } + private data class ElementInDirection( + val element: Content.Element, + val direction: Direction + ) - private var isClosed = false + private var _currentIterator: IndexedIterator? = null + private var currentElement: ElementInDirection? = null - override suspend fun close() { - isClosed = true - _currentIterator?.iterator?.close() - _currentIterator = null + override suspend fun hasPrevious(): Boolean { + currentElement = nextIn(Direction.Backward) + return currentElement != null } - override suspend fun previous(): Content? = - nextIn(Direction.Backward) + override fun previous(): Content.Element = + currentElement + ?.takeIf { it.direction == Direction.Backward }?.element + ?: throw IllegalStateException("Called previous() without a successful call to hasPrevious() first") - override suspend fun next(): Content? = - nextIn(Direction.Forward) + override suspend fun hasNext(): Boolean { + currentElement = nextIn(Direction.Forward) + return currentElement != null + } - private suspend fun nextIn(direction: Direction): Content? { - check(!isClosed) { "The iterator is closed and cannot be used" } + override fun next(): Content.Element = + currentElement + ?.takeIf { it.direction == Direction.Forward }?.element + ?: throw IllegalStateException("Called next() without a successful call to hasNext() first") + private suspend fun nextIn(direction: Direction): ElementInDirection? { val iterator = currentIterator() ?: return null val content = iterator.nextContentIn(direction) @@ -86,7 +89,17 @@ class PublicationContentIterator( ?: return null return nextIn(direction) } - return content + return ElementInDirection(content, direction) + } + + /** + * Returns the [Content.Iterator] for the current [Resource] in the reading order. + */ + private suspend fun currentIterator(): IndexedIterator? { + if (_currentIterator == null) { + _currentIterator = initialIterator() + } + return _currentIterator } /** @@ -142,10 +155,10 @@ class PublicationContentIterator( Forward(+1), Backward(-1) } - private suspend fun IndexedIterator.nextContentIn(direction: Direction): Content? = + private suspend fun IndexedIterator.nextContentIn(direction: Direction): Content.Element? = when (direction) { - Direction.Forward -> iterator.next() - Direction.Backward -> iterator.previous() + Direction.Forward -> iterator.nextOrNull() + Direction.Backward -> iterator.previousOrNull() } private fun LocatorOrProgression.toLocator(link: Link): Locator? = diff --git a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt index b16e70b2c9..ee639bb727 100644 --- a/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt +++ b/readium/streamer/src/main/java/org/readium/r2/streamer/parser/epub/EpubParser.kt @@ -22,7 +22,7 @@ import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.publication.asset.FileAsset import org.readium.r2.shared.publication.asset.PublicationAsset import org.readium.r2.shared.publication.encryption.Encryption -import org.readium.r2.shared.publication.services.content.DefaultContentIterationService +import org.readium.r2.shared.publication.services.content.DefaultContentService import org.readium.r2.shared.publication.services.content.iterators.HtmlResourceContentIterator import org.readium.r2.shared.publication.services.search.StringSearchService import org.readium.r2.shared.util.Href @@ -123,7 +123,7 @@ class EpubParser( servicesBuilder = Publication.ServicesBuilder( positions = EpubPositionsService.createFactory(reflowablePositionsStrategy), search = StringSearchService.createDefaultFactory(), - contentIteration = DefaultContentIterationService.createFactory(listOf( + content = DefaultContentService.createFactory(listOf( HtmlResourceContentIterator.createFactory() )), ) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index a2313b487b..86ce0d654c 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -13,6 +13,7 @@ import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import org.readium.r2.navigator.Navigator +import org.readium.r2.navigator.VisualNavigator import org.readium.r2.navigator.tts.AndroidTtsEngine import org.readium.r2.navigator.tts.TtsDirector import org.readium.r2.navigator.tts.TtsDirector.Configuration @@ -180,7 +181,8 @@ class TtsViewModel private constructor( if (!isStopped.value) return scope.launch { - director.start(fromLocator = navigator.firstVisibleElementLocator()) + val start = (navigator as? VisualNavigator)?.firstVisibleElementLocator() + director.start(fromLocator = start) } } From da664ce4cab27eeca7b45089c7f3f70d4307d753 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 12:02:43 +0200 Subject: [PATCH 46/59] Simplify `Content` models --- .../readium/r2/navigator/tts/TtsDirector.kt | 15 +- .../publication/services/content/Content.kt | 264 ++++++++++-------- .../services/content/ContentTokenizer.kt | 8 +- .../iterators/HtmlResourceContentIterator.kt | 26 +- .../r2/testapp/reader/VisualReaderFragment.kt | 2 + 5 files changed, 166 insertions(+), 149 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt index 8e36d20efa..df67ae7a07 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt @@ -8,7 +8,10 @@ package org.readium.r2.navigator.tts import android.content.Context import kotlinx.coroutines.* -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update import org.readium.r2.shared.DelicateReadiumApi import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.extensions.tryOrLog @@ -486,9 +489,9 @@ class TtsDirector private constructor( ) } - return when (val data = data) { - is Content.Element.Text -> { - data.segments.mapNotNull { segment -> + return when (this) { + is Content.TextElement -> { + segments.mapNotNull { segment -> utterance( text = segment.text, locator = segment.locator, @@ -497,9 +500,9 @@ class TtsDirector private constructor( } } - is Content.Element.TextualData -> { + is Content.TextualElement -> { listOfNotNull( - data.text + text ?.takeIf { it.isNotBlank() } ?.let { utterance(text = it, locator = locator) } ) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt index 4d856e07d5..5124a66cbf 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt @@ -20,151 +20,169 @@ interface Content { /** * Represents a single semantic content element part of a publication. + */ + @ExperimentalReadiumApi + interface Element { + /** + * Locator targeting this element in the Publication. + */ + val locator: Locator + } + + /** An element which can be represented as human-readable text. */ + interface TextualElement : Element { + /** Human-readable text representation for this element. */ + val text: String? + } + + /** An element referencing an embedded external resource. */ + interface EmbeddedElement : Element { + /** Referenced resource in the publication. */ + val embeddedLink: Link + } + + /** + * An audio clip. * - * @param locator Locator targeting this element in the Publication. - * @param data Data associated with this element. * @param extras Additional metadata for extensions. */ - @ExperimentalReadiumApi - data class Element( - val locator: Locator, - val data: Data, - val extras: Map = emptyMap() - ) { - /** A marker interface for a [Element] associated data. */ - interface Data - - /** A piece of data which can be represented as human-readable text. */ - interface TextualData : Data { - /** Human-readable text representation for this data. */ - val text: String? - } + data class AudioElement( + override val locator: Locator, + override val embeddedLink: Link, + val extras: Map = emptyMap(), + ) : EmbeddedElement - /** A piece of data referencing an embedded external resource. */ - interface EmbeddedData : Data { - val link: Link - } + /** + * A video clip. + * + * @param extras Additional metadata for extensions. + */ + data class VideoElement( + override val locator: Locator, + override val embeddedLink: Link, + val extras: Map = emptyMap(), + ) : EmbeddedElement - /** An audio clip. */ - data class Audio( - override val link: Link - ) : EmbeddedData + /** + * A bitmap image. + * + * @param caption Short piece of text associated with the image. + * @param description Accessibility label. + * @param extras Additional metadata for extensions. + */ + data class ImageElement( + override val locator: Locator, + override val embeddedLink: Link, + val caption: String?, + val description: String?, + val extras: Map = emptyMap(), + ) : EmbeddedElement, TextualElement { + override val text: String? + get() = caption?.takeIf { it.isNotBlank() } + ?: description + } + + /** + * A text element. + * + * @param role Purpose of this element in the broader context of the document. + * @param segments Ranged portions of text with associated attributes. + * @param extras Additional metadata for extensions. + */ + data class TextElement( + override val locator: Locator, + val role: Role, + val segments: List, + val extras: Map = emptyMap(), + ) : TextualElement { + + override val text: String + get() = segments.joinToString { it.text } /** - * A bitmap image. - * - * @param caption Short piece of text associated with the image. - * @param description Accessibility label. + * Represents a purpose of an element in the broader context of the document. */ - data class Image( - override val link: Link, - val caption: String?, - val description: String? - ) : EmbeddedData, TextualData { - override val text: String? - get() = caption?.takeIf { it.isNotBlank() } - ?: description + interface Role { + /** + * Title of a section. + * + * @param level Heading importance, 1 being the highest. + */ + data class Heading(val level: Int) : Role + + /** + * Normal body of content. + */ + object Body : Role + + /** + * A footnote at the bottom of a document. + */ + object Footnote : Role + + /** + * A quotation. + * + * @param referenceUrl URL to the source for this quote. + * @param referenceTitle Name of the source for this quote. + */ + data class Quote( + val referenceUrl: URL?, + val referenceTitle: String? + ) : Role } /** - * A text element. + * Ranged portion of text with associated attributes. * - * @param role Purpose of this element in the broader context of the document. - * @param segments Ranged portions of text with associated attributes. + * @param locator Locator to the segment of text. + * @param text Text in the segment. + * @param attributes Attributes associated with this segment, e.g. language. */ - data class Text( - val role: Role, - val segments: List - ) : TextualData { - - override val text: String - get() = segments.joinToString { it.text } + data class Segment( + val locator: Locator, + val text: String, + val attributes: List>, + ) { + /** + * Language of the text, if any. + */ + val language: Language? + get() = attribute(AttributeKey.LANGUAGE) /** - * Represents a purpose of an element in the broader context of the document. + * An attribute is an arbitrary key-value pair. */ - interface Role { - /** - * Title of a section. - * - * @param level Heading importance, 1 being the highest. - */ - data class Heading(val level: Int) : Role - - /** - * Normal body of content. - */ - object Body : Role - - /** - * A footnote at the bottom of a document. - */ - object Footnote : Role - - /** - * A quotation. - * - * @param referenceUrl URL to the source for this quote. - * @param referenceTitle Name of the source for this quote. - */ - data class Quote( - val referenceUrl: URL?, - val referenceTitle: String? - ) : Role - } + data class Attribute( + val key: AttributeKey, + val value: V + ) /** - * Ranged portion of text with associated attributes. + * An attribute key identifies uniquely an attribute. * - * @param locator Locator to the segment of text. - * @param text Text in the segment. - * @param attributes Attributes associated with this segment, e.g. language. + * The [V] phantom type is there to perform static type checking when requesting an + * attribute. */ - data class Segment( - val locator: Locator, - val text: String, - val attributes: List>, - ) { - /** - * Language of the text, if any. - */ - val language: Language? - get() = attribute(AttributeKey.LANGUAGE) - - /** - * An attribute is an arbitrary key-value pair. - */ - data class Attribute( - val key: AttributeKey, - val value: V - ) - - /** - * An attribute key identifies uniquely an attribute. - * - * The [V] phantom type is there to perform static type checking when requesting an - * attribute. - */ - data class AttributeKey(val id: String) { - companion object { - val LANGUAGE = AttributeKey("language") - val LINK = AttributeKey("link") - } + data class AttributeKey(val id: String) { + companion object { + val LANGUAGE = AttributeKey("language") + val LINK = AttributeKey("link") } - - /** - * Gets the first attribute with the given [key]. - */ - @Suppress("UNCHECKED_CAST") - fun attribute(key: AttributeKey): V? = - attributes.firstOrNull { it.key == key }?.value as V - - @Suppress("UNCHECKED_CAST") - fun attributes(key: AttributeKey): List = - attributes - .filter { it.key == key } - .map { it.value as V } } + + /** + * Gets the first attribute with the given [key]. + */ + @Suppress("UNCHECKED_CAST") + fun attribute(key: AttributeKey): V? = + attributes.firstOrNull { it.key == key }?.value as V + + @Suppress("UNCHECKED_CAST") + fun attributes(key: AttributeKey): List = + attributes + .filter { it.key == key } + .map { it.value as V } } } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt index 7c5b0825b1..330b318c07 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt @@ -46,18 +46,16 @@ class TextContentTokenizer( ) override fun tokenize(data: Content.Element): List = listOf( - if (data.data is Content.Element.Text) { + if (data is Content.TextElement) { data.copy( - data = data.data.copy( - segments = data.data.segments.flatMap { tokenize(it) } - ) + segments = data.segments.flatMap { tokenize(it) } ) } else { data } ) - private fun tokenize(segment: Content.Element.Text.Segment): List = + private fun tokenize(segment: Content.TextElement.Segment): List = textTokenizerFactory(segment.language ?: defaultLanguage).tokenize(segment.text) .map { range -> segment.copy( diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt index d0b4089357..f6bc365d5e 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt @@ -21,7 +21,7 @@ import org.readium.r2.shared.publication.Link import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.html.cssSelector import org.readium.r2.shared.publication.services.content.Content -import org.readium.r2.shared.publication.services.content.Content.Element.Text +import org.readium.r2.shared.publication.services.content.Content.TextElement import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.Language import org.readium.r2.shared.util.mediatype.MediaType @@ -148,7 +148,7 @@ class HtmlResourceContentIterator( private var startIndex = 0 private var currentElement: Element? = null - private val segmentsAcc = mutableListOf() + private val segmentsAcc = mutableListOf() private var textAcc = StringBuilder() private var wholeRawTextAcc: String = "" private var elementRawTextAcc: String = "" @@ -183,7 +183,7 @@ class HtmlResourceContentIterator( if (href != null) { elements.add( - Content.Element( + Content.ImageElement( locator = baseLocator.copy( locations = Locator.Locations( otherLocations = buildMap { @@ -191,11 +191,9 @@ class HtmlResourceContentIterator( } ) ), - data = Content.Element.Image( - link = Link(href = href), - caption = null, // FIXME: Get the caption from figcaption - description = node.attr("alt").takeIf { it.isNotBlank() }, - ) + embeddedLink = Link(href = href), + caption = null, // FIXME: Get the caption from figcaption + description = node.attr("alt").takeIf { it.isNotBlank() }, ) ) } @@ -247,7 +245,7 @@ class HtmlResourceContentIterator( if (startElement != null && currentElement == startElement) { startIndex = elements.size } - elements.add(Content.Element( + elements.add(Content.TextElement( locator = baseLocator.copy( locations = Locator.Locations( otherLocations = buildMap { @@ -258,10 +256,8 @@ class HtmlResourceContentIterator( ), text = Locator.Text(highlight = elementRawTextAcc) ), - data = Text( - role = Text.Role.Body, - segments = segmentsAcc.toList() - ) + role = TextElement.Role.Body, + segments = segmentsAcc.toList() )) elementRawTextAcc = "" segmentsAcc.clear() @@ -283,7 +279,7 @@ class HtmlResourceContentIterator( } segmentsAcc.add( - Text.Segment( + TextElement.Segment( locator = baseLocator.copy( locations = Locator.Locations( otherLocations = buildMap { @@ -300,7 +296,7 @@ class HtmlResourceContentIterator( text = text, attributes = buildList { currentLanguage?.let { - add(Text.Segment.Attribute(Text.Segment.AttributeKey.LANGUAGE, Language(it))) + add(TextElement.Segment.Attribute(TextElement.Segment.AttributeKey.LANGUAGE, Language(it))) } }, ) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index c5532a93b7..98870f53e1 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -181,6 +181,8 @@ abstract class VisualReaderFragment : BaseReaderFragment(), VisualNavigator.List // Navigate to the currently spoken utterance. state.map { it.playingUtterance } .filterNotNull() + // Prevent jumping to many locations when the user skips repeatedly forward/backward. + .throttleLatest(500.milliseconds) .onEach { locator -> navigator.go(locator, animated = false) } From cd8c157a2c9361bacd6fdb0eb1a4b57dd04b276e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 14:08:32 +0200 Subject: [PATCH 47/59] Reorganize `Content` attributes --- .../publication/services/content/Content.kt | 138 ++++++++++-------- 1 file changed, 74 insertions(+), 64 deletions(-) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt index 5124a66cbf..0ffa624330 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt @@ -22,17 +22,21 @@ interface Content { * Represents a single semantic content element part of a publication. */ @ExperimentalReadiumApi - interface Element { + interface Element : AttributesHolder { /** * Locator targeting this element in the Publication. */ val locator: Locator } - /** An element which can be represented as human-readable text. */ + /** + * An element which can be represented as human-readable text. + * + * The default implementation returns the first accessibility label associated to the element. + */ interface TextualElement : Element { /** Human-readable text representation for this element. */ - val text: String? + val text: String? get() = accessibilityLabel } /** An element referencing an embedded external resource. */ @@ -41,45 +45,39 @@ interface Content { val embeddedLink: Link } - /** - * An audio clip. - * - * @param extras Additional metadata for extensions. - */ + /** An audio clip. */ data class AudioElement( override val locator: Locator, override val embeddedLink: Link, - val extras: Map = emptyMap(), - ) : EmbeddedElement + override val attributes: List> = emptyList(), + ) : EmbeddedElement, TextualElement - /** - * A video clip. - * - * @param extras Additional metadata for extensions. - */ + /** A video clip. */ data class VideoElement( override val locator: Locator, override val embeddedLink: Link, - val extras: Map = emptyMap(), - ) : EmbeddedElement + override val attributes: List> = emptyList(), + ) : EmbeddedElement, TextualElement /** * A bitmap image. * * @param caption Short piece of text associated with the image. * @param description Accessibility label. - * @param extras Additional metadata for extensions. */ data class ImageElement( override val locator: Locator, override val embeddedLink: Link, val caption: String?, val description: String?, - val extras: Map = emptyMap(), + override val attributes: List> = emptyList(), ) : EmbeddedElement, TextualElement { - override val text: String? - get() = caption?.takeIf { it.isNotBlank() } - ?: description + + override val text: String? get() = + // The caption might be a better text description than the accessibility label, when + // available. + caption?.takeIf { it.isNotBlank() } + ?: super.text } /** @@ -87,17 +85,16 @@ interface Content { * * @param role Purpose of this element in the broader context of the document. * @param segments Ranged portions of text with associated attributes. - * @param extras Additional metadata for extensions. */ data class TextElement( override val locator: Locator, val role: Role, val segments: List, - val extras: Map = emptyMap(), + override val attributes: List> = emptyList(), ) : TextualElement { override val text: String - get() = segments.joinToString { it.text } + get() = segments.joinToString(separator = "") { it.text } /** * Represents a purpose of an element in the broader context of the document. @@ -142,50 +139,63 @@ interface Content { data class Segment( val locator: Locator, val text: String, - val attributes: List>, - ) { - /** - * Language of the text, if any. - */ - val language: Language? - get() = attribute(AttributeKey.LANGUAGE) - - /** - * An attribute is an arbitrary key-value pair. - */ - data class Attribute( - val key: AttributeKey, - val value: V - ) + override val attributes: List>, + ) : AttributesHolder + } - /** - * An attribute key identifies uniquely an attribute. - * - * The [V] phantom type is there to perform static type checking when requesting an - * attribute. - */ - data class AttributeKey(val id: String) { - companion object { - val LANGUAGE = AttributeKey("language") - val LINK = AttributeKey("link") - } - } + /** + * An attribute is an arbitrary key-value metadata pair. + */ + data class Attribute( + val key: AttributeKey, + val value: V + ) - /** - * Gets the first attribute with the given [key]. - */ - @Suppress("UNCHECKED_CAST") - fun attribute(key: AttributeKey): V? = - attributes.firstOrNull { it.key == key }?.value as V - - @Suppress("UNCHECKED_CAST") - fun attributes(key: AttributeKey): List = - attributes - .filter { it.key == key } - .map { it.value as V } + /** + * An attribute key uniquely an attribute. + * + * The [V] phantom type is there to perform static type checking when requesting an attribute. + */ + data class AttributeKey(val id: String) { + companion object { + val ACCESSIBILITY_LABEL = AttributeKey("accessibilityLabel") + val LANGUAGE = AttributeKey("language") } } + /** + * An object associated with a list of attributes. + */ + interface AttributesHolder { + + /** + * Associated list of attributes. + */ + val attributes: List> + + val language: Language? + get() = attribute(AttributeKey.LANGUAGE) + + val accessibilityLabel: String? + get() = attribute(AttributeKey.ACCESSIBILITY_LABEL) + + /** + * Gets the first attribute with the given [key]. + */ + @Suppress("UNCHECKED_CAST") + fun attribute(key: AttributeKey): V? = + attributes.firstOrNull { it.key == key }?.value as V + + /** + * Gets all the attributes with the given [key]. + */ + @Suppress("UNCHECKED_CAST") + fun attributes(key: AttributeKey): List = + attributes + .filter { it.key == key } + .map { it.value as V } + } + /** * Iterates through a list of [Element] items asynchronously. */ From a6767e4058058004cd5891d677d072dffd5e4b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 15:32:08 +0200 Subject: [PATCH 48/59] Add documentation --- docs/guides/content.md | 188 ++++++++++++++++++ .../readium/r2/navigator/tts/TtsDirector.kt | 4 +- .../publication/services/content/Content.kt | 37 +--- .../services/content/ContentService.kt | 20 +- .../iterators/HtmlResourceContentIterator.kt | 2 +- .../r2/testapp/reader/VisualReaderFragment.kt | 1 + 6 files changed, 211 insertions(+), 41 deletions(-) create mode 100644 docs/guides/content.md diff --git a/docs/guides/content.md b/docs/guides/content.md new file mode 100644 index 0000000000..f18acdcfd3 --- /dev/null +++ b/docs/guides/content.md @@ -0,0 +1,188 @@ +# Extracting the content of a publication + +:warning: The described feature is still experimental and the implementation incomplete. + +Many high-level features require access to the raw content (text, media, etc.) of a publication, such as: + +* Text-to-speech +* Accessibility reader +* Basic search +* Full-text search indexing +* Image or audio indexes + +The `ContentService` provides a way to iterate through a publication's content, extracted as semantic elements. + +First, request the publication's `Content`, starting from a given `Locator`. If the locator is missing, the `Content` will be extracted from the beginning of the publication. + +```kotlin +val content = publication.content(startLocator) +if (content == null) { + // Abort as the content cannot be extracted +} +``` + +## Extracting the raw text content + +Getting the whole raw text of a publication is such a common use case that a helper is available on `Content`: + +```kotlin +val wholeText = content.text() +``` + +This is an expensive operation, proceed with care and cache the result if you need to reuse it. + +## Iterating through the content + +The individual `Content` elements can be iterated through with a regular `for` loop: + +```kotlin +for (element in content) { + // Process element +} +``` + +Alternatively, you can get the whole list of elements with `content.elements()`, or use the lower level APIs to iterate the content manually: + +```kotlin +val iterator = content.iterator() +while (iterator.hasNext()) { + val element = iterator.next() +} +``` + +Some `Content` implementations support bidirectional iterations. To iterate backwards, use: + +```kotlin +while (iterator.hasPrevious()) { + val element = iterator.hasPrevious() +} +``` + +## Processing the elements + +The `Content` iterator yields `Content.Element` objects representing a single semantic portion of the publication, such as a heading, a paragraph or an embedded image. + +Every element has a `locator` property targeting it in the publication. You can use the locator, for example, to navigate to the element or to draw a `Decoration` on top of it. + +```kotlin +navigator.go(element.locator) +``` + +### Types of elements + +Depending on the actual implementation of `Content.Element`, more properties are available to access the actual data. The toolkit ships with a number of default implementations for common types of elements. + +#### Embedded media + +The `Content.EmbeddedElement` interface is implemented by any element referencing an external resource. It contains an `embeddedLink` property you can use to get the actual content of the resource. + +```kotlin +if (element is Content.EmbeddedElement) { + val bytes = publication + .get(element.embeddedLink) + .read().getOrThrow() +} +``` + +Here are the default available implementations: + +* `Content.AudioElement` - audio clips +* `Content.VideoElement` - video clips +* `Content.ImageElement` - bitmap images, with the additional properties: + * `caption: String?` - figure caption + * `description: String?` - any associated accessibility label + +#### Text + +##### Textual elements + +The `Content.TextualElement` interface is implemented by any element which can be represented as human-readable text. This is useful when you want to extract the text content of a publication without caring for each individual type of elements. + +```kotlin +val wholeText = publication.content() + .elements() + .filterIsInstance() + .mapNotNull { it.text } + .joinToString(separator = "\n") +``` + +##### Text elements + +Actual text elements are instances of `Content.TextElement`, which represent a single block of text such as a heading, a paragraph or a list item. It is comprised of a `role` and a list of `segments`. + +The `role` is the nature of the text element in the document. For example a heading, body, footnote or a quote. It can be used to reconstruct part of the structure of the original document. + +A text element is composed of individual segments with their own `locator` and `attributes`. They are useful to associate attributes with a portion of a text element. For example, given the HTML paragraph: + +```html +

It is pronounced croissant.

+``` + +The following `TextElement` will be produced: + +```kotlin +TextElement( + segments = listOf( + Segment(text = "It is pronounced "), + Segment(text = "croissant", attributes = mapOf(LANGUAGE to "fr")), + Segment(text = ".") + ) +) +``` + +If you are not interested in the segment attributes, you can also use `element.text` to get the concatenated raw text. + +### Element attributes + +All types of `Content.Element` can have associated attributes. Custom `ContentService` implementations can use this as an extensibility point. + +## Use cases + +### An index of all images embedded in the publication + +This example extracts all the embedded images in the publication and displays them in a Jetpack Compose list. Clicking on an image jumps to its location in the publication. + +```kotlin +data class Item( + val locator: Locator, + val text: String?, + val bitmap: ImageBitmap? +) + +var images by remember { + mutableStateOf>(emptyList()) +} + +LaunchedEffect(Unit) { + images = checkNotNull(publication.content()) + .elements() + .filterIsInstance() + .map { element -> + Item( + locator = element.locator, + text = element.text, + bitmap = publication.get(element.embeddedLink) + .readAsBitmap().getOrNull()?.asImageBitmap() + ) + } +} + +LazyColumn { + items(images) { item -> + if (item.bitmap != null) { + Column( + modifier = Modifier.clickable { + navigator.go(item.locator) + } + ) { + Image(bitmap = item.bitmap, contentDescription = item.text) + Text(item.caption ?: "No caption") + } + } + } +} +``` + +## References + +* [Content Iterator proposal](https://github.com/readium/architecture/pull/177) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt index df67ae7a07..006a7f8f2b 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt @@ -99,7 +99,7 @@ class TtsDirector private constructor( * Returns whether the [publication] can be played with a [TtsDirector]. */ fun canSpeak(publication: Publication): Boolean = - publication.hasContent + publication.content() != null } @ExperimentalReadiumApi @@ -273,7 +273,7 @@ class TtsDirector private constructor( */ fun start(fromLocator: Locator? = null) { replacePlaybackJob { - publicationIterator = publication.content(fromLocator).iterator() + publicationIterator = publication.content(fromLocator)?.iterator() playNextUtterance(Direction.Forward) } } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt index 0ffa624330..c3c1b0b1af 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt @@ -241,6 +241,17 @@ interface Content { if (hasPrevious()) previous() else null } + /** + * Extracts the full raw text, or returns null if no text content can be found. + * + * @param separator Separator to use between individual elements. Defaults to newline. + */ + suspend fun text(separator: String = "\n"): String? = + elements() + .mapNotNull { (it as? TextualElement)?.text } + .joinToString(separator = separator) + .takeIf { it.isNotBlank() } + /** * Creates a new iterator for this content. */ @@ -256,29 +267,3 @@ interface Content { } } } - -/** - * An empty [Content]. - */ -@ExperimentalReadiumApi -class EmptyContent : Content { - override fun iterator(): Content.Iterator = EmptyContentIterator() -} - -/** - * An empty [Content.Iterator]. - */ -@ExperimentalReadiumApi -class EmptyContentIterator : Content.Iterator { - override suspend fun hasNext(): Boolean = false - - override fun next(): Content.Element { - throw IllegalStateException("Called next() without a successful call to hasPrevious() first") - } - - override suspend fun hasPrevious(): Boolean = false - - override fun previous(): Content.Element { - throw IllegalStateException("Called previous() without a successful call to hasPrevious() first") - } -} diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentService.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentService.kt index 6aea48e017..b53d3ce3fc 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentService.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentService.kt @@ -21,24 +21,20 @@ import org.readium.r2.shared.util.Ref interface ContentService : Publication.Service { /** * Creates a [Content] starting from the given [start] location. + * + * The implementation must be fast and non-blocking. Do the actual extraction inside the + * [Content] implementation. */ - suspend fun content(start: Locator?): Content + fun content(start: Locator?): Content? } -/** - * Returns whether this [Publication] supports extracting its content. - */ -@ExperimentalReadiumApi -val Publication.hasContent: Boolean - get() = contentService != null - /** * Creates a [Content] starting from the given [start] location, or the beginning of the * publication when missing. */ @ExperimentalReadiumApi -suspend fun Publication.content(start: Locator? = null): Content = - contentService?.content(start) ?: EmptyContent() +fun Publication.content(start: Locator? = null): Content? = + contentService?.content(start) @ExperimentalReadiumApi private val Publication.contentService: ContentService? @@ -68,8 +64,8 @@ class DefaultContentService( } } - override suspend fun content(start: Locator?): Content { - val publication = publication() ?: return EmptyContent() + override fun content(start: Locator?): Content? { + val publication = publication() ?: return null return ContentImpl(publication, start) } diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt index f6bc365d5e..9d79857190 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt @@ -296,7 +296,7 @@ class HtmlResourceContentIterator( text = text, attributes = buildList { currentLanguage?.let { - add(TextElement.Segment.Attribute(TextElement.Segment.AttributeKey.LANGUAGE, Language(it))) + add(Content.Attribute(Content.AttributeKey.LANGUAGE, Language(it))) } }, ) diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt index 98870f53e1..26b1a7eb3d 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/VisualReaderFragment.kt @@ -51,6 +51,7 @@ import org.readium.r2.testapp.reader.tts.TtsViewModel import org.readium.r2.testapp.utils.* import org.readium.r2.testapp.utils.extensions.confirmDialog import org.readium.r2.testapp.utils.extensions.throttleLatest +import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.seconds /* From fe3262d9663ffb34da9f610dd33c5859f9ac610c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 17:30:44 +0200 Subject: [PATCH 49/59] Remove `Failure` state to simplify --- .../org/readium/r2/navigator/tts/TtsDirector.kt | 13 +++---------- .../readium/r2/testapp/reader/tts/TtsViewModel.kt | 2 ++ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt index 006a7f8f2b..3ae096b8e5 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt @@ -154,11 +154,6 @@ class TtsDirector private constructor( * [range] will be regularly updated while the [utterance] is being played. */ data class Playing(val utterance: Utterance, val range: Locator? = null) : State() - - /** - * The [TtsDirector] was stopped by a critical [error]. - */ - data class Failure(val error: Exception) : State() } private val _state = MutableStateFlow(State.Stopped) @@ -187,10 +182,8 @@ class TtsDirector private constructor( val engine: E by lazy { engineFactory(object : TtsEngine.Listener { override fun onEngineError(error: TtsEngine.Exception) { - replacePlaybackJob { - listener?.onError(Exception.Engine(error)) - _state.value = State.Failure(Exception.Engine(error)) - } + listener?.onError(Exception.Engine(error)) + stop() } override fun onAvailableVoicesChange(voices: List) { @@ -322,7 +315,7 @@ class TtsDirector private constructor( */ fun pauseOrResume() { when (state.value) { - is State.Failure, State.Stopped -> return + is State.Stopped -> return is State.Playing -> pause() is State.Paused -> resume() } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 86ce0d654c..0fa5903bb9 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -30,6 +30,8 @@ import org.readium.r2.navigator.tts.TtsDirector.State as TtsState /** * View model controlling the text-to-speech director. + * + * Note: This is not an Android [ViewModel], but it is a component of [ReaderViewModel]. */ @OptIn(ExperimentalReadiumApi::class) class TtsViewModel private constructor( From 89c574dffb2a03a53a518a9e681a8734d2937862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 17:40:36 +0200 Subject: [PATCH 50/59] Refactor the configuration --- .../r2/navigator/tts/AndroidTtsEngine.kt | 4 +- .../readium/r2/navigator/tts/TtsDirector.kt | 38 ++++++++++++------- .../org/readium/r2/navigator/tts/TtsEngine.kt | 8 ++-- .../r2/testapp/reader/tts/TtsControls.kt | 10 ++--- .../r2/testapp/reader/tts/TtsViewModel.kt | 2 +- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index a2b7543af2..f6870a2858 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -81,7 +81,7 @@ class AndroidTtsEngine( } } - override val rateRange: ClosedRange = 0.1..4.0 + override val rateMultiplierRange: ClosedRange = 0.1..4.0 override var availableVoices: List = emptyList() private set(value) { @@ -197,7 +197,7 @@ class AndroidTtsEngine( * Setups the [engine] using the [utterance]'s configuration. */ private fun TextToSpeech.setup() { - setSpeechRate(utterance.rate.toFloat()) + setSpeechRate(utterance.rateMultiplier.toFloat()) utterance.voiceOrLanguage .onLeft { voice -> diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt index 3ae096b8e5..b4ee66646a 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt @@ -208,16 +208,16 @@ class TtsDirector private constructor( * User configuration for the text-to-speech engine. * * @param defaultLanguage Language overriding the publication one. - * @param voice Voice used to speak the utterances. - * @param rate Speech rate (speed) of the voice. Normal is 1.0. See [rateRange] for the - * range of values supported by the [TtsEngine]. + * @param voiceId Identifier for the voice used to speak the utterances. + * @param rateMultiplier Multiplier for the voice speech rate. Normal is 1.0. See [rateMultiplierRange] + * for the range of values supported by the [TtsEngine]. * @param extras Extensibility for custom TTS engines. */ @ExperimentalReadiumApi data class Configuration( val defaultLanguage: Language? = null, - val voice: TtsEngine.Voice? = null, - val rate: Double = 1.0, + val voiceId: String? = null, + val rateMultiplier: Double = 1.0, val extras: Any? = null ) @@ -235,15 +235,15 @@ class TtsDirector private constructor( */ fun setConfig(config: Configuration) { _config.value = config.copy( - rate = config.rate.coerceIn(engine.rateRange), + rateMultiplier = config.rateMultiplier.coerceIn(engine.rateMultiplierRange), ) } /** - * Range for the speech rate. Normal is 1.0. + * Range for the speech rate multiplier. Normal is 1.0. */ - val rateRange: ClosedRange - get() = engine.rateRange + val rateMultiplierRange: ClosedRange + get() = engine.rateMultiplierRange private val _availableVoices = MutableStateFlow>(emptyList()) @@ -258,8 +258,19 @@ class TtsDirector private constructor( * This can be used to restore the user selected voice after storing it in the shared * preferences. */ - fun voiceWithId(id: String): TtsEngine.Voice? = - engine.voiceWithId(id) + fun voiceWithId(id: String): TtsEngine.Voice? { + val voice = lastUsedVoice?.takeIf { it.id == id } + ?: engine.voiceWithId(id) + ?: return null + + lastUsedVoice = voice + return voice + } + + /** + * Cache for the last requested voice, for performance. + */ + private var lastUsedVoice: TtsEngine.Voice? = null /** * (Re)starts the TTS from the given locator or the beginning of the publication. @@ -375,7 +386,7 @@ class TtsDirector private constructor( .speak( utterance = TtsEngine.Utterance( text = utterance.text, - rate = config.value.rate, + rateMultiplier = config.value.rateMultiplier, voiceOrLanguage = utterance.voiceOrLanguage() ), onSpeakRange = { range -> @@ -403,7 +414,8 @@ class TtsDirector private constructor( private fun Utterance.voiceOrLanguage(): Either { // User selected voice, if it's compatible with the utterance language. // Or fallback on the languages. - val voice = config.value.voice + val voice = config.value.voiceId + ?.let { voiceWithId(it) } ?.takeIf { language == null || it.language.removeRegion() == language.removeRegion() } return ( diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index e9f915398e..bce95e3f16 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -76,14 +76,14 @@ interface TtsEngine : SuspendingCloseable { * An utterance is an arbitrary text (e.g. sentence) that can be synthesized by the TTS engine. * * @param text Text to be spoken. - * @param rate Speed of the voice. + * @param rateMultiplier Multiplier for the speech rate. * @param voiceOrLanguage Either an explicit voice or the language of the text. If a language * is provided, the default voice for this language will be used. */ @ExperimentalReadiumApi data class Utterance( val text: String, - val rate: Double, + val rateMultiplier: Double, val voiceOrLanguage: Either ) { val language: Language = @@ -130,9 +130,9 @@ interface TtsEngine : SuspendingCloseable { ): TtsTry /** - * Supported range for the speech rate. + * Supported range for the speech rate multiplier. */ - val rateRange: ClosedRange + val rateMultiplierRange: ClosedRange /** * List of available synthesizer voices. diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index e77a51e7f9..1b272f5f3a 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -161,12 +161,12 @@ private fun TtsSettingsDialog( SelectorListItem( label = stringResource(R.string.tts_rate), values = availableRates, - selection = config.rate, + selection = config.rateMultiplier, titleForValue = { rate -> DecimalFormat("x#.##").format(rate) }, onSelected = { - onConfigChange(config.copy(rate = it)) + onConfigChange(config.copy(rateMultiplier = it)) } ) } @@ -179,15 +179,15 @@ private fun TtsSettingsDialog( language?.locale?.displayName ?: stringResource(R.string.auto) }, - onSelected = { onConfigChange(config.copy(defaultLanguage = it, voice = null)) } + onSelected = { onConfigChange(config.copy(defaultLanguage = it, voiceId = null)) } ) SelectorListItem( label = stringResource(R.string.tts_voice), values = availableVoices, - selection = config.voice, + selection = availableVoices.firstOrNull { it.id == config.voiceId }, titleForValue = { it?.name ?: it?.id ?: stringResource(R.string.auto) }, - onSelected = { onConfigChange(config.copy(voice = it)) } + onSelected = { onConfigChange(config.copy(voiceId = it?.id)) } ) } } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 0fa5903bb9..7a3f80c6c6 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -145,7 +145,7 @@ class TtsViewModel private constructor( ) { config, langs, voices -> Settings( config = config, - rateRange = director.rateRange, + rateRange = director.rateMultiplierRange, availableLanguages = langs, availableVoices = voices ) From a6b700137ab9692db9e7366c0cbb31a885f61001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 18:51:57 +0200 Subject: [PATCH 51/59] Add TTS guide --- docs/guides/tts.md | 230 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 docs/guides/tts.md diff --git a/docs/guides/tts.md b/docs/guides/tts.md new file mode 100644 index 0000000000..8a92cded70 --- /dev/null +++ b/docs/guides/tts.md @@ -0,0 +1,230 @@ +# Text-to-speech + +:warning: TTS is an experimental feature which is not yet implemented for all formats. + +Text-to-speech can be used to read aloud a publication using a synthetic voice. The Readium toolkit ships with a TTS implementation based on the native [Android TTS engine](https://developer.android.com/reference/android/speech/tts/TextToSpeech), but it is opened for extension if you want to use a different TTS engine. + +## Glossary + +* **engine** – a TTS engine takes an utterance and transforms it into audio using a synthetic voice +* **rate** - speech speed when synthesizing utterances +* **tokenizer** - algorithm splitting the publication text content into individual utterances, usually by sentences +* **utterance** - a single piece of text played by a TTS engine, such as a sentence +* **voice** – a synthetic voice is used by a TTS engine to speak a text using rules pertaining to the voice's language and region + +## Reading a publication aloud + +To read a publication, you need to create an instance of `TtsDirector`. A director orchestrates the playback of the whole publication using a TTS engine. Not all publications can be read using TTS, therefore the constructor returns a nullable object. You can also check whether a publication can be played beforehand using `TtsDirector.canSpeak(publication)`. + +```kotlin +val director = TtsDirector( + publication = publication, + config = TtsDirector.Configuration( + rateMultiplier = 1.25 + ), + listener = object : TtsDirector.Listener { ... } +) +``` + +Then, begin the playback from a given starting `Locator`. When missing, the playback will start from the beginning of the publication. + +```kotlin +director.start() +``` + +You should now hear the TTS engine play the utterances visible on the screen. `TtsDirector` provides the APIs necessary to control the playback from the app: + +* `stop()` - stops the playback ; requires start to be called again +* `pause()` - interrupts the playback temporarily +* `resume()` - resumes the playback where it was paused +* `pauseOrResume()` - toggles the pause +* `previous()` - skips to the previous utterance +* `next()` - skips to the next utterance + +Look at `TtsControls` in the Test App for an example of a view calling these APIs. + +:warning: Once you are done with the TTS director, you should call `close()` to release held resources. + +## Observing the playback state + +The `TtsDirector` should be the single source of truth to represent the playback state in your user interface. You can observe the `director.state` property to keep your user interface synchronized with the playback. The possible states are: + +* `Stopped` when idle and waiting for a call to `start()`. +* `Paused(utterance: Utterance)` when interrupted while playing `utterance`. +* `Playing(utterance: Utterance, range: Locator?)` when speaking `utterance`. This state is updated repeatedly while the utterance is spoken, updating the `range` property with the portion of utterance being played (usually the current word). + +When pairing the `TtsDirector` with a `Navigator`, you can use the `utterance.locator` and `range` properties to highlight spoken utterances and turn pages automatically. + +## Configuring the TTS + +The `TtsDirector` offers some options to configure the TTS engine. Note that the support of each configuration option depends on the used TTS engine. + +Update the configuration by setting it directly. The configuration is not applied right away but for the next utterance. + +```kotlin +director.setConfig(director.config.copy( + defaultLanguage = Language(Locale.FRENCH) +)) +``` + +To keep your settings user interface updated when the configuration changes, observe the `TtsDirector.config` property. Look at `TtsControls` in the Test App for an example of a TTS settings screen. + +### Default language + +The language used by the director is important, as it determines which TTS voices are used and the rules to tokenize the publication text content. + +By default, `TtsDirector` will use any language explicitly set on a text element (e.g. with `lang="fr"` in HTML) and falls back on the global language declared in the publication manifest. However, you can override the fallback language with `Configuration.defaultLanguage` which is useful when the publication language is incorrect or missing. + +### Speech rate + +The `rateMultiplier` configuration sets the speech speed as a multiplier, 1.0 being the normal speed. The available range depends on the TTS engine and can be queried with `director.rateMultiplierRange`. + +```kotlin +TtsDirector.Configuration( + rateMultiplier = multiplier.coerceIn(director.rateMultiplierRange) +) +``` + +### Voice + +The `voice` setting can be used to change the synthetic voice used by the engine. To get the available list, use `director.availableVoices`. Note that the available voices can change during runtime, observe `availableVoices` to keep your interface up to date. + +To restore a user-selected voice, persist the unique voice identifier returned by `voice.id`. + +Users do not expect to see all available voices at all time, as they depend on the selected language. You can group the voices by their language and filter them by the selected language using the following snippet. + +```kotlin +// Supported voices grouped by their language. +val voicesByLanguage: Flow>> = + director.availableVoices + .map { voices -> voices.groupBy { it.language } } + +// Supported voices for the language selected in the configuration. +val voicesForSelectedLanguage: Flow> = + combine( + director.config.map { it.defaultLanguage }, + voicesByLanguage, + ) { language, voices -> + language + ?.let { voices[it] } + ?.sortedBy { it.name ?: it.id } + ?: emptyList() + } +``` + +## Installing missing voice data + +:point_up: This only applies if you use the default `AndroidTtsEngine`. + +Sometimes the device does not have access to all the data required by a selected voice, in which case the user needs to download it manually. You can catch the `TtsEngine.Exception.LanguageSupportIncomplete` error and call `director.engine.requestInstallMissingVoice()` to start the system voice download activity. + +```kotlin +val director = TtsDirector(context, publication) + +director.listener = object : TtsDirector.Listener { + override fun onUtteranceError( utterance: TtsDirector.Utterance, error: TtsDirector.Exception) { + handle(error) + } + + override fun onError(error: TtsDirector.Exception) { + handle(error) + } + + private fun handle(error: TtsDirector.Exception) { + when (error) { + is TtsDirector.Exception.Engine -> + when (val err = error.error) { + is TtsEngine.Exception.LanguageSupportIncomplete -> { + director.engine.requestInstallMissingVoice(context) + } + + else -> { + ... + } + } + } + } + } +``` + +## Synchronizing the TTS with a Navigator + +While `TtsDirector` is completely independent from `Navigator` and can be used to play a publication in the background, most apps prefer to render the publication while it is being read aloud. The `Locator` core model is used as a means to synchronize the TTS director with the navigator. + +### Starting the TTS from the visible page + +`TtsDirector.start()` takes a starting `Locator` for parameter. You can use it to begin the playback from the currently visible page in a `VisualNavigator` using `firstVisibleElementLocator()`. + +```kotlin +val start = (navigator as? VisualNavigator)?.firstVisibleElementLocator() +director.start(fromLocator = start) +``` + +### Highlighting the currently spoken utterance + +If you want to highlight or underline the current utterance on the page, you can apply a `Decoration` on the utterance locator with a `DecorableNavigator`. + +```kotlin +val navigator: DecorableNavigator + +director.state + .map { (it as? State.Playing)?.utterance } + .distinctUntilChanged() + .onEach { utterance -> + navigator.applyDecorations(listOf( + Decoration( + id = "tts-utterance", + locator = utterance.locator, + style = Decoration.Style.Highlight(tint = Color.RED) + ) + ), group = "tts") + } + .launchIn(scope) +``` + +### Turning pages automatically + +You can use the same technique as described above to automatically synchronize the `Navigator` with the played utterance, using `navigator.go(utterance.locator)`. + +However, this will not turn pages mid-utterance, which can be annoying when speaking a long sentence spanning two pages. To address this, you can go to the `State.Playing.range` locator instead, which is updated regularly while speaking each word of an utterance. Note that jumping to the `range` locator for every word can severely impact performances. To alleviate this, you can throttle the flow using [`throttleLatest`](https://github.com/Kotlin/kotlinx.coroutines/issues/1107#issuecomment-1083076517). + +```kotlin +director.state + .filterIsInstance() + .map { it.range ?: it.utterance.locator } + .throttleLatest(1.seconds) + .onEach { locator -> + navigator.go(locator, animated = false) + } + .launchIn(scope) +``` + +## Using a custom utterance tokenizer + +By default, the `TtsDirector` will split the publication text into sentences to create the utterances. You can customize this for finer or coarser utterances using a different tokenizer. + +For example, this will speak the content word-by-word: + +```kotlin +val director = TtsDirector(context, publication, + tokenizerFactory = { language -> + TextContentTokenizer( + defaultLanguage = language, + unit = TextUnit.Word + ) + } +) +``` + +For completely custom tokenizing or to improve the existing tokenizers, you can implement your own `ContentTokenizer`. + +## Using a custom TTS engine + +`TtsDirector` can be used with any TTS engine, provided they implement the `TtsEngine` interface. Take a look at `AndroidTtsEngine` for an example implementation. + +```kotlin +val director = TtsDirector(publication, + engineFactory = { listener -> MyCustomEngine(listener) } +) +``` + From 0474f976b49fec635be7b3e08ae7a1b7ac8623b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 18:58:36 +0200 Subject: [PATCH 52/59] Update the changelog --- CHANGELOG.md | 7 ++++++- mkdocs.yml | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ab053d1b8..fd1cf38812 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ All notable changes to this project will be documented in this file. Take a look ### Added +#### Shared + +* Extract the raw content (text, images, etc.) of a publication. [Take a look at the user guide](docs/guides/content.md). + #### Navigator * Improved Javascript support in the EPUB navigator: @@ -34,7 +38,8 @@ All notable changes to this project will be documented in this file. Take a look ```kotlin val result = navigator.evaluateJavascript("customInterface.api('argument')") ``` -* New [PSPDFKit](readium/adapters/pspdfkit) adapter for rendering PDF documents. +* New [PSPDFKit](readium/adapters/pspdfkit) adapter for rendering PDF documents. [Take a look at the user guide](docs/guides/pdf.md). +* A brand new text-to-speech implementation. [Take a look at the user guide](docs/guides/tts.md). ### Changed diff --git a/mkdocs.yml b/mkdocs.yml index d239200e9a..9b369a9838 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -45,6 +45,8 @@ nav: - Migration Guide: migration-guide.md - User Guides: - PDF Support: guides/pdf.md + - Text-to-speech: guides/tts.md + - Extracting the content of a publication: guides/content.md - API Reference: - Shared: readium/shared/index.md - Streamer: readium/streamer/index.md From efbf37be1aa0c2fcdccde3505437004c651f734a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 19:19:15 +0200 Subject: [PATCH 53/59] Remove `Content.ImageElement.description --- docs/guides/content.md | 7 +++---- .../r2/shared/publication/services/content/Content.kt | 2 -- .../content/iterators/HtmlResourceContentIterator.kt | 11 +++++++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/docs/guides/content.md b/docs/guides/content.md index f18acdcfd3..08a6e78efa 100644 --- a/docs/guides/content.md +++ b/docs/guides/content.md @@ -29,7 +29,7 @@ Getting the whole raw text of a publication is such a common use case that a hel val wholeText = content.text() ``` -This is an expensive operation, proceed with care and cache the result if you need to reuse it. +This is an expensive operation, proceed with caution and cache the result if you need to reuse it. ## Iterating through the content @@ -88,9 +88,8 @@ Here are the default available implementations: * `Content.AudioElement` - audio clips * `Content.VideoElement` - video clips -* `Content.ImageElement` - bitmap images, with the additional properties: - * `caption: String?` - figure caption - * `description: String?` - any associated accessibility label +* `Content.ImageElement` - bitmap images, with the additional property: + * `caption: String?` - figure caption, when available #### Text diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt index c3c1b0b1af..4b702d6872 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/Content.kt @@ -63,13 +63,11 @@ interface Content { * A bitmap image. * * @param caption Short piece of text associated with the image. - * @param description Accessibility label. */ data class ImageElement( override val locator: Locator, override val embeddedLink: Link, val caption: String?, - val description: String?, override val attributes: List> = emptyList(), ) : EmbeddedElement, TextualElement { diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt index 9d79857190..0cfca0f4a5 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/iterators/HtmlResourceContentIterator.kt @@ -21,6 +21,8 @@ import org.readium.r2.shared.publication.Link import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.html.cssSelector import org.readium.r2.shared.publication.services.content.Content +import org.readium.r2.shared.publication.services.content.Content.Attribute +import org.readium.r2.shared.publication.services.content.Content.AttributeKey import org.readium.r2.shared.publication.services.content.Content.TextElement import org.readium.r2.shared.util.Href import org.readium.r2.shared.util.Language @@ -193,7 +195,12 @@ class HtmlResourceContentIterator( ), embeddedLink = Link(href = href), caption = null, // FIXME: Get the caption from figcaption - description = node.attr("alt").takeIf { it.isNotBlank() }, + attributes = buildList { + val alt = node.attr("alt").takeIf { it.isNotBlank() } + if (alt != null) { + add(Attribute(AttributeKey.ACCESSIBILITY_LABEL, alt)) + } + } ) ) } @@ -296,7 +303,7 @@ class HtmlResourceContentIterator( text = text, attributes = buildList { currentLanguage?.let { - add(Content.Attribute(Content.AttributeKey.LANGUAGE, Language(it))) + add(Attribute(Content.AttributeKey.LANGUAGE, Language(it))) } }, ) From 2a4c5186046f740d096acdc8d8e72f75764001f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Thu, 7 Jul 2022 19:39:04 +0200 Subject: [PATCH 54/59] Fix user guides --- docs/guides/content.md | 25 +++++++++++++------------ docs/guides/tts.md | 10 +++++----- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/docs/guides/content.md b/docs/guides/content.md index 08a6e78efa..003864f19c 100644 --- a/docs/guides/content.md +++ b/docs/guides/content.md @@ -152,18 +152,19 @@ var images by remember { mutableStateOf>(emptyList()) } -LaunchedEffect(Unit) { - images = checkNotNull(publication.content()) - .elements() - .filterIsInstance() - .map { element -> - Item( - locator = element.locator, - text = element.text, - bitmap = publication.get(element.embeddedLink) - .readAsBitmap().getOrNull()?.asImageBitmap() - ) - } +LaunchedEffect(publication) { + publication.content()?.let { content -> + images = content.elements() + .filterIsInstance() + .map { element -> + Item( + locator = element.locator, + text = element.caption, + bitmap = publication.get(element.embeddedLink) + .readAsBitmap().getOrNull()?.asImageBitmap() + ) + } + } } LazyColumn { diff --git a/docs/guides/tts.md b/docs/guides/tts.md index 8a92cded70..f54793b9b4 100644 --- a/docs/guides/tts.md +++ b/docs/guides/tts.md @@ -7,7 +7,7 @@ Text-to-speech can be used to read aloud a publication using a synthetic voice. ## Glossary * **engine** – a TTS engine takes an utterance and transforms it into audio using a synthetic voice -* **rate** - speech speed when synthesizing utterances +* **rate** - speech speed of a synthetic voice * **tokenizer** - algorithm splitting the publication text content into individual utterances, usually by sentences * **utterance** - a single piece of text played by a TTS engine, such as a sentence * **voice** – a synthetic voice is used by a TTS engine to speak a text using rules pertaining to the voice's language and region @@ -32,7 +32,7 @@ Then, begin the playback from a given starting `Locator`. When missing, the play director.start() ``` -You should now hear the TTS engine play the utterances visible on the screen. `TtsDirector` provides the APIs necessary to control the playback from the app: +You should now hear the TTS engine speak the utterances from the beginning. `TtsDirector` provides the APIs necessary to control the playback from the app: * `stop()` - stops the playback ; requires start to be called again * `pause()` - interrupts the playback temporarily @@ -57,7 +57,7 @@ When pairing the `TtsDirector` with a `Navigator`, you can use the `utterance.lo ## Configuring the TTS -The `TtsDirector` offers some options to configure the TTS engine. Note that the support of each configuration option depends on the used TTS engine. +The `TtsDirector` offers some options to configure the TTS engine. Note that the support of each configuration option depends on the TTS engine used. Update the configuration by setting it directly. The configuration is not applied right away but for the next utterance. @@ -67,13 +67,13 @@ director.setConfig(director.config.copy( )) ``` -To keep your settings user interface updated when the configuration changes, observe the `TtsDirector.config` property. Look at `TtsControls` in the Test App for an example of a TTS settings screen. +To keep your settings user interface up to date when the configuration changes, observe the `TtsDirector.config` property. Look at `TtsControls` in the Test App for an example of a TTS settings screen. ### Default language The language used by the director is important, as it determines which TTS voices are used and the rules to tokenize the publication text content. -By default, `TtsDirector` will use any language explicitly set on a text element (e.g. with `lang="fr"` in HTML) and falls back on the global language declared in the publication manifest. However, you can override the fallback language with `Configuration.defaultLanguage` which is useful when the publication language is incorrect or missing. +By default, `TtsDirector` will use any language explicitly set on a text element (e.g. with `lang="fr"` in HTML) and fall back on the global language declared in the publication manifest. You can override the fallback language with `Configuration.defaultLanguage` which is useful when the publication language is incorrect or missing. ### Speech rate From 2489a6cec8f121f4db4feaa51b78ba7916549b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Fri, 8 Jul 2022 09:02:14 +0200 Subject: [PATCH 55/59] Fix Groovy snippets highlighting --- README.md | 6 +++--- docs/migration-guide.md | 2 +- readium/adapters/pdfium/README.md | 2 +- readium/adapters/pspdfkit/README.md | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f3985bd0f8..f3276d8a2d 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Readium modules are distributed through [JitPack](https://jitpack.io/#readium/ko Make sure that you have the `$readium_version` property set in your root `build.gradle` and add the JitPack repository. -```gradle +```groovy buildscript { ext.readium_version = '2.2.0' } @@ -39,7 +39,7 @@ allprojects { Then, add the dependencies to the Readium modules you need in your app's `build.gradle`. -```gradle +```groovy dependencies { implementation "com.github.readium.kotlin-toolkit:readium-shared:$readium_version" implementation "com.github.readium.kotlin-toolkit:readium-streamer:$readium_version" @@ -61,7 +61,7 @@ git submodule add https://github.com/readium/kotlin-toolkit.git Then, add the following to your project's `settings.gradle` file, altering the paths if needed. Keep only the modules you want to use. -```gradle +```groovy include ':readium:shared' project(':readium:shared').projectDir = file('kotlin-toolkit/readium/shared') diff --git a/docs/migration-guide.md b/docs/migration-guide.md index 060499eed9..9b41473a92 100644 --- a/docs/migration-guide.md +++ b/docs/migration-guide.md @@ -16,7 +16,7 @@ If you wish to keep using the open source library [PdfiumAndroid](https://github First, add the new dependency in your app's `build.gradle`. -```gradle +```groovy dependencies { implementation "com.github.readium.kotlin-toolkit:readium-adapter-pdfium:$readium_version" // Or, if you need only the parser but not the navigator: diff --git a/readium/adapters/pdfium/README.md b/readium/adapters/pdfium/README.md index 0efdf866e5..fc40aac8c4 100644 --- a/readium/adapters/pdfium/README.md +++ b/readium/adapters/pdfium/README.md @@ -13,7 +13,7 @@ A better alternative when possible is to use the commercial library [PSPDFKit](. Follow the same setup instructions as the core Readium toolkit, then add this new dependency in your app's `build.gradle`. -```gradle +```groovy dependencies { implementation "com.github.readium.kotlin-toolkit:readium-adapter-pdfium:$readium_version" // Or, if you need only the parser but not the navigator: diff --git a/readium/adapters/pspdfkit/README.md b/readium/adapters/pspdfkit/README.md index 5ca93d25fe..e6023e9bb5 100644 --- a/readium/adapters/pspdfkit/README.md +++ b/readium/adapters/pspdfkit/README.md @@ -8,7 +8,7 @@ If you are looking for a free, open source PDF adapter, take a look at [PdfiumAn Follow the same setup instructions as the core Readium toolkit, then add this new dependency in your app's `build.gradle`. -```gradle +```groovy dependencies { implementation "com.github.readium.kotlin-toolkit:readium-adapter-pspdfkit:$readium_version" // Or, if you need only the parser but not the navigator: @@ -18,7 +18,7 @@ dependencies { This adapter requires PSPDFKit's maven repository in your root `build.gradle`: -```gradle +```groovy allprojects { repositories { maven { url "https://customers.pspdfkit.com/maven" } From 92e97b4ddc44bd7fd8e2bf7cfacd08cbf5ad0c45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Fri, 8 Jul 2022 09:31:46 +0200 Subject: [PATCH 56/59] Rename `TtsDirector` into `PublicationSpeechSynthesizer` --- docs/guides/tts.md | 74 +++++++++---------- ...tor.kt => PublicationSpeechSynthesizer.kt} | 33 +++++---- .../org/readium/r2/navigator/tts/TtsEngine.kt | 2 +- .../readium/r2/shared/publication/Metadata.kt | 6 -- .../services/content/ContentTokenizer.kt | 6 -- .../r2/testapp/reader/tts/TtsControls.kt | 2 +- .../r2/testapp/reader/tts/TtsViewModel.kt | 64 ++++++++-------- 7 files changed, 88 insertions(+), 99 deletions(-) rename readium/navigator/src/main/java/org/readium/r2/navigator/tts/{TtsDirector.kt => PublicationSpeechSynthesizer.kt} (92%) diff --git a/docs/guides/tts.md b/docs/guides/tts.md index f54793b9b4..a84b28f7da 100644 --- a/docs/guides/tts.md +++ b/docs/guides/tts.md @@ -14,25 +14,25 @@ Text-to-speech can be used to read aloud a publication using a synthetic voice. ## Reading a publication aloud -To read a publication, you need to create an instance of `TtsDirector`. A director orchestrates the playback of the whole publication using a TTS engine. Not all publications can be read using TTS, therefore the constructor returns a nullable object. You can also check whether a publication can be played beforehand using `TtsDirector.canSpeak(publication)`. +To read a publication, you need to create an instance of `PublicationSpeechSynthesizer`. It orchestrates the rendition of a publication by iterating through its content, splitting it into individual utterances using a `ContentTokenizer`, then using a `TtsEngine` to read them aloud. Not all publications can be read using TTS, therefore the constructor returns a nullable object. You can also check whether a publication can be played beforehand using `PublicationSpeechSynthesizer.canSpeak(publication)`. ```kotlin -val director = TtsDirector( +val synthesizer = PublicationSpeechSynthesizer( publication = publication, - config = TtsDirector.Configuration( + config = PublicationSpeechSynthesizer.Configuration( rateMultiplier = 1.25 ), - listener = object : TtsDirector.Listener { ... } + listener = object : PublicationSpeechSynthesizer.Listener { ... } ) ``` Then, begin the playback from a given starting `Locator`. When missing, the playback will start from the beginning of the publication. ```kotlin -director.start() +synthesizer.start() ``` -You should now hear the TTS engine speak the utterances from the beginning. `TtsDirector` provides the APIs necessary to control the playback from the app: +You should now hear the TTS engine speak the utterances from the beginning. `PublicationSpeechSynthesizer` provides the APIs necessary to control the playback from the app: * `stop()` - stops the playback ; requires start to be called again * `pause()` - interrupts the playback temporarily @@ -43,51 +43,51 @@ You should now hear the TTS engine speak the utterances from the beginning. `Tts Look at `TtsControls` in the Test App for an example of a view calling these APIs. -:warning: Once you are done with the TTS director, you should call `close()` to release held resources. +:warning: Once you are done with the synthesizer, you should call `close()` to release held resources. ## Observing the playback state -The `TtsDirector` should be the single source of truth to represent the playback state in your user interface. You can observe the `director.state` property to keep your user interface synchronized with the playback. The possible states are: +The `PublicationSpeechSynthesizer` should be the single source of truth to represent the playback state in your user interface. You can observe the `synthesizer.state` property to keep your user interface synchronized with the playback. The possible states are: * `Stopped` when idle and waiting for a call to `start()`. * `Paused(utterance: Utterance)` when interrupted while playing `utterance`. * `Playing(utterance: Utterance, range: Locator?)` when speaking `utterance`. This state is updated repeatedly while the utterance is spoken, updating the `range` property with the portion of utterance being played (usually the current word). -When pairing the `TtsDirector` with a `Navigator`, you can use the `utterance.locator` and `range` properties to highlight spoken utterances and turn pages automatically. +When pairing the `PublicationSpeechSynthesizer` with a `Navigator`, you can use the `utterance.locator` and `range` properties to highlight spoken utterances and turn pages automatically. ## Configuring the TTS -The `TtsDirector` offers some options to configure the TTS engine. Note that the support of each configuration option depends on the TTS engine used. +The `PublicationSpeechSynthesizer` offers some options to configure the TTS engine. Note that the support of each configuration option depends on the TTS engine used. Update the configuration by setting it directly. The configuration is not applied right away but for the next utterance. ```kotlin -director.setConfig(director.config.copy( +synthesizer.setConfig(synthesizer.config.copy( defaultLanguage = Language(Locale.FRENCH) )) ``` -To keep your settings user interface up to date when the configuration changes, observe the `TtsDirector.config` property. Look at `TtsControls` in the Test App for an example of a TTS settings screen. +To keep your settings user interface up to date when the configuration changes, observe the `PublicationSpeechSynthesizer.config` property. Look at `TtsControls` in the Test App for an example of a TTS settings screen. ### Default language -The language used by the director is important, as it determines which TTS voices are used and the rules to tokenize the publication text content. +The language used by the synthesizer is important, as it determines which TTS voices are used and the rules to tokenize the publication text content. -By default, `TtsDirector` will use any language explicitly set on a text element (e.g. with `lang="fr"` in HTML) and fall back on the global language declared in the publication manifest. You can override the fallback language with `Configuration.defaultLanguage` which is useful when the publication language is incorrect or missing. +By default, `PublicationSpeechSynthesizer` will use any language explicitly set on a text element (e.g. with `lang="fr"` in HTML) and fall back on the global language declared in the publication manifest. You can override the fallback language with `Configuration.defaultLanguage` which is useful when the publication language is incorrect or missing. ### Speech rate -The `rateMultiplier` configuration sets the speech speed as a multiplier, 1.0 being the normal speed. The available range depends on the TTS engine and can be queried with `director.rateMultiplierRange`. +The `rateMultiplier` configuration sets the speech speed as a multiplier, 1.0 being the normal speed. The available range depends on the TTS engine and can be queried with `synthesizer.rateMultiplierRange`. ```kotlin -TtsDirector.Configuration( - rateMultiplier = multiplier.coerceIn(director.rateMultiplierRange) +PublicationSpeechSynthesizer.Configuration( + rateMultiplier = multiplier.coerceIn(synthesizer.rateMultiplierRange) ) ``` ### Voice -The `voice` setting can be used to change the synthetic voice used by the engine. To get the available list, use `director.availableVoices`. Note that the available voices can change during runtime, observe `availableVoices` to keep your interface up to date. +The `voice` setting can be used to change the synthetic voice used by the engine. To get the available list, use `synthesizer.availableVoices`. Note that the available voices can change during runtime, observe `availableVoices` to keep your interface up to date. To restore a user-selected voice, persist the unique voice identifier returned by `voice.id`. @@ -96,13 +96,13 @@ Users do not expect to see all available voices at all time, as they depend on t ```kotlin // Supported voices grouped by their language. val voicesByLanguage: Flow>> = - director.availableVoices + synthesizer.availableVoices .map { voices -> voices.groupBy { it.language } } // Supported voices for the language selected in the configuration. val voicesForSelectedLanguage: Flow> = combine( - director.config.map { it.defaultLanguage }, + synthesizer.config.map { it.defaultLanguage }, voicesByLanguage, ) { language, voices -> language @@ -116,26 +116,26 @@ val voicesForSelectedLanguage: Flow> = :point_up: This only applies if you use the default `AndroidTtsEngine`. -Sometimes the device does not have access to all the data required by a selected voice, in which case the user needs to download it manually. You can catch the `TtsEngine.Exception.LanguageSupportIncomplete` error and call `director.engine.requestInstallMissingVoice()` to start the system voice download activity. +Sometimes the device does not have access to all the data required by a selected voice, in which case the user needs to download it manually. You can catch the `TtsEngine.Exception.LanguageSupportIncomplete` error and call `synthesizer.engine.requestInstallMissingVoice()` to start the system voice download activity. ```kotlin -val director = TtsDirector(context, publication) +val synthesizer = PublicationSpeechSynthesizer(context, publication) -director.listener = object : TtsDirector.Listener { - override fun onUtteranceError( utterance: TtsDirector.Utterance, error: TtsDirector.Exception) { +synthesizer.listener = object : PublicationSpeechSynthesizer.Listener { + override fun onUtteranceError( utterance: PublicationSpeechSynthesizer.Utterance, error: PublicationSpeechSynthesizer.Exception) { handle(error) } - override fun onError(error: TtsDirector.Exception) { + override fun onError(error: PublicationSpeechSynthesizer.Exception) { handle(error) } - private fun handle(error: TtsDirector.Exception) { + private fun handle(error: PublicationSpeechSynthesizer.Exception) { when (error) { - is TtsDirector.Exception.Engine -> + is PublicationSpeechSynthesizer.Exception.Engine -> when (val err = error.error) { is TtsEngine.Exception.LanguageSupportIncomplete -> { - director.engine.requestInstallMissingVoice(context) + synthesizer.engine.requestInstallMissingVoice(context) } else -> { @@ -149,15 +149,15 @@ director.listener = object : TtsDirector.Listener { ## Synchronizing the TTS with a Navigator -While `TtsDirector` is completely independent from `Navigator` and can be used to play a publication in the background, most apps prefer to render the publication while it is being read aloud. The `Locator` core model is used as a means to synchronize the TTS director with the navigator. +While `PublicationSpeechSynthesizer` is completely independent from `Navigator` and can be used to play a publication in the background, most apps prefer to render the publication while it is being read aloud. The `Locator` core model is used as a means to synchronize the synthesizer with the navigator. ### Starting the TTS from the visible page -`TtsDirector.start()` takes a starting `Locator` for parameter. You can use it to begin the playback from the currently visible page in a `VisualNavigator` using `firstVisibleElementLocator()`. +`PublicationSpeechSynthesizer.start()` takes a starting `Locator` for parameter. You can use it to begin the playback from the currently visible page in a `VisualNavigator` using `firstVisibleElementLocator()`. ```kotlin val start = (navigator as? VisualNavigator)?.firstVisibleElementLocator() -director.start(fromLocator = start) +synthesizer.start(fromLocator = start) ``` ### Highlighting the currently spoken utterance @@ -167,7 +167,7 @@ If you want to highlight or underline the current utterance on the page, you can ```kotlin val navigator: DecorableNavigator -director.state +synthesizer.state .map { (it as? State.Playing)?.utterance } .distinctUntilChanged() .onEach { utterance -> @@ -189,7 +189,7 @@ You can use the same technique as described above to automatically synchronize t However, this will not turn pages mid-utterance, which can be annoying when speaking a long sentence spanning two pages. To address this, you can go to the `State.Playing.range` locator instead, which is updated regularly while speaking each word of an utterance. Note that jumping to the `range` locator for every word can severely impact performances. To alleviate this, you can throttle the flow using [`throttleLatest`](https://github.com/Kotlin/kotlinx.coroutines/issues/1107#issuecomment-1083076517). ```kotlin -director.state +synthesizer.state .filterIsInstance() .map { it.range ?: it.utterance.locator } .throttleLatest(1.seconds) @@ -201,12 +201,12 @@ director.state ## Using a custom utterance tokenizer -By default, the `TtsDirector` will split the publication text into sentences to create the utterances. You can customize this for finer or coarser utterances using a different tokenizer. +By default, the `PublicationSpeechSynthesizer` will split the publication text into sentences to create the utterances. You can customize this for finer or coarser utterances using a different tokenizer. For example, this will speak the content word-by-word: ```kotlin -val director = TtsDirector(context, publication, +val synthesizer = PublicationSpeechSynthesizer(context, publication, tokenizerFactory = { language -> TextContentTokenizer( defaultLanguage = language, @@ -220,10 +220,10 @@ For completely custom tokenizing or to improve the existing tokenizers, you can ## Using a custom TTS engine -`TtsDirector` can be used with any TTS engine, provided they implement the `TtsEngine` interface. Take a look at `AndroidTtsEngine` for an example implementation. +`PublicationSpeechSynthesizer` can be used with any TTS engine, provided they implement the `TtsEngine` interface. Take a look at `AndroidTtsEngine` for an example implementation. ```kotlin -val director = TtsDirector(publication, +val synthesizer = PublicationSpeechSynthesizer(publication, engineFactory = { listener -> MyCustomEngine(listener) } ) ``` diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/PublicationSpeechSynthesizer.kt similarity index 92% rename from readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt rename to readium/navigator/src/main/java/org/readium/r2/navigator/tts/PublicationSpeechSynthesizer.kt index b4ee66646a..0dbf7e9310 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsDirector.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/PublicationSpeechSynthesizer.kt @@ -23,14 +23,15 @@ import org.readium.r2.shared.util.tokenizer.TextUnit import java.util.* /** - * A text-to-speech director will iterate through the content of a [publication] and synthesize it - * using a [TtsEngine]. + * [PublicationSpeechSynthesizer] orchestrates the rendition of a [publication] by iterating through + * its content, splitting it into individual utterances using a [ContentTokenizer], then using a + * [TtsEngine] to read them aloud. * - * Don't forget to call [close] when you are done with this [TtsDirector]. + * Don't forget to call [close] when you are done using the [PublicationSpeechSynthesizer]. */ @OptIn(DelicateReadiumApi::class) @ExperimentalReadiumApi -class TtsDirector private constructor( +class PublicationSpeechSynthesizer private constructor( private val publication: Publication, config: Configuration, engineFactory: (listener: TtsEngine.Listener) -> E, @@ -41,7 +42,7 @@ class TtsDirector private constructor( companion object { /** - * Creates a [TtsDirector] using the default native [AndroidTtsEngine]. + * Creates a [PublicationSpeechSynthesizer] using the default native [AndroidTtsEngine]. * * @param publication Publication which will be iterated through and synthesized. * @param config Initial TTS configuration. @@ -55,7 +56,7 @@ class TtsDirector private constructor( config: Configuration = Configuration(), tokenizerFactory: (defaultLanguage: Language?) -> ContentTokenizer = defaultTokenizerFactory, listener: Listener? = null, - ): TtsDirector? = invoke( + ): PublicationSpeechSynthesizer? = invoke( publication, config = config, engineFactory = { AndroidTtsEngine(context, listener = it) }, @@ -64,7 +65,7 @@ class TtsDirector private constructor( ) /** - * Creates a [TtsDirector] using a custom [TtsEngine]. + * Creates a [PublicationSpeechSynthesizer] using a custom [TtsEngine]. * * @param publication Publication which will be iterated through and synthesized. * @param config Initial TTS configuration. @@ -79,10 +80,10 @@ class TtsDirector private constructor( engineFactory: (TtsEngine.Listener) -> E, tokenizerFactory: (defaultLanguage: Language?) -> ContentTokenizer = defaultTokenizerFactory, listener: Listener? = null, - ): TtsDirector? { + ): PublicationSpeechSynthesizer? { if (!canSpeak(publication)) return null - return TtsDirector(publication, config, engineFactory, tokenizerFactory, listener) + return PublicationSpeechSynthesizer(publication, config, engineFactory, tokenizerFactory, listener) } /** @@ -96,7 +97,7 @@ class TtsDirector private constructor( } /** - * Returns whether the [publication] can be played with a [TtsDirector]. + * Returns whether the [publication] can be played with a [PublicationSpeechSynthesizer]. */ fun canSpeak(publication: Publication): Boolean = publication.content() != null @@ -139,13 +140,13 @@ class TtsDirector private constructor( ) /** - * Represents a state of the [TtsDirector]. + * Represents a state of the [PublicationSpeechSynthesizer]. */ sealed class State { - /** The [TtsDirector] is completely stopped and must be (re)started from a given locator. */ + /** The [PublicationSpeechSynthesizer] is completely stopped and must be (re)started from a given locator. */ object Stopped : State() - /** The [TtsDirector] is paused at the given utterance. */ + /** The [PublicationSpeechSynthesizer] is paused at the given utterance. */ data class Paused(val utterance: Utterance) : State() /** @@ -159,7 +160,7 @@ class TtsDirector private constructor( private val _state = MutableStateFlow(State.Stopped) /** - * Current state of the [TtsDirector]. + * Current state of the [PublicationSpeechSynthesizer]. */ val state: StateFlow = _state.asStateFlow() @@ -175,7 +176,7 @@ class TtsDirector private constructor( * Underlying [TtsEngine] instance. * * WARNING: Don't control the playback or set the config directly with the engine. Use the - * [TtsDirector] APIs instead. This property is used to access engine-specific APIs such as + * [PublicationSpeechSynthesizer] APIs instead. This property is used to access engine-specific APIs such as * [AndroidTtsEngine.requestInstallMissingVoice]. */ @DelicateReadiumApi @@ -193,7 +194,7 @@ class TtsDirector private constructor( } /** - * Interrupts the [TtsEngine] and closes this [TtsDirector]. + * Interrupts the [TtsEngine] and closes this [PublicationSpeechSynthesizer]. */ override suspend fun close() { tryOrLog { diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt index bce95e3f16..adc75e2bd9 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/TtsEngine.kt @@ -18,7 +18,7 @@ typealias TtsTry = Try /** * A text-to-speech engine synthesizes text utterances (e.g. sentence). * - * Implement this interface to support third-party engines with [TtsDirector]. + * Implement this interface to support third-party engines with [PublicationSpeechSynthesizer]. */ @ExperimentalReadiumApi interface TtsEngine : SuspendingCloseable { diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt index edfdece263..6f6a2cc040 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/Metadata.kt @@ -162,12 +162,6 @@ data class Metadata( languages.firstOrNull()?.let { Language(it) } } - /** - * Returns the [Locale] resolved from the declared BCP 47 language. - */ - @IgnoredOnParcel - val locale: Locale? get() = language?.locale - /** * Computes a [ReadingProgression] when the value of [readingProgression] is set to * auto, using the publication language. diff --git a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt index 330b318c07..4063bd01ee 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/publication/services/content/ContentTokenizer.kt @@ -18,12 +18,6 @@ import org.readium.r2.shared.util.tokenizer.Tokenizer @ExperimentalReadiumApi fun interface ContentTokenizer : Tokenizer -/** A passthrough tokenizer which does not modify its input. */ -@ExperimentalReadiumApi -object IdentityContentTokenizer : ContentTokenizer { - override fun tokenize(data: Content.Element): List = listOf(data) -} - /** * A [ContentTokenizer] using a [TextTokenizer] to split the text of the [Content.Element] into smaller * portions. diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index 1b272f5f3a..ae3a9269fa 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import org.readium.r2.navigator.tts.TtsDirector.Configuration +import org.readium.r2.navigator.tts.PublicationSpeechSynthesizer.Configuration import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.ExperimentalReadiumApi import org.readium.r2.shared.util.Language diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt index 7a3f80c6c6..910e1a0c12 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsViewModel.kt @@ -15,8 +15,8 @@ import kotlinx.coroutines.runBlocking import org.readium.r2.navigator.Navigator import org.readium.r2.navigator.VisualNavigator import org.readium.r2.navigator.tts.AndroidTtsEngine -import org.readium.r2.navigator.tts.TtsDirector -import org.readium.r2.navigator.tts.TtsDirector.Configuration +import org.readium.r2.navigator.tts.PublicationSpeechSynthesizer +import org.readium.r2.navigator.tts.PublicationSpeechSynthesizer.Configuration import org.readium.r2.navigator.tts.TtsEngine import org.readium.r2.navigator.tts.TtsEngine.Voice import org.readium.r2.shared.DelicateReadiumApi @@ -26,16 +26,16 @@ import org.readium.r2.shared.publication.Locator import org.readium.r2.shared.publication.Publication import org.readium.r2.shared.util.Language import org.readium.r2.testapp.R -import org.readium.r2.navigator.tts.TtsDirector.State as TtsState +import org.readium.r2.navigator.tts.PublicationSpeechSynthesizer.State as TtsState /** - * View model controlling the text-to-speech director. + * View model controlling a [PublicationSpeechSynthesizer] to read a publication aloud. * * Note: This is not an Android [ViewModel], but it is a component of [ReaderViewModel]. */ @OptIn(ExperimentalReadiumApi::class) class TtsViewModel private constructor( - private val director: TtsDirector, + private val synthesizer: PublicationSpeechSynthesizer, private val scope: CoroutineScope ) { @@ -49,7 +49,7 @@ class TtsViewModel private constructor( publication: Publication, scope: CoroutineScope ): TtsViewModel? = - TtsDirector(context, publication) + PublicationSpeechSynthesizer(context, publication) ?.let { TtsViewModel(it, scope) } } @@ -83,7 +83,7 @@ class TtsViewModel private constructor( sealed class Event { /** - * Emitted when the [TtsDirector] fails with an error. + * Emitted when the [PublicationSpeechSynthesizer] fails with an error. */ class OnError(val error: UserException) : Event() @@ -107,16 +107,16 @@ class TtsViewModel private constructor( private val isStopped: StateFlow init { - director.listener = DirectorListener() + synthesizer.listener = SynthesizerListener() // Automatically close the TTS when reaching the Stopped state. - isStopped = director.state - .map { it == TtsDirector.State.Stopped } + isStopped = synthesizer.state + .map { it == PublicationSpeechSynthesizer.State.Stopped } .stateIn(scope, SharingStarted.Lazily, initialValue = true) // Supported voices grouped by their language. val voicesByLanguage: Flow>> = - director.availableVoices + synthesizer.availableVoices .map { voices -> voices.groupBy { it.language } } // All supported languages. @@ -125,10 +125,10 @@ class TtsViewModel private constructor( voices.keys.sortedBy { it.locale.displayName } } - // Supported voices for the language selected in the [TtsDirector.Configuration]. + // Supported voices for the language selected in the synthesizer configuration. val voicesForSelectedLanguage: Flow> = combine( - director.config.map { it.defaultLanguage }, + synthesizer.config.map { it.defaultLanguage }, voicesByLanguage, ) { language, voices -> language @@ -139,13 +139,13 @@ class TtsViewModel private constructor( // Settings model for the current configuration. val settings: Flow = combine( - director.config, + synthesizer.config, languages, voicesForSelectedLanguage, ) { config, langs, voices -> Settings( config = config, - rateRange = director.rateMultiplierRange, + rateRange = synthesizer.rateMultiplierRange, availableLanguages = langs, availableVoices = voices ) @@ -154,7 +154,7 @@ class TtsViewModel private constructor( // Current view model state. state = combine( isStopped, - director.state, + synthesizer.state, settings ) { isStopped, state, currentSettings -> val playing = (state as? TtsState.Playing) @@ -172,7 +172,7 @@ class TtsViewModel private constructor( fun onCleared() { runBlocking { - director.close() + synthesizer.close() } } @@ -184,33 +184,33 @@ class TtsViewModel private constructor( scope.launch { val start = (navigator as? VisualNavigator)?.firstVisibleElementLocator() - director.start(fromLocator = start) + synthesizer.start(fromLocator = start) } } fun stop() { if (isStopped.value) return - director.stop() + synthesizer.stop() } fun pauseOrResume() { - director.pauseOrResume() + synthesizer.pauseOrResume() } fun pause() { - director.pause() + synthesizer.pause() } fun previous() { - director.previous() + synthesizer.previous() } fun next() { - director.next() + synthesizer.next() } fun setConfig(config: Configuration) { - director.setConfig(config) + synthesizer.setConfig(config) } /** @@ -218,16 +218,16 @@ class TtsViewModel private constructor( */ @OptIn(DelicateReadiumApi::class) fun requestInstallVoice(context: Context) { - director.engine.requestInstallMissingVoice(context) + synthesizer.engine.requestInstallMissingVoice(context) } - private inner class DirectorListener : TtsDirector.Listener { + private inner class SynthesizerListener : PublicationSpeechSynthesizer.Listener { override fun onUtteranceError( - utterance: TtsDirector.Utterance, - error: TtsDirector.Exception + utterance: PublicationSpeechSynthesizer.Utterance, + error: PublicationSpeechSynthesizer.Exception ) { scope.launch { - // The [TtsDirector] is paused when encountering an error while playing an + // The synthesizer is paused when encountering an error while playing an // utterance. Here we will skip to the next utterance unless the exception is // recoverable. val shouldContinuePlayback = !handleTtsException(error) @@ -237,7 +237,7 @@ class TtsViewModel private constructor( } } - override fun onError(error: TtsDirector.Exception) { + override fun onError(error: PublicationSpeechSynthesizer.Exception) { scope.launch { handleTtsException(error) } @@ -246,9 +246,9 @@ class TtsViewModel private constructor( /** * Handles the given error and returns whether it was recovered from. */ - private suspend fun handleTtsException(error: TtsDirector.Exception): Boolean = + private suspend fun handleTtsException(error: PublicationSpeechSynthesizer.Exception): Boolean = when (error) { - is TtsDirector.Exception.Engine -> when (val err = error.error) { + is PublicationSpeechSynthesizer.Exception.Engine -> when (val err = error.error) { // The `LanguageSupportIncomplete` exception is a special case. We can recover from // it by asking the user to download the missing voice data. is TtsEngine.Exception.LanguageSupportIncomplete -> { From 6d68be276cd4ac6f1199ee825854426bdbf44c53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Fri, 8 Jul 2022 11:22:44 +0200 Subject: [PATCH 57/59] Add missing doc comments --- .../java/org/readium/r2/shared/util/Either.kt | 9 +++++++++ .../org/readium/r2/shared/util/Language.kt | 14 ++++++++++++++ .../r2/shared/util/tokenizer/Tokenizer.kt | 2 +- .../r2/testapp/reader/BaseReaderFragment.kt | 2 +- .../r2/testapp/reader/tts/TtsControls.kt | 3 +++ .../r2/testapp/utils/extensions/Context.kt | 18 ++++++------------ 6 files changed, 34 insertions(+), 14 deletions(-) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt index 257d4d26db..2bc4fe2a71 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/Either.kt @@ -1,5 +1,14 @@ +/* + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. + */ + package org.readium.r2.shared.util +/** + * Generic wrapper to store two mutually exclusive types. + */ sealed class Either { class Left(val value: A) : Either() class Right(val value: B) : Either() diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/Language.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/Language.kt index d8614cfef5..dd104a8ef1 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/Language.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/Language.kt @@ -8,20 +8,34 @@ package org.readium.r2.shared.util import java.util.* +/** + * Represents a language with its region. + * + * @param code BCP-47 language code + * @param locale Java [Locale] + */ class Language private constructor(val code: String, val locale: Locale) { + /** + * Creates a [Language] from a Java [Locale]. + */ constructor(locale: Locale) : this(code = locale.toLanguageTag(), locale = locale) companion object { + /** + * Creates a [Language] from a BCP-47 language code. + */ operator fun invoke(code: String): Language { val fixedCode = code.replace("_", "-") return Language(code = fixedCode, locale = Locale.forLanguageTag(code)) } } + /** Indicates whether this language is a regional variant. */ val isRegional: Boolean = locale.country.isNotEmpty() + /** Returns this [Language] after stripping the region. */ fun removeRegion(): Language = Language(code.split("-", limit = 2).first()) diff --git a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/Tokenizer.kt b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/Tokenizer.kt index 252a81bc30..f15b864e54 100644 --- a/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/Tokenizer.kt +++ b/readium/shared/src/main/java/org/readium/r2/shared/util/tokenizer/Tokenizer.kt @@ -8,7 +8,7 @@ package org.readium.r2.shared.util.tokenizer import org.readium.r2.shared.ExperimentalReadiumApi -/** A tokenizer splits a content into a list of tokens. */ +/** A tokenizer splits a piece of data [D] into a list of [T] tokens. */ @ExperimentalReadiumApi fun interface Tokenizer { fun tokenize(data: D): List diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt index 4e76d70787..1dd5a51c36 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/BaseReaderFragment.kt @@ -43,7 +43,7 @@ abstract class BaseReaderFragment : Fragment() { when (event) { is ReaderViewModel.FeedbackEvent.BookmarkFailed -> toast(R.string.bookmark_exists) - is ReaderViewModel.FeedbackEvent.BookmarkSuccessfullyAdded -> (R.string.bookmark_added) + is ReaderViewModel.FeedbackEvent.BookmarkSuccessfullyAdded -> toast(R.string.bookmark_added) } } } diff --git a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt index ae3a9269fa..0c0f15515b 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/reader/tts/TtsControls.kt @@ -25,6 +25,9 @@ import org.readium.r2.testapp.shared.views.SelectorListItem import org.readium.r2.testapp.utils.extensions.asStateWhenStarted import java.text.DecimalFormat +/** + * TTS controls bar displayed at the bottom of the screen when speaking a publication. + */ @OptIn(ExperimentalReadiumApi::class) @Composable fun TtsControls(model: TtsViewModel, modifier: Modifier = Modifier) { diff --git a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Context.kt b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Context.kt index 82da9606a3..4275d7c336 100644 --- a/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Context.kt +++ b/test-app/src/main/java/org/readium/r2/testapp/utils/extensions/Context.kt @@ -1,11 +1,7 @@ /* - * Module: r2-testapp-kotlin - * Developers: Aferdita Muriqi, Clément Baumann - * - * Copyright (c) 2018. European Digital Reading Lab. All rights reserved. - * Licensed to the Readium Foundation under one or more contributor license agreements. - * Use of this source code is governed by a BSD-style license which is detailed in the - * LICENSE file present in the project repository where this source code is maintained. + * Copyright 2022 Readium Foundation. All rights reserved. + * Use of this source code is governed by the BSD-style license + * available in the top-level LICENSE file of the project. */ package org.readium.r2.testapp.utils.extensions @@ -21,16 +17,14 @@ import kotlinx.coroutines.suspendCancellableCoroutine import org.readium.r2.testapp.R import kotlin.coroutines.resume - -/** - * Extensions - */ - @ColorInt fun Context.color(@ColorRes id: Int): Int { return ContextCompat.getColor(this, id) } +/** + * Displays a confirmation [AlertDialog] and returns the user choice. + */ suspend fun Context.confirmDialog( message: String, @StringRes positiveButton: Int = R.string.ok, From f1e27aa1d5e64e060a18ca7a9de0f56ca5f97c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 11 Jul 2022 15:54:11 +0200 Subject: [PATCH 58/59] Fix loading pending locators --- .../navigator/epub/EpubNavigatorFragment.kt | 48 ++++++++--------- .../r2/navigator/pager/R2EpubPageFragment.kt | 31 +++++++---- .../r2/navigator/pager/R2PagerAdapter.kt | 53 +++++++++++++++++-- .../r2/navigator/tts/AndroidTtsEngine.kt | 6 +-- 4 files changed, 94 insertions(+), 44 deletions(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index a9de4a1310..d468b542b6 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -37,7 +37,6 @@ import org.readium.r2.navigator.extensions.positionsByResource import org.readium.r2.navigator.extensions.withBaseUrl import org.readium.r2.navigator.html.HtmlDecorationTemplates import org.readium.r2.navigator.pager.R2EpubPageFragment -import org.readium.r2.navigator.pager.R2FXLPageFragment import org.readium.r2.navigator.pager.R2PagerAdapter import org.readium.r2.navigator.pager.R2PagerAdapter.PageResource import org.readium.r2.navigator.pager.R2ViewPager @@ -292,14 +291,18 @@ class EpubNavigatorFragment private constructor( }) + return view + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + // Restore the last locator before a configuration change (e.g. screen rotation), or the // initial locator when given. val locator = savedInstanceState?.getParcelable("locator") ?: initialLocator if (locator != null) { go(locator) } - - return view } override fun onSaveInstanceState(outState: Bundle) { @@ -312,11 +315,6 @@ class EpubNavigatorFragment private constructor( notifyCurrentLocation() } - /** - * Locator waiting to be loaded in the navigator. - */ - internal var pendingLocator: Locator? = null - override fun go(locator: Locator, animated: Boolean, completion: () -> Unit): Boolean { listener?.onJumpToLocator(locator) @@ -332,16 +330,12 @@ class EpubNavigatorFragment private constructor( else -> false } } ?: return - val (index, resource) = page + val (index, _) = page if (resourcePager.currentItem != index) { - if (resource is PageResource.EpubReflowable) { - pendingLocator = locator - } resourcePager.currentItem = index } - - currentReflowablePageFragment?.loadLocator(locator) + r2PagerAdapter?.loadLocatorAt(index, locator) } if (publication.metadata.presentation.layout != EpubLayout.FIXED) { @@ -649,14 +643,15 @@ class EpubNavigatorFragment private constructor( get() = if (::resourcePager.isInitialized) resourcePager.adapter as? R2PagerAdapter else null - private val currentFragment: Fragment? get() = - r2PagerAdapter?.let { adapter -> - adapter.mFragments.get(adapter.getItemId(resourcePager.currentItem)) - } - private val currentReflowablePageFragment: R2EpubPageFragment? get() = currentFragment as? R2EpubPageFragment + private val currentFragment: Fragment? get() = + fragmentAt(resourcePager.currentItem) + + private fun fragmentAt(index: Int): Fragment? = + r2PagerAdapter?.mFragments?.get(adapter.getItemId(index)) + /** * Returns the reflowable page fragment matching the given href, if it is already loaded in the * view pager. @@ -733,18 +728,19 @@ class EpubNavigatorFragment private constructor( debounceLocationNotificationJob = launch { delay(100L) - val reflowableWebView = currentReflowablePageFragment?.webView - if (pendingLocator != null) { + if (currentReflowablePageFragment?.isLoaded?.value == false) { return@launch } - // The transition has stabilized, so we can ask the web view to refresh its current - // item to reflect the current scroll position. - reflowableWebView?.updateCurrentItem() + val reflowableWebView = currentReflowablePageFragment?.webView + val progression = reflowableWebView?.run { + // The transition has stabilized, so we can ask the web view to refresh its current + // item to reflect the current scroll position. + updateCurrentItem() + progression.coerceIn(0.0, 1.0) + } ?: 0.0 val resource = publication.readingOrder[resourcePager.currentItem] - val progression = reflowableWebView?.progression?.coerceIn(0.0, 1.0) ?: 0.0 - val positionLocator = publication.positionsByResource[resource.href]?.let { positions -> val index = ceil(progression * (positions.size - 1)).toInt() positions.getOrNull(index) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt index f71e159492..c63ae167c4 100755 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2EpubPageFragment.kt @@ -49,6 +49,8 @@ class R2EpubPageFragment : Fragment() { internal val link: Link? get() = requireArguments().getParcelable("link") + private var pendingLocator: Locator? = null + private val positionCount: Long get() = requireArguments().getLong("positionCount") @@ -85,6 +87,11 @@ class R2EpubPageFragment : Fragment() { private val shouldApplyInsetsPadding: Boolean get() = navigator?.config?.shouldApplyInsetsPadding ?: true + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + pendingLocator = requireArguments().getParcelable("initialLocator") + } + @SuppressLint("SetJavaScriptEnabled", "JavascriptInterface") override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { _binding = ViewpagerFragmentEpubBinding.inflate(inflater, container, false) @@ -319,26 +326,29 @@ class R2EpubPageFragment : Fragment() { val webView = requireNotNull(webView) webView.visibility = View.VISIBLE - if (isCurrentResource) { - val epubNavigator = requireNotNull(navigator) - val locator = epubNavigator.pendingLocator - epubNavigator.pendingLocator = null - if (locator != null) { - loadLocator(webView, epubNavigator.readingProgression, locator) + pendingLocator + ?.let { locator -> + loadLocator(webView, requireNotNull(navigator).readingProgression, locator) } + .also { pendingLocator = null } - webView.listener.onPageLoaded() - } + webView.listener.onPageLoaded() } } - fun loadLocator(locator: Locator) = + internal fun loadLocator(locator: Locator) { + if (!isLoaded.value) { + pendingLocator = locator + return + } + viewLifecycleOwner.lifecycleScope.launchWhenCreated { val webView = requireNotNull(webView) val epubNavigator = requireNotNull(navigator) loadLocator(webView, epubNavigator.readingProgression, locator) webView.listener.onProgressionChanged() } + } private suspend fun loadLocator(webView: R2WebView, readingProgression: ReadingProgression, locator: Locator) { val text = locator.text @@ -376,11 +386,12 @@ class R2EpubPageFragment : Fragment() { } companion object { - fun newInstance(url: String, link: Link? = null, positionCount: Int = 0): R2EpubPageFragment = + fun newInstance(url: String, link: Link? = null, initialLocator: Locator? = null, positionCount: Int = 0): R2EpubPageFragment = R2EpubPageFragment().apply { arguments = Bundle().apply { putString("url", url) putParcelable("link", link) + putParcelable("initialLocator", initialLocator) putLong("positionCount", positionCount.toLong()) } } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2PagerAdapter.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2PagerAdapter.kt index dbeeea0e93..80da245fad 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2PagerAdapter.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/pager/R2PagerAdapter.kt @@ -10,10 +10,14 @@ package org.readium.r2.navigator.pager import android.os.Bundle +import android.os.Parcelable import android.view.ViewGroup +import androidx.collection.LongSparseArray +import androidx.collection.forEach import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import org.readium.r2.shared.publication.Link +import org.readium.r2.shared.publication.Locator class R2PagerAdapter internal constructor(val fm: FragmentManager, private val resources: List) : R2FragmentPagerAdapter(fm) { @@ -40,7 +44,8 @@ class R2PagerAdapter internal constructor(val fm: FragmentManager, private val r return nextFragment } - override fun setPrimaryItem(container: ViewGroup, position: Int, `object`: Any) { + override fun setPrimaryItem(container: ViewGroup, position: Int, `object`: Any) + { if (getCurrentFragment() !== `object`) { currentFragment = `object` as Fragment nextFragment = mFragments.get(getItemId(position + 1)) @@ -49,17 +54,26 @@ class R2PagerAdapter internal constructor(val fm: FragmentManager, private val r super.setPrimaryItem(container, position, `object`) } - override fun getItem(position: Int): Fragment = - when (val resource = resources[position]) { + override fun getItem(position: Int): Fragment { + val locator = popPendingLocatorAt(getItemId(position)) + return when (val resource = resources[position]) { is PageResource.EpubReflowable -> { - R2EpubPageFragment.newInstance(resource.url, resource.link, positionCount = resource.positionCount) + R2EpubPageFragment.newInstance( + resource.url, + resource.link, + initialLocator = locator, + positionCount = resource.positionCount + ) } is PageResource.EpubFxl -> { R2FXLPageFragment.newInstance(resource.url1, resource.url2) } is PageResource.Cbz -> { fm.fragmentFactory - .instantiate(ClassLoader.getSystemClassLoader(), R2CbzPageFragment::class.java.name) + .instantiate( + ClassLoader.getSystemClassLoader(), + R2CbzPageFragment::class.java.name + ) .also { it.arguments = Bundle().apply { putParcelable("link", resource.link) @@ -67,9 +81,38 @@ class R2PagerAdapter internal constructor(val fm: FragmentManager, private val r } } } + } override fun getCount(): Int { return resources.size } + override fun restoreState(state: Parcelable?, loader: ClassLoader?) { + super.restoreState(state, loader) + + pendingLocators.forEach { i, locator -> + (mFragments.get(i) as? R2EpubPageFragment)?.loadLocator(locator) + } + pendingLocators.clear() + } + + private val pendingLocators = LongSparseArray() + + /** + * Loads the given [Locator] in the page fragment at the given position. If not loaded, it + * will be used when the fragment will be created. + */ + internal fun loadLocatorAt(position: Int, locator: Locator) { + val id = getItemId(position) + val fragment = mFragments.get(id) + if (fragment == null) { + pendingLocators.put(id, locator) + } else { + (fragment as? R2EpubPageFragment)?.loadLocator(locator) + } + } + + private fun popPendingLocatorAt(id: Long): Locator? = + pendingLocators.get(id) + .also { pendingLocators.remove(id) } } diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index f6870a2858..8e4ed5ab66 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -70,6 +70,9 @@ class AndroidTtsEngine( */ private val tasks = Channel(Channel.BUFFERED) + /** Future completed when the [engine] is fully initialized. */ + private val init = CompletableDeferred() + init { scope.launch { init.await() @@ -135,9 +138,6 @@ class AndroidTtsEngine( // Engine - /** Future completed when the [engine] is fully initialized. */ - private val init = CompletableDeferred() - /** Underlying Android [TextToSpeech] engine. */ private val engine = TextToSpeech(context, EngineInitListener()) From 127a65a9658d65b26a566a81d389134bcf80fa98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mickae=CC=88l=20Menu?= Date: Mon, 18 Jul 2022 11:33:46 +0200 Subject: [PATCH 59/59] Fix crash on some devices --- .../java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt index 8e4ed5ab66..6c747fb5d7 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/tts/AndroidTtsEngine.kt @@ -145,7 +145,9 @@ class AndroidTtsEngine( override fun onInit(status: Int) { if (status == TextToSpeech.SUCCESS) { scope.launch { - availableVoices = engine.voices.map { it.toVoice() } + tryOrLog { + availableVoices = engine.voices.map { it.toVoice() } + } init.complete(Unit) } } else {